フルスクラッチ開発した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で書かれたデプロイライブラリです。

昔々からあるライブラリなので、今はもっと簡単にできるものがあるかもしれないですが、Docker全盛期の今でわざわざデプロイライブラリを作ろうと思う人は少ないと思うので Deployerでいいと思います。
動くソース情報だと以下。内容がわかる人向けなのでコピペではできないです。
"require": {
"appstract/laravel-opcache": "^4.0",
~~~~
"require-dev": {
"deployer/deployer": "^6.8",
<?php
namespace Deployer;
require 'recipe/laravel.php';
// Project name
set('application', '<アプリケーション名>');
// Project repository
set('repository', 'git@domain.com:username/repository.git');
// [Optional] Allocate tty for git clone. Default value is false.
set('git_tty', false);
// Shared files/dirs between deploys
add('shared_files', [
'public/.htaccess',
]);
add('shared_dirs', [
'public/articles',
]);
// Writable dirs by web server
add('writable_dirs', []);
set('bin/php', '/usr/bin/php7.4');
set('bin/composer', '/usr/bin/php7.4 /usr/bin/composer');
// Hosts
inventory('hosts.yaml');
// host('project.com')
// ->set('deploy_path', '~/{{application}}');
// Tasks
task('npm:install', function () {
run('cd {{release_path}} && npm install');
});
task('npm:build', function () {
run('cd {{release_path}} && npm run prod');
});
after('deploy:vendors', 'npm:install');
after('npm:install', 'npm:build');
// [Optional] if deploy fails automatically unlock.
after('deploy:failed', 'deploy:unlock');
// Migrate database before symlink new release.
before('deploy:symlink', 'artisan:migrate');
task('artisan:opcache:clear', function () {
run('{{bin/php}} {{release_path}}/artisan opcache:clear');
});
after('deploy:symlink', 'artisan:opcache:clear');
production:
repository: git@github.com:<リポジトリ>
user: <ログインユーザー>
hostname: <サーバーのホスト名> # デプロイ先のホスト名
port: 10022
stage: production
roles:
- app
deploy_path: /home/<デプロイ先のパス>/
branch: master
上記の設定を行う事でデプロイができます。
./vendor/bin/dep deploy production
これでソースファイルはデプロイできました。
ポイントとしては
- SSHをあらかじめ出来るようにしておく
- ./public ディレクトリを ln -s でドメインのDocumentRootにシムリンクを貼る
- gitでソース管理する
- gitからpull出来るように権限設定しておく
- laravel-opcache をあらかじめ設定しておく
- デプロイ後にOPcacheのクリアをしてくれる
かと思います。
laravel-opcacheについてはPHPアプリケーションの高速化のためにOPcacheを導入しているレンタルサーバーがほとんどかと思いますが、Deployerのようにシンボリックリンクで差し替えるタイプとは相性が悪くてキャッシュが残ってしまいます。以下参考リンク
古いソースコードで実行され続けるのでキャッシュクリアしましょう。
https://github.com/appstract/laravel-opcache
これを設定しておけばデプロイも簡単に行えますし、万が一の巻き戻しもすぐに対応できます。