前説
Laravel Homesteadあるいは、Laradockを使用して手間をかからないでLaravelの環境構築が出来そうですが、今回はベーシックなOS、Webサーバーから一つずつを入れる方法を選びます。まだ手出したことがないLaravel HomesteadとLaradockではつまづくことがありそうですので…
環境
Vagrant 2.2.4
CentOS7
Apache 2.4
Composer 1.8.5
PHP 7.3.3
Laravel 5.8
参照
下記2つの記事を参照して構築しました。
つまずいた点を詳しく書きます。
VagrantでCentOS7+Apache2.4+PHP7.3+Laravel5.7環境構築
https://qiita.com/okdyy75/items/d3492e4ea7136d3b6ffc
CentOS7でLaravel5.4の環境構築
https://qiita.com/minechan1234/items/7e0cbe04bf5f3f405938
VagrantでCentOSサーバー構築
SELinuxを無効
sudo setenforce 0
SELinuxは有効だとセキュリティ関連で下記のエラー画面が出ます。
Vagrant初期設定
# vagrant 初期化(Vagrantfileの作成)
vagrant init centos/7
# vagrant 起動
vagrant up
# vagrant ログイン
vagrant ssh
~
config.vm.box = "centos/7"
~
config.vm.network "private_network", ip: "192.168.33.10"
~
config.vm.synced_folder "./html", "/var/www/html",
owner: "root", group: "root",
mount_options: ['dmode=777','fmode=777']
config.vm.synced_folderはホストとゲストの同期の設定ですが、ここについてownerと、mount_optionsでは所有者と、権限を指定しています。ここで指定しないとCentOSサーバー内で所有者と、権限を変えても効きません。
CentOSサーバー環境設定
Apacheインストール
# apacheインストール
sudo yum install -y httpd
# Apache起動
service httpd start
PHPインストール
yumにRemiリポジトリを追加
・Remi
https://rpms.remirepo.net/enterprise/7/
sudo yum install -y http://rpms.remirepo.net/enterprise/remi-release-7.rpm
PHP本体 + PHP関連のモジュールをインストール
sudo yum install -y --enablerepo=remi,remi-php73 php php-zip php-devel php-mbstring php-pdo php-xml php-bcmath php-gd.x86_64
ここでphp-gd.x86_64を一緒にインストールしないと写真投稿の機能を実装した時GD Libraryが入っていないよーとおこられます!
一緒にインストールすると無事に成功
Composerインストール
#composer.pharと取得
curl -sS https://getcomposer.org/installer | php
#パスが通っているディレクトリに持っていく
mv composer.phar /usr/local/bin/composer
#確認
composer
Laravelインストール
cd /var/www/html
composer create-project --prefer-dist laravel/laravel blog
「パーミッションを変更」
cd blog
chmod -R 777 storage
chmod -R 777 bootstrap/cache
「DocumentRootの変更」
httpd.confファイルについて下記のように変更
「DocumentRoot "/var/www/html"」を
「DocumentRoot "/var/www/html/blog/public"」に変えます。
「Apacheを再起動」
systemctl restart httpd
補足
filesystemを使って画像をアップしたあと、vagrantを再起動させたら下記のエラー出ました。
/public/storageは同期できない原因であるみたいでstorageを消すと無事に同期出来ました。