XserverにLaravelアプリケーションをデプロイして動かしたメモ わりと簡単だった
概要
基本的には、https://readouble.com/laravel/6.x/ja/installation.html に記載されているシステム要件を満たすように準備していけばいいはず。アセットのコンパイルでnpm、デプロイはgitサーバーからpullしたいので、
- php7.2以上
- composer
- node/npm
- git
が入っていれば概ね良さそう。更に、job/queue を使いたいのでキューワーカーのプロセスをデーモン化する
- supervisor
がほしい。上記環境を整えた後、Laravelアプリケーションを公開するセッティングを進める。
事前調査(超やっつけ)
-
Linuxディストリビューション
よくはわからんがyumがあったのでRedHat系っぽい。が、root権限は無いのでyumは使えなそう(当たり前か) -
PHP
コンパネから7.3に変更しても、CLIのバージョンは5.4.16となっていた。
/usr/bin/php を指してる。 -
git
入ってる(version 1.8.3.1) -
node
入ってない -
composer
入ってる(version 1.9.1) -
supervisor
入ってない。root権限が無いのでyumでインストールすることもできない。困りそう。cronは使えるので、1分間隔でcronにキューワーカのプロセスを起動させる、くらいで行けるかな?
→ググったら全く同じことをやろうとしてるのを見つけたので、なんとか大丈夫そう
前提
Laravelバージョンは6.x、XServerのプランはX10
SSH設定/エックスサーバー
→SSH接続成功してる
PHPのバージョンについて/エックスサーバー
→PHP7.3に切り替え実施済み
MySQLの設定/エックスサーバー
→Mysqlデータベース作成、接続ユーザー設定済み
無料独自SSL設定/エックスサーバー
→SSL設定済み
環境構築
CLIのPHPバージョン変更
参考URL
XSERVER(エックスサーバー)にLaravelアプリを構築する方法/2018.12.10
XSERVER の cli(ssh接続) で PHP7 を使用する
手順
デフォルトのバージョンは5.4.16のようなので、webサーバ側に合わせる(今回は7.3)
mkdir $HOME/bin
ln -s /usr/bin/php7.3 $HOME/bin/php
vi $HOME/.bash_profile
.bash_profile を修正
- PATH=$PATH:$HOME/.local/bin:$HOME/bin
+ PATH=$HOME/bin:$PATH:$HOME/.local/bin
修正したら保存して、反映
source $HOME/.bash_profile
Node.js インストール
参考URL
レンタルサーバ「XSERVER」にNode.jsをインストールする
概要
nodebrew経由で入れるのが楽っぽい
手順
nodebrew インストール
wget git.io/nodebrew
perl nodebrew setup
vi $HOME/.bash_profile
またパスを追加
- PATH=$HOME/bin:$PATH:$HOME/.local/bin
+ PATH=$HOME/bin:$HOME/.nodebrew/current/bin:$PATH:$HOME/.local/bin
修正したら保存して反映、バージョン表示されればOK
source $HOME/.bash_profile
nodebrew -v
node/npm のインストール
# stableを入れる
nodebrew install-binary stable
# 入ったバージョンを確認
nodebrew list
# 確認したバージョンをuse
nodebrew use v12.14.1
# node/npmのバージョン確認
node -v
npm -v
キューワーカー設定
キューワーカーをデーモンプロセスにしたいがsupervisorはインストールできないっぽい。crontabに一定間隔で叩かせればいけそう。
参考URL
https://chinotsubo.com/laravel-queue-on-shared-hosting/
Karnel.php にスケジュール設定
参考URLとオプションを少し変えて、1分間隔でキューワーカー起動、JOBがなければ勝手に落ちるようにしてる。アプリケーションの運用上Jobがたまり続けることもそんなになさそうなので、restartも要らないかなー、運用しながら様子みるかなー、って感じで
/**
* Define the application's command schedule.
* @param \Illuminate\Console\Scheduling\Schedule $schedule
* @return void
*/
protected function schedule(Schedule $schedule)
{
//supervisorが使えない環境用の代替運用:1分間隔でキューワーカーを起動。
$schedule->command('queue:work --tries=1 --stop-when-empty')
->everyMinute()
->withoutOverlapping();
}
crontabにLaravelのタスクスケジューラを登録
いつもの。Xserverのコンパネから設定すればOK
https://readouble.com/laravel/6.x/ja/scheduling.html
アプリケーションのセットアップ
ソースコードのデプロイ
gitリポジトリ上にLaravelプロジェクトが置いてある前提、とりあえずlaravelというディレクトリを作って放り込む
cd ~/<example.com>
git clone <repo url> laravel
cd laravel
依存パッケージのインストール
いつもの。
composer install
.envファイルの作成と編集
いつも通り。
cp .env.example .env
php artisan key:generate
vi .env
いつも通り。コンパネで作成したMysqlデータベースを指すように、設定を適宜修正。
- DB_HOST=
- DB_DATABASE=
- DB_USERNAME=
- DB_PASSWORD=
+ DB_HOST=<コンパネで確認>
+ DB_DATABASE=<コンパネで作成したDB名>
+ DB_USERNAME=<コンパネで作成、設定したユーザ>
+ DB_PASSWORD=<コンパネで設定したパスワード>
他にも必要な項目があれば適宜実施。とりあえず動かして動作確認するところまで行けば良いので、開発環境と同じような感じで設定しておくと良いでしょう。(メールはログに吐いたり、とりあえずRedisを使わない設定にしておいたり、Queueをsyncにしたり、とか)
DB接続の確認
上記編集を完了して、DBに接続できるかをチェック
php artisan tinker
tinker内で下記実行し、日時が正しく取れればDB接続OK
DB::select("select now()");
webサーバー周りの設定
ドキュメントルートをいじったりはできなそう(調べてない)ので、.htaccessを編集しリダイレクトを設定(全部 public へ)
vi ~/example.com/public_html/.htaccess
+ <IfModule mod_rewrite.c>
+ RewriteEngine On
+ RewriteRule ^(.*)$ public/$1 [QSA,L]
+ </IfModule>
※webサーバがnginxでも.htaccessを書けばいいらしい。謎
.htaccessに書いたリダイレクト先のpublic がLaravel/publicを指すようにシンボリックリンク作成
ln -s /home/<USERNAME>/<example.com>/laravel/public ./public