前置き
前回の記事で、LinuxのCentOSにApacheとPHPを導入して動作確認を行いました。
今回はLaravelを導入して、Windowsの時みたいにLaravelのHello Worldを表示させるところまで実施します。
手順
Composer
インストール
Windowsの時と同じく、Laravelをインストールする前にComposerをライブラリ管理のために導入することをおすすめします。composerコマンドも使えるようになりますし。
curl -sS https://getcomposer.org/installer | php
curlコマンドでComposerのインストーラをダウンロードしてきて、PHPで実行します。結果、エラーなく終われば[composer.phar]ファイルが実行ディレクトリにインストールされます。
ちなみに[-sS]というオプションは、エラー以外の余計な経過情報を表示しないオプションです。
Pathを通す
sudo mv composer.phar /usr/local/bin/composer
そして、[composer.phar]ファイルをmvコマンドで、[/local/bin]のディレクトリにフォルダを作って入れてあげることで[composerコマンド]のPathが通ります。
バージョン確認が表示されればOKです。
Laravel
インストール
composerコマンドが通るようになったら、laravelを入れることが出来ます。
まずはApacheの実行環境に移動します。
cd /var/www/html
次に移動先フォルダのパーミッションを変更します。初期状態のままではLaravel作成を拒否されてしまいます。ここでは、htmlフォルダに対して全ユーザに全権限与えるコマンドを入れてしまいます。
ここで全権限を入れても、作られるLaravelプロジェクトの中身も全権限になるわけではないですが、心配な方は後々出てくるグループ作成をこの段階で行って、必要なユーザを追加して権限を与えるように工夫しても良いでしょう。
sudo chmod 777 .
ここでプロジェクトを作成しますので、Laravelの作成コマンドを入力。
composer create-project --prefer-dist laravel/laravel laravel_sample 5.5
サンプルを参考にしたい書籍では、バージョン5.5を導入しているので、その通りのバージョンを指定します。以前の記事でPHP7.2を入れたのも5.5のLaravelを動かしたいからでした。
エラー対処
私の場合もそうでしたが、時と場合とバージョンによってはLaravelのインストールが失敗します。
このような場合は、エラー文を読んで対処することになります。
私のパターンだと、足りない機能(ext-dom)が存在するようでした。
ext-domはphp-xmlというパッケージに入っているのでインストールします。
ただ、インストールはRemiパッケージのものでないといけないので、その辺は注意しましょう。(←ハマった人)
PHP7.2のphp-xmlは下記コマンドでインストール(調査する中で日本語のようなマルチバイト文字を文字化けしないようにする機能としてmbstringとgdを入れるらしいのでついでに入れてます)出来ます。
sudo yum -y install --enablerepo=remi,remi-php72 php-mbstring php-xml php-xmlrpc php-gd
無事に入ったら、再度Laravel作成コマンドで進捗を確認します。(中途半端に出来たプロジェクトは消しておくこと)
設定
Apacheサーバのルートを変更
[localhost:8080]にアクセスした時に開く場所を変更する。
[/etc/httpd/conf/httpd.conf]の記述を下記のように変えればOK。
Vimでの編集は以下のコマンド。
sudo vim /etc/httpd/conf/httpd.conf
確認はApacheサーバの再起動コマンドで再起動後に行えます。
sudo systemctl restart httpd
アクセス権限(SELinux)
これは権限の問題なので出ない場合もあるかもしれませんが、ブラウザからアクセスすると下記のようなエラーが出ました。
これの解除が大変でした。
ネット上の情報では、エラー文の通りにstorageの権限を変えれば良いというのが有力でしたが、一筋縄ではいかず色々試しました。(storage権限の最終的な対処は後述します)
最終的には、SELinuxというカーネルのアクセス制御を担う設定を変更することで解決しました。
こいつはroot権限でもアクセス制御することも可能らしく、今回のケースのLaravelのPermission Deniedも原因となっていました。
確認方法は以下のコマンド。
getenforce
設定を[enforcing(アクセス制御有効)]から[permissive(警告メッセージのみ)]に変更する。
sudo vim /etc/selinux/config
Vimで変更した。
再起動でも良いが、現在の状態をコマンドで変えても良い。
sudo setenforce 0
もう一度、状態確認のコマンドを打ち、[Permissive]になっていればOK。
私の場合は、ここまでにLaravelプロジェクトの配下を全て全権限編集にしていたので、流石にどうかと思いLaravelを入れ直したところ、再度[Permission Denied]が出てきたので、権限設定としては以下の方法を行い、最終案としました。
権限設定(Permission)
Permission Diniedエラーの本来の意味での解除は以下のように設定します。
※ storageの権限変更は[sudo chmod -R 777 ./storage]を行ってもOKですが、以下手順のほうがスマートだったので採用しています。
まずは、グループを作成します。
sudo groupadd laravel
そして、ユーザ一覧を見ます。
sudo cat /etc/passwd
全権限の[root], 仮想マシン用の[vagrant], そしてブラウザアクセス時のユーザとなる[apache]の3つのユーザをグループに追加します。
sudo gpasswd -a <ユーザ名> laravel
最後に、storageの所有者を変更してあげます
sudo chown -R :laravel ./storage
これで、準備はOKのはずです。
アクセス成功
ここまで設定を行うことでLaravelへのアクセスが成功した。
結構大変でした。
最後に
これでLinuxPCにおいてもWindowsの時の環境構築と同じラインまで持ってこれました。
Linux版では、更にMySQLの設定まで続けて行っていきますので、後続記事に続くってことで。