この記事には広告を含む場合があります。記事内で紹介する商品を購入することで、当サイトに売り上げの一部が還元されることがあります。
ローカルPCで開発したLaravelのWebアプリ。
それをレンタルサーバにアップロードして全世界にあなたのアプリを公開(デプロイ)してみましょう。
この記事ではレンタルサーバにmixhostを使っているので、mixhostでLaravelアプリを公開したい人向けになっています。
他のレンタルサーバでも適宜読み替えていただければLaravelアプリの公開までの流れが参考になるはずです。
前提
- Laravelのバージョン8、または9
- ソースコードはgithub
- レンタルサーバはmixhost
- ドメインは取得済み
このような前提条件のもと、Webアプリをレンタルサーバで動かすところまでを紹介していきます。
初回アップロード時の手順
mixhostのPHPのバージョンを8に変更
mixhostのPHPの標準バージョンはPHP7です。
Laravel9はPHP8以上をサポートしています(Laravel8はPHP7でもよいが)。
mixhostのPHPのバージョン変更というヘルプページの手順を参考にPHPを8に設定します。
mixhostの設定画面ではPHP8は「ea-php80」と記載されているのでそれを選びます。
Laravelのバージョン毎の対象PHPバージョンはこちらを確認ください。
データベースの作成
開発したLaravelアプリがデータベースを使う場合に実施する手順です。
mixhostのCパネルのMySQL® データベース ウィザードからDB作成をしておきましょう。
データベースを作成する際は、照合順序に注意します。
たとえば、Stripeのライブラリを使う場合は照合順序を「utf8mb4_bin」にしないといけません。
Stripeのライブラリを使っていない場合や照合順序に依存しない実装であれば、そのままでも大丈夫です。
mixhostでターミナル操作する
今後はmixhostのCパネルの「ターミナル」で操作をしていきます。
SSHを使える方はそれで代用しても構いません。
対象ドメインまで移動してgitクローンを実行する
ターミナル上でLaravelアプリを公開するドメインまで移動して、gitコマンドでgit管理しているソースコードをmixhost上にクローン(ダウンロード)します。
cd public_html/ドメイン名/
git clone https://github.com/{ユーザ名}/{リポジトリ名.git}
gitクローンのコマンドを打つとgitアカウント名と公開KEY(アクセストークン)の入力を求められるのでターミナルに入力します。
gitのアクセストークンはGitHubの公式ヘルプの個人アクセストークンを使用するを確認してください。
envファイルの作成
gitにpushしたLaravelのプロジェクトでは.gitignoreファイル関係上.envはプロジェクト上に存在しない。
そのため、cpコマンドでenv.exampleから複製して本番環境に適した値に編集しましょう。
cd クローンしたリポジトリ名のフォルダ
cp .env.example .env
composerの実行
composer でいろいろインストールをする
ea-php80 /opt/cpanel/composer/bin/composer install
APPのKEYを生成する
APPのKEYを生成してenvに追記するコマンドを実行。
コマンドを再実施してKEYを変更してはいけない。Hashとか復号できなくなる。
ea-php80 artisan key:generate
マイグレーション作成してテーブル作成
データベースを利用するLaravelアプリの場合は、テーブルをマイグレーションで作成します。
php artisan migrate
もしも、本番環境で初期データ用のシードを実行するなら
php artisan db:seed
作成済みの表を削除してマイグレーションを再実行する。そしてシードを実行する場合は以下のコマンド。
php artisan migrate:fresh --seed
.htaccessを編集してリライト設定する
初期状態のままだと、Webアプリにアクセスするためには
「https://ドメイン名/gitクローンしたリポジトリ名/public」となってしまいます。
これをドメイン名でアクセス可能とするためにリライトの設定をします。リダイレクト設定ではありません。
#laravelのpublicへ「リライト」させる。リライトであればリダイレクトと違ってブラウザのURLは変更されない。
#QSAオプションでGETパラメータを消さない
RewriteRule ^(.*)$ gitクローンしたリポジトリ名/public/$1 [QSA,L]
シンボリックリンクの生成
開発したLaravelのWebアプリが画像ファイルなどをWeb公開用のストレージを使っている場合は
storage/app/publicへのシンボリックリンクを作成する必要があります。
プログラムでassetヘルパを使って公開ディスクからファイルを取得している場合は必須です。
php artisan storage:link
Cronジョブを追加する
開発したLaravelのWebアプリがCronで定期実行する機能があるならば、mixhostのサーバにCronジョブを追加します。
mixhostにCronジョブを追加するにはCパネルから追加できます。
LaravelでCron実行のジョブを作った場合は基本的にはコマンドとして作成しているはずです。
そしてそのコマンド群をスケジュール登録してあるはずなのでLaravelのスケジューラを実行するCronを1つだけ定義するだけで済みます。つまりLaravelのスケジューラを使用する場合、mixhostのサーバで1分ごとにschedule:runコマンドを実行する単一のcron設定エントリを追加するだけで済みます。作成したコマンドごとにCronをMixhostに定義する必要はありません。
CパネルのCronジョブ画面からLaravelの「schedule:runコマンド」を1分ごとに実行するCronを定義しましょう。
ではその時のmixhostでのコマンドの指定方法です。cdコマンドでLaravelアプリのカレントディレクトリまで移動後、php artisanコマンドでスケジュールを起動します。
cd /home/mixhostのユーザ名/public_html/ドメイン名/リポジトリ名 && php artisan schedule:run >> /dev/null 2>&1
初回以降にgit管理のソース変更を取り込む手順
ここからは、初回の手順が完了した後の話です。
たとえば、Git管理のソースに修正を加えたので本番環境(mixhost)のWebアプリにその変更を反映する場合です。
リポジトリフォルダまで移動
mixhostのCパネルの「ターミナル」を起動します。
そして「.git」があるフォルダまで移動(composer.jsonがあるフォルダ)
cd public_html/ドメイン名/gitリポジトリ名
gitコマンドでpullして最新ソースを取得する
git pull origin main
DB変更があればマイグレーション
もしソース修正時にDB変更もしていればマイグレーションでテーブル変更をします。
php artisan migrate
まとめ
この手順で私は基本的なLaravelアプリならばmixhostで公開(デプロイ)できました。
もしStripeを使ったLaravelアプリの場合はWebhookの設定が追加で必要になります
それは別記事で記載することにしますね。