レンタルサーバーにLaravelをデプロイするDeployerの使い方

フルスクラッチ開発したLaravelアプリケーションをデプロイする方法です。

モダンなアプリケーションだとDockerで固めて差し替えれば良いんですが、ことレンタルサーバーではDockerは動かないですし、HerokuのようにGitリポジトリにPushすれば設定ファイルの通りに自動でデプロイしてくれる機能もありません。

レンタルサーバーにフルスクラッチ開発したアプリケーション(今回はLaravelを前提にしていますが、他のアプリケーションでも可)をデプロイするのは3パターンあるかなと思います

  • ftpでアップロード
  • SSHログインしてgitのpull
  • Deployer などのデプロイ専用ライブラリを使用

ftpでアップロードする方法はデザイナーさんなどプログラマー以外でも反映できるのですが、フルスクラッチ開発だと変更が必要なファイルが多岐に渡り「どれをアップロードしないといけないんだっけ?」「変更していたファイルが巻き戻っているんだけど」の問題が出てくるのでお勧めしません。

SSHログインしてgitのpull、こちらはお手軽で良いと思います。今時レンタルサーバーでもgitコマンドはどこにもあるでしょうし、前述のftpでプログラマー以外が変更した場合でも変更箇所がすぐに解ります。ですがフルスクラッチ開発だと反映時のキャッシュクリアなど必要な処理を毎回実行する必要があります。

Deployer などのデプロイ専用ライブラリを使用、gitのpullよりも一歩進んだ方法かと思います。反映時に必要な処理がソースコードで管理できますし、デプロイ方法がアプリケーション内でバージョン管理もしやすいので、今回の記事はこの方法をお勧めします。

レンタルサーバーにDeployerでデプロイ

そもそもDeployerとはPHPで書かれたデプロイライブラリです。

https://deployer.org

昔々からあるライブラリなので、今はもっと簡単にできるものがあるかもしれないですが、Docker全盛期の今でわざわざデプロイライブラリを作ろうと思う人は少ないと思うので Deployerでいいと思います。

インストール方法はDeployerのドキュメント通りに設定します。

composer require --dev deployer/deployer
vendor/bin/dep init

設定方法を聞かれるので、設定ファイルがPHP、Laravelレシピを選択して他は空エンターで問題ないです。

Deployerのデプロイ方法だとキャッシュクリアが必要になるため別途ライブラリも追加します。

https://github.com/appstract/laravel-opcache

laravel-opcacheについてはPHPアプリケーションの高速化のためにOPcacheを導入しているレンタルサーバーが対象になります。Deployerのようにシンボリックリンクで差し替えるタイプとは相性が悪いのでキャッシュを削除する必要があります。以下参考リンク

古いソースコードで実行され続けるのでキャッシュクリアするためにライブラリを導入します。

composer require appstract/laravel-opcache

今回導入されたバージョンはこちら

    "require": {
        "appstract/laravel-opcache": "^4.0",
~~~~
    "require-dev": {
        "deployer/deployer": "^7.3",

設定ファイルである deploy.php を設定変更していきます。

<?php
namespace Deployer;

require 'recipe/laravel.php';

// Config

set('repository', '<リポジトリのパス>');

add('shared_files', [
    'public/.htaccess',
]);
add('shared_dirs', []);
add('writable_dirs', []);

set('bin/php', '/usr/bin/php7.4');
set('bin/composer', '/usr/bin/php7.4 /usr/bin/composer');

// Hosts
host('<サーバーホスト名>')
    ->set('hostname', '<サーバーホスト名>')
    ->set('remote_user', '<ユーザー名>')
    ->set('identity_file', '~/.ssh/<SSH秘密鍵>')
    ->set('deploy_path', '/home/<デプロイパス>')
    ->set('port', 10022);

after('deploy:failed', 'deploy:unlock');

task('artisan:opcache:status', function () {
    $code = run('{{bin/php}} {{release_or_current_path}}/artisan opcache:status');
    info($code);
});

task('artisan:opcache:clear', function () {
    $code = run('{{bin/php}} {{release_or_current_path}}/artisan opcache:clear');
    info($code);
});
after('deploy:cleanup', 'artisan:opcache:clear');

細かい部分は調整してください。今回はphp7.4で稼働するアプリケーション設定になります。

以下のコマンド実行でデプロイができます。

./vendor/bin/dep deploy

最初のデプロイではopcacheのclearで失敗するので、コメントアウトしてソースだけ先に反映させましょう。

これでソースファイルはデプロイできました。

あとは公開ディレクトリにデプロイしたLaravelのpublicフォルダをシムリンクすれば完了です。

ssh <レンタルサーバーのホスト>
rm -rf <公開したいドメインのパス> # エックスサーバーの場合は 〇〇.com/public_html
ln -s <デプロイパス>/current/public <公開したいドメインのパス>

ポイントとしては

  • あらかじめレンタルサーバーにSSH接続が出来るようにしておく
  • ./public ディレクトリを ln -s で公開したいドメインのDocumentRootにシムリンクを貼る
  • gitでソース管理する
  • gitからpull出来るように権限設定しておく
    • githubであればSSH鍵の登録などを行います
  • laravel-opcache をあらかじめ設定しておく
    • デプロイ後にOPcacheのクリアをしてくれる

かと思います。

これを設定しておけばデプロイも簡単に行えますし、万が一の巻き戻しもすぐに対応できます。

投稿者


Comments

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA