CentOS7 Composerを使用してLaravelを導入 + プロジェクトを生成~確認まで

Laravel

いま勢いに乗っているPHPのフレームワークLaravelの導入メモ。

この記事を読めば、Laravelの導入からプロジェクトの生成~確認まで全て分かります。

スポンサーリンク

前置き

PHPの動作環境が必須です。
以下、自分の環境です。

# php -v
PHP 7.2.7 (cli) (built: Jun 20 2018 08:21:26) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies

Laravel導入方法

Laravelでプロジェクトを作成する方法は2通りあります。

・composerを使ってダイレクトにプロジェクト作成
・インストーラでLaravelインストール => プロジェクトを作成

今回は前者の方法である、composerコマンドでオプションを指定してプロジェクトを作成していくやり方で進めていきます。
※依存関係にあるパッケージも合わせてインストールしてくれるため導入が楽で安全なため。

事前参考

Composerを導入してなければ以下参考にしてください。

導入

準備

生成したいプロジェクトのディレクトリ直下に移動して、プロジェクト用のフォルダを生成します。

# mkdir /var/www/html/test

とりあえずテストとして/var/www/html/にtestフォルダを作成しました。

次に、プロジェクトフォルダのユーザとパーミッションをroot以外のユーザに設定します。

# chmod 777 /var/www/html/test
# chown -R ユーザ名:ユーザ名 /var/www/html/test

もしここでrootでログインしていたら上記で作成したユーザでログインしなおしましょう。

# su - ユーザ名

プロジェクト生成

ここでいよいよプロジェクト生成コマンドを実行します。

# composer create-project laravel/laravel --prefer-dist /var/www/html/test
Installing laravel/laravel (v5.7.19)
  - Installing laravel/laravel (v5.7.19): Downloading (100%)
Created project in test
> @php -r "file_exists('.env') || copy('.env.example', '.env');"
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 86 installs, 0 updates, 0 removals
  - Installing vlucas/phpdotenv (v2.5.2): Downloading (100%)
  - Installing symfony/css-selector (v4.2.1): Downloading (100%)
  - Installing tijsverkoyen/css-to-inline-styles (2.2.1): Downloading (100%)
  - Installing symfony/polyfill-php72 (v1.10.0): Downloading (100%)
  ・
  ・
  ・
Discovered Package: beyondcode/laravel-dump-server
Discovered Package: fideloper/proxy
Discovered Package: laravel/nexmo-notification-channel
Discovered Package: laravel/slack-notification-channel
Discovered Package: laravel/tinker
Discovered Package: nesbot/carbon
Discovered Package: nunomaduro/collision
Package manifest generated successfully.
> @php artisan key:generate --ansi
Application key set successfully.

依存関係のパッケージ等インストールしてくれてます。
これぞcomposerの恩恵ですね(´▽`)

パーミッション設定

読み書きされるディレクトリに対してパーミッションを設定します。

# chmod -R 777 /var/www/html/test/storage/
# chmod -R 777 /var/www/html/test/bootstrap/cache

確認

ホスト名/test/publicにアクセスして以下のように表示されれば成功です。

ドキュメントルートを変更する

Laravelデフォルトののドキュメントルートは、
「http://ホスト名/プロジェクト名/public/」となってます。
これを、
「http://ホスト名/プロジェクト名」にしていきます。

まずプロジェクト/public直下にあるファイル一式をプロジェクト直下に移動します。

# mv /var/www/html/test/public/* /var/www/html/test/

次に、移動した一式の中にあるindex.phpを編集します。

//変更前
require __DIR__.'/../bootstrap/autoload.php';
$app = require_once __DIR__.'/../bootstrap/app.php';
//変更後
require __DIR__.'/./bootstrap/autoload.php';
$app = require_once __DIR__.'/./bootstrap/app.php';

変更したら保存して、以下形式でアクセスしてみましょう。
http://ホスト名/プロジェクト名

ちゃんとLaravelのトップ画面が表示されれば成功となります。

トラブルシューティング

vendor/autoload.php: failed to open stream: No such file or directory

いざ、URLアクセスしても表題のエラーがでることがあります。vendorフォルダがなく怒られてます。

これはcomposerがインストールされてなく、不完全にプロジェクトcreateされたときにvendorフォルダが生成されず発生するものです。

プロジェクトフォルダ直下で以下コマンドを実行すれば再度必要なパッケージを拾ってきてくれます。

# composer update

verify that they are enabled in your .ini files:

composer create-projectする時に以下のメッセージが表示されてcreate-project中に中断されてしまうことがありました。

To enable extensions, verify that they are enabled in your .ini files:
    - /etc/php.ini
    - /etc/php.d/20-bz2.ini
    - /etc/php.d/20-calendar.ini
    - /etc/php.d/20-ctype.ini
    - /etc/php.d/20-curl.ini
    - /etc/php.d/20-exif.ini
    - /etc/php.d/20-fileinfo.ini
    - /etc/php.d/20-ftp.ini
    - /etc/php.d/20-gettext.ini
    - /etc/php.d/20-iconv.ini
    - /etc/php.d/20-json.ini
    - /etc/php.d/20-phar.ini
    - /etc/php.d/20-sockets.ini
    - /etc/php.d/20-tokenizer.ini
  You can also run `php --ini` inside terminal to see which files are used by PHP in CLI mode.

php.iniで上記モジュールが有効になっていない時のエラーメッセージ。
自分のケースはそもそも存在してないiniもあったりなかったり。

考えるの面倒なので改めて必要そうなモジュールをごっそりインストールして解決しました。
※「–enablerepo=remi-php72」ここの部分だけ各々のPHPのバージョンに合わせて下さい。

# yum -y install --enablerepo=remi-php72 php-mbstring php-mysql php-devel php-pear php-mbstring php-openssl php-mbstring php-pdo

こんなんでよいのやら..と、思いますが解決したので良しとしました。

補足

composerはroot以外で実行する

composerはroot以外で実行するのが基本のようです。


今回、/var/www/html/直下でroot以外のユーザでcreate-projectしました。
※ 生成コマンドの実行時、プロジェクトフォルダが存在しなければ新規生成してくれます。

# composer create-project laravel/laravel --prefer-dist /var/www/html/プロジェクトフォルダ

そのため、権限の問題でrootでプロジェクトフォルダをあらかじめ生成 + 権限付与してから別ユーザでcreate-projectした回りくどい流れになっております。

composerコマンドをrootで実行しないため + 既存の環境の権限設定等で今回のような手順を踏まえましたが、各々の環境背景に合わせ柔軟に置き換えてください。

ちなみにプロジェクトを生成するディレクトりに対して権限がないユーザでcomposer create-project実行するとあたり前ですが怒られます。

# composer create-project laravel/laravel /var/www/html/test --prefer-dist
Installing laravel/laravel (v5.7.19)
  [ErrorException]
  mkdir(): Permission denied

ここらへんは環境背景によるところですがトラブルシューティングも兼ね。

タイトルとURLをコピーしました