vagrant にcentos7 + php7 + composer + apache の作業環境を作る方法はこちら
http://qiita.com/ShirakawaYoshimaru/items/97da2167039b3dc12536
composerを使ってlaravel installerをinstall
$ composer global require "laravel/installer"
5分くらいかかった。ログもほとんどでなくてフリーズしているのかと思った。。。
laravelコマンドがどこからでも使えるようにPATHを通す
vagrant環境のcomposerでは/home/vagrant/.config/composer/vendor/bin
にinstallされるらしい。
$ export PATH="$PATH:/home/vagrant/.config/composer/vendor/bin"
laravelコマンドを使って新規プロジェクトを作成する
$ laravel new blog
3~4分かかった。何やらDLしていた。
これでカレントディレクトリにblogディレクトリが作成され、その中にlaravel関連ファイルがごそっと作られた。
laravelのテストページを正常に表示させるためにいろいろ修正していきます。
apacheのドキュメントルートを変更する
laravelのドキュメントルートは、laravel newコマンド
を実行した時に作成されるプロジェクト名ディレクトリの中にあるpublicディレクトリになります。
今回、/home/vagrant
でlaravel newコマンド
を実行したので、ドキュメントルートは以下になります。
/home/vagrant/blog/public
apacheのドキュメントルートは、初期設定だと/var/www/html
になっているのでこれを変更します。
viで/etc/httpd/conf/httpd.conf
ファイルを開きます。
$ sudo vi /etc/httpd/conf/httpd.conf
これを
DocumentRoot "/var/www/html"
こうじゃ
DocumentRoot "/home/vagrant/blog/public"
これを
<Directory "/var/www">
こうじゃ
<Directory "/home/vagrant/blog/public">
apacheの再起動
httpd.confを反映させるためにapacheを再起動します。
$ sudo systemctl restart httpd
これでドキュメントルートがlaravelのドキュメントルートに切り替わりました。
ブラウザから見てみる。
Forbidden。エラーが発生しました。
apacheのエラーログを見てみる。
apacheのログを見る時はtail -Fコマンドを使うと便利。ログの更新があったらリアルタイムに出力してくれる。
$ sudo tail -F /etc/httpd/logs/error_log
tail -Fを実行し後にもう一度localhost:8080にアクセスするとログにエラーが流れました。
[Wed May 03 06:34:55.074878 2017] [core:error] [pid 16920] (13)Permission denied: [client 10.0.2.2:60741] AH00035: access to / denied (filesystem path '/home/vagrant/blog') because search permissions are missing on a component of the path
Permission deniedのようです。
/home/vagrant/blog
へのアクセス権限がないのかな?・・・?
$ chmod 701 /home/vagrant
$ chmod 701 /home/blog
*710のほうがよい?
=>いや、701じゃないと動かなかった。(グループを作ってないから?)
chmod -R 701 blog/
ディレクトリ以下すべてのパーミッションを変えるとクラッシュ?してlaravelが起動されなくなる。
chmod: `blog/storage/framework/views/7a39a28791aba17c2aa3698c84d94c319c0d9baa.php' のパーミッションを変更しています: 許可されていない操作です
chmod: `blog/storage/framework/sessions/EC3JfcOR7mESQjKadqXDvdeQNsdUwqo72uddIjlw' のパーミッションを変更しています: 許可されていない操作です
でも
$ chmod -R 777 /home/blog
をやっても動いた。最後の一桁は1じゃなくて7でやったほうが良いのかも?
vagrantディレクトリとblogディレクトリのパーミッションを変更してブラウザからアクセスすると
画面にLaravelの文字が!
こちらを参考に500エラーを解消する
http://ponkotsuengine.hatenablog.com/entry/2017/02/11/165507
●SELinuxをOFF
※これやっとかないと、インストール後のブラウザアクセスで500エラーになります。apacheのエラーログに
PHP Warning: Unknown: failed to open stream: Permission denied in Unknown on line 0
PHP Fatal error: Unknown: Failed opening required '/home/laravel/project/public/index.php' (include_path='.:/usr/share/pear:/usr/share/php') in Unknown on line 0
が出ます。
・とりあえずOFF
setenforce 0
・リブート後も反映されるように設定ファイル編集しておく。
vi /etc/selinux/config
disabledに変更し保存
SELINUX=disabled
mysqlをインストール
mysqlのインストール
Laravel5系でmysqlを使用する場合はmysql5.7のほうが良い。5.6以下だとphp artisan migrateした時にuserテーブル作成時にエラーが出た。(5.6だと初期カラムの長さが足りない??短すぎる??らしい)
$ sudo yum -y install mysql-community-server
*これだけじゃダメかも?
エラーがが出てしまった。。。
$ sudo yum -y install mysql-community-server
...略...
パッケージ mysql-community-server は利用できません。
エラー: 何もしません
mysqlのリポジトリを入れる?
$ sudo yum -y install http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm
もう一度mysqlをインストールしてみる
$ sudo yum -y install mysql-community-server
こっちのほうがいいかも↓
$ sudo yum --enablerepo='mysql57-community*' install -y mysql-community-server
5.7をインストール
インストール成功
mysqlコマンドをやるとエラー
$ mysql
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
mysqlのステータスを確認してみる(mysqldじゃなくてmysql.serviceでも動くみたいだけど何が違うんだろう?)
$ sudo systemctl status mysqld
● mysqld.service - MySQL Community Server
Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
Active: inactive (dead)
mysql死んでた。ので起動させる
$ sudo systemctl start mysqld
$ sudo systemctl enable mysqld
ドライバを入れる。
$ sudo yum install --enablerepo=remi,remi-php70 php-mysqlnd
mysqlのrootのパスワードを変更しないと何もできないのでパスワード変更する
http://qiita.com/RyochanUedasan/items/9a49309019475536d22a
(パスワード変更が必須なのはmysql 5.7versionからかも)
アパッチ再起動
$ sudo systemctl restart httpd
確認
$ php -r "phpinfo();" | grep -i pdo
PDO
PDO support => enabled
PDO drivers => mysql, sqlite
pdo_mysql
PDO Driver for MySQL => enabled
pdo_mysql.default_socket => /var/lib/mysql/mysql.sock => /var/lib/mysql/mysql.sock
pdo_sqlite
PDO Driver for SQLite 3.x => enabled
pdoのdriverにmysqlが入っているのがわかる。これでphp artisan migrateとかできるようになった。
以上。