メモ > サーバ > 各論: Deployer > Laravelのデプロイ
Laravelのデプロイ
DeployerでLaravelをデプロイする - Qiita
https://qiita.com/shalman/items/c09eb23137a9d5269f10
Vagrantでデプロイ元とデプロイ先を作り、
デプロイ元からAnsibleでデプロイ先の設定を行い
そこにvagrantユーザからDeployerでLaravelをデプロイしたときのメモ
AWS環境ならvagrantユーザをec2-userユーザに読み替えれば、同じように作業できそう
■準備(デプロイ先サーバ)
・nginx+PHP+MySQLなど、Laravelの稼働に必要なものをインストールしておく
・デプロイ用の鍵を作成してBitbucketに登録しておく
デプロイするユーザについては要検討だが、vagrantやec2-userを使うのが無難か
今回はvagrantユーザで実行している
$ ssh-keygen -t rsa
$ vi ~/.ssh/id_rsa.pub
・デプロイ先のディレクトリを作成しておく
$ sudo su -
# mkdir /var/www/vhosts
# mkdir /var/www/vhosts/laravel
# chown nginx. /var/www/vhosts/laravel
# chmod 0775 /var/www/vhosts/laravel
# chmod g+s /var/www/vhosts/laravel
・デプロイ用ユーザをnginxグループに追加しておく
# usermod -G nginx vagrant
・以下でファイルを作成すると、作成者がvagrantでグループがnginxになる(確認が終わったらファイルは削除しておく)
グループの追加は、いったんログアウトしないと反映されないので注意(vagrantからログアウトし、再度vagrantでログインする)
$ cd /var/www/vhosts/laravel
$ vi test1.txt
$ pwd
/var/www/vhosts/laravel
$ ll
total 4
-rw-rw-r-- 1 vagrant nginx 6 Nov 29 12:22 test1.txt
■準備(デプロイ元サーバ)
・Deployerをインストール。使えるようにしておく
・Deployer用のディレクトリを作成しておく
$ cd
$ mkdir deploy_laravel
$ cd deploy_laravel
■Deployerセットアップ(デプロイ元サーバ)
$ dep init
Please select your project type [Common]:
は「1」にしてLaravelを選択
Repository []:
は「git@bitbucket.org:refirio/test.git」のようにデプロイしたいリポジトリを入力
接続設定ファイルも作成しておく。「branch」はデプロイするブランチ名
$ vi file.yml
deploy.php を調整する
「dep init」によって作成された内容は、Laravel用になっている
「before('deploy:symlink', 'artisan:migrate');」は、デプロイ先で .env を作るまではコメントアウトしておく(データベース接続に失敗するため)
develop:
hostname: 192.168.33.11
user: vagrant
deploy_path: /var/www/vhosts/laravel
branch: develop
$ vi deploy.php
■デプロイ実行(デプロイ元サーバ)
デプロイ先(/var/www/vhosts/laravel)のディレクトリがカラであることを確認しておく
テスト用のファイルがあれば、デプロイ前に削除しておく
add('shared_files', []);
add('shared_dirs', []);
add('writable_dirs', []);
↓
add('shared_files', ['.env']);
add('shared_dirs', ['storage']);
add('writable_dirs', ['bootstrap/cache', 'storage']);
host('project.com')
->stage('production')
->set('deploy_path', '/var/www/project.com');
host('beta.project.com')
->stage('beta')
->set('deploy_path', '/var/www/project.com');
↓
inventory('file.yml');
/*
host('project.com')
->stage('production')
->set('deploy_path', '/var/www/project.com');
host('beta.project.com')
->stage('beta')
->set('deploy_path', '/var/www/project.com');
*/
before('deploy:symlink', 'artisan:migrate');
↓
//before('deploy:symlink', 'artisan:migrate');
$ dep deploy develop
デプロイ先サーバにComposerが無いとエラーになるので注意
初回実行時は「deploy:update_code」の際に接続確認を求められるので応答する
「deploy:vendors」は結構時間がかかる。対象サーバにunzipがインストールされていれば速度向上にはなる(無くてもデプロイ自体はできる)
■デプロイ確認(デプロイ先サーバ)
デプロイ先サーバで、ソースコードが配置されていることを確認する
$ ll /var/www/vhosts/laravel/current/
■Laravel設定(デプロイ先サーバ)
データベースに接続ユーザとデータベースを作成する
$ mysql -u root
>CREATE USER laravel@localhost IDENTIFIED BY 'abcd1234';
>GRANT ALL PRIVILEGES ON laravel.* TO laravel@localhost;
>CREATE DATABASE laravel DEFAULT CHARACTER SET utf8mb4;
.env は作成されているが、内容はカラなので入力する
以下は .env.local を複製して調整する例
$ cp /var/www/vhosts/laravel/current/.env.local /var/www/vhosts/laravel/shared/.env
$ vi /var/www/vhosts/laravel/shared/.env
上記の設定内、「APP_ENV」が「local」だと場合によっては
「Class 'Laravel\Dusk\DuskServiceProvider' not found」
「Class 'Barryvdh\LaravelIdeHelper\IdeHelperServiceProvider' not found」
のようなエラーになるので注意
「composer require --dev laravel/dusk」でインストールするのも手だが、これは手元の開発環境にだけ入れておけば良さそう
デプロイの際にComposerが実行されるので、インストールするとデプロイにとても時間がかかりそう
「productionなら無視する」ではなく「local以外なら無視する」とできるかは要検証
.env の変更を認識させるためにキャッシュをクリア
APP_ENV=vagrant
DB_CONNECTION=mysql
DB_HOST=localhost
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=laravel
DB_PASSWORD=abcd1234
$ cd /var/www/vhosts/laravel/current/
$ php artisan config:clear
ひととおり操作できることを確認
$ cd /var/www/vhosts/laravel/current/
$ php artisan
$ php artisan migrate
$ php artisan db:seed
$ php artisan config:clear
$ php artisan view:clear
nginxの設定ファイルを調整して再起動し、デプロイ内容を公開(Ansibleで管理している場合はそちらで操作)
# vi /etc/nginx/conf.d/www.conf
ブラウザからLaravelにアクセスできることを確認
■デプロイ実行(デプロイ元サーバ)
無効にしていたマイグレーションを有効にする
#root /var/www/html;
root /var/www/vhosts/laravel/current/public;
#fastcgi_param SCRIPT_FILENAME /var/www/html$fastcgi_script_name;
fastcgi_param SCRIPT_FILENAME /var/www/vhosts/laravel/current/public$fastcgi_script_name;
# service nginx restart
$ vi deploy.php
マイグレーションも含めてデプロイをテストする
(以降はこのコマンドのみでデプロイできる)
//before('deploy:symlink', 'artisan:migrate');
↓
before('deploy:symlink', 'artisan:migrate');
$ dep deploy develop
ブラウザからLaravelにアクセスし、異常が無いことを確認する
なお、デプロイ先で以下のコマンドを実行しなくても、Deployerによってシンボルリンクは設定済みになっている
(「/storage/information/2/image1.jpg」などでアクセスできる)
$ php artisan storage:link