Memo

メモ > サーバ > 各論: 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
develop: hostname: 192.168.33.11 user: vagrant deploy_path: /var/www/vhosts/laravel branch: develop
deploy.php を調整する 「dep init」によって作成された内容は、Laravel用になっている 「before('deploy:symlink', 'artisan:migrate');」は、デプロイ先で .env を作るまではコメントアウトしておく(データベース接続に失敗するため)
$ vi deploy.php
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');
■デプロイ実行(デプロイ元サーバ) デプロイ先(/var/www/vhosts/laravel)のディレクトリがカラであることを確認しておく テスト用のファイルがあれば、デプロイ前に削除しておく
$ 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=vagrant DB_CONNECTION=mysql DB_HOST=localhost DB_PORT=3306 DB_DATABASE=laravel DB_USERNAME=laravel DB_PASSWORD=abcd1234
上記の設定内、「APP_ENV」が「local」だと場合によっては 「Class 'Laravel\Dusk\DuskServiceProvider' not found」 「Class 'Barryvdh\LaravelIdeHelper\IdeHelperServiceProvider' not found」 のようなエラーになるので注意 「composer require --dev laravel/dusk」でインストールするのも手だが、これは手元の開発環境にだけ入れておけば良さそう デプロイの際にComposerが実行されるので、インストールするとデプロイにとても時間がかかりそう 「productionなら無視する」ではなく「local以外なら無視する」とできるかは要検証 .env の変更を認識させるためにキャッシュをクリア
$ 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
#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
ブラウザからLaravelにアクセスできることを確認 ■デプロイ実行(デプロイ元サーバ) 無効にしていたマイグレーションを有効にする
$ 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

Advertisement