GCP上に仮想インスタンスを立ち上げてLaravelの環境を作成してデプロイするまで

f1-microなら無料。
1年間なら300ドル分のクレジットもある。





表題




GCP上に仮想マシンを立ち上げる



コンソールへログイン。
https://console.cloud.google.com


メニュー
→ Compute Engine
→ VM インスタンス

作成

リージョンは日本だと無料にならないらしい。

マシンタイプをf1-micro
ブートディスクをCentOs 7に変更する(何でもいいが手順が微妙に異なる)

ファイアウォールの HTTP トラフィックを許可する にチェックを入れる。

GCP VM


作成

インスタンスが作成されるまで数分程度かかる。




仮想マシンへSSH接続



キーペアを作る
https://qiita.com/rog-works/items/74402f09b5aecc73f823#ssh%E6%8E%A5%E7%B6%9A

ブラウザからSSH接続

今回はブラウザからSSH接続して操作する。
SSHをクリック。

GCP VM SSH



プロジェクトをアップロード



すでにLaravel Projectが存在することを想定している。
SSHウィンドウの右上の歯車→ファイルアップロード

GCP SSH Upload

ホームディレクトリにアップロードされる(結構遅い)
事前にstorage/framework 以下は削除しておくこと。
プロジェクトは圧縮する(node_modules以下は削除推奨)

新規プロジェクトの場合はホームディレクトリで
composer create-project "laravel/laravel=5.8.*" code --prefer-dist
phpのインストールに加えてcomposerとgitの追加インストールが必要。
https://qiita.com/inakadegaebal/items/d370bcb1627fce2b5cd1

以下新規プロジェクトを作成する手順
f1-micro だとメモリが足りない。

cd ~
sudo yum -y install git

php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php composer-setup.php
rm composer-setup.php
sudo mv composer.phar /usr/local/bin/composer

cd /var/www/
composer create-project "laravel/laravel=5.8.*" [project] --prefer-dist


アップロードに少し時間がかかるのでもう一度SSHをクリックして別ウィンドウで作業をおこなう。


NGINXインストール



以下のコマンドを順に


sudo tee /etc/yum.repos.d/nginx.repo << 'EOS' [nginx] name=nginx repo baseurl=http://nginx.org/packages/mainline/centos/7/$basearch/ gpgcheck=0 enabled=1 EOS


sudo yum install nginx

全部y(es).
失敗したらリトライしてみる。

バージョンの確認
nginx -v


起動
sudo systemctl start nginx


VMインスタンスの外部IPをクリックして見慣れた画面が出てきたらNGINXインストール完了。
クリックできない場合HTTPを許可していない。vmクリック → 編集から設定できる。

Welcom to NGINX




NGINXでPHPが動作するか確認する



簡単な表示ができるか確認する。

NGINXの設定ファイルを変更する


以下を参考に
https://readouble.com/laravel/5.8/ja/deployment.html

sudo cp /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf.bak

/etc/nginx/conf.d/*.conf は全て読み込まれる('.conf.bakは読み込まれない)
/etc/nginx/nginx.confに記述がある。

sudo vi /etc/nginx/conf.d/default.conf

以下を書き換え
以降[project]は任意のディレクトリに置き換える。

location / {
root /usr/share/nginx/html;
index index.html index.htm;
}

location / {
root /var/www/[project]/public;
index index.php index.html index.htm;
}



#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}

location ~ \.php$ {
root /var/www/[project]/public;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/[project]/public$fastcgi_script_name;
include fastcgi_params;
}

viエディタについて


i 挿入モードに変更
Ctrl + [ 挿入モードを終了
Shift + ZZ 保存してviエディタ終了
q! 保存せずにviエディタ終了

rootはプロジェクトを配置するディレクトリを指定する。
今回は/var/www/[project]/publicに配置する。
ユーザディレクトリ以下はうまくいかなかった(やりたいならリンクを貼るなどの工夫が必要)
アクセスログ、エラーページの設定などもこのファイルでおこなう。


nginx再起動


sudo service nginx restart

php-fpm起動


sudo service php-fpm start


PHPの動作を確認する


プロジェクトをアップロード(作成)済みのこと。

sudo mkdir /var/www/[project]
sudo mkdir /var/www/[project]/public
cd /var/www/[project]/public
sudo tee /var/www/webedi/public/index.php << 'EOS' <?php phpinfo(); EOS


外部IPにアクセスして確認できればOK.




Laravelのプロジェクトが動作するように設定する



プロジェクトのアップロードが完了していること。
centosだとunzipが入っていない(gzipはある)ので必要に応じてインストール。
sudo yum install unzip

cd ~
unzip [project].zip


解凍したプロジェクトを移動する。リンクを貼るやり方もあると思うがうまくいかなかった。

sudo rm -rf /var/www/[project]
sudo mv ~/[project] /var/www/[project]
sudo chown -R nginx:nginx /var/www/[project]




MySQLインストール



sudo rpm -ivh http://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm

インストール

sudo yum install mysql-community-server

すべてy(es)
たまに失敗する。

確認
mysqld --version

起動
sudo systemctl start mysqld.service

パスワード確認
sudo cat /var/log/mysqld.log | grep password
2019-08-27T06:39:52.963218Z 1 [Note] A temporary password is generated for root@localhost: XXXXXXf8qdD;

id/pass
root@localhost/XXXXXXf8qdD;


mysqlのパスワードを変更


初回パスワードログイン。

mysql -u root -p
XXXXXXf8qdD;

ログイン後操作するためにはパスワードを変更しないといけない。

set password for root@localhost=password('Laravel5.7_deploy_test_p@ssword');

パスワードは大文字、数字、記号含む必要あり。

データベースを作成する必要がある。
Create database [dbname];
exit;




.envの設定を変更する。



開発環境と同じなら不要(推奨されない)

sudo vi /var/www/[project].env

DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret

を書き換える。

DB_DATABASE=[dbname]
DB_USERNAME=root
DB_PASSWORD=Laravel5.7_deploy_test_p@ssword

マイグレーションをおこなう。
cd /var/www/[project]
php artisan migrate

Laravelのマイグレーション機能を使用していない場合は自前でテーブルを作成する。
必要に応じてデータ投入。



SELinux 無効化



無効化しないと動作しない。

sudo setenforce 0




エラー対応



権限周りでどうしてもエラーになる。

sudo chmod 777 /var/www/[project]/storage/logs
sudo chmod 777 /var/www/[project]/storage/framework/views/



自動起動設定



sudo chkconfig nginx on
sudo chkconfig php-fpm on
sudo systemctl enable mysqld.service


各種設定やデプロイの自動化などやらないといけないことがまだまだある。
特にセキュリティ周りが激甘すぎるのでこのままでは使用に耐えない。



参考



NGINXインストール
https://qiita.com/tomy0610/items/0884c77f1ac52957fa96

GCP
https://qiita.com/ndxbn/items/7ef0a96e409a5b5837bd


その他情報
https://qiita.com/nobu666/items/891705a4d34c91232ec1

https://qiita.com/mofmofneko/items/bf003d14670644dd6197

https://qiita.com/yumatsud/items/7093fc9b389070ddecd1

https://readouble.com/laravel/5.8/ja/deployment.html


2019年9月3日火曜日