Laravelアプリのデプロイ
このステップバイステップガイドで、RailwayにLaravelアプリをデプロイする方法を学びます。クイックセットアップ、プライベートネットワーキング、データベース統合、ワンクリックデプロイ、その他のデプロイ戦略について説明します。
著者: AIイノベーションズ 阿部隼也(X / Twitter)Laravelアプリのデプロイ
Laravelは、コードのシンプルさとエレガンスを重視するウェブ職人のために設計されたPHPフレームワークです。クリーンで表現力豊かな構文が特徴で、現代のウェブアプリケーションで一般的な多くのタスクを処理するための組み込みツールを提供し、開発をよりスムーズで楽しいものにします。
このガイドでは、3つの方法でRailwayにLaravelアプリをデプロイする方法について説明します。
テンプレートからのワンクリックデプロイ
このテンプレートは、基本的なLaravelアプリケーションとPostgresデータベースをRailwayにセットアップします。また、コミュニティによって作成されたさまざまなLaravelアプリテンプレートから選択することもできます。
デプロイ後はテンプレートから Eject して、GitHub アカウントにリポジトリのコピーを作成することを強くおすすめします。
GitHubリポジトリからデプロイ
GitHub上のLaravelアプリをRailwayにデプロイするには、以下の手順に従ってください。
- 新しいプロジェクトを作成します。
- Deploy from GitHub repo をクリックします。
- GitHubリポジトリを選択します。
- Railwayは、有効なGitHubアカウントがリンクされている必要があります。Railwayアカウントが関連付けられていない場合は、リンクするように求められます。
- Add Variables をクリックします。
- アプリのすべての環境変数を追加します。
- Deploy をクリックします。
デプロイが成功すると、Railwayサービスが作成されます。デフォルトでは、このサービスは公開されません。
注: Railwayはデプロイ中にLaravelアプリであることを自動的に検出し、php-fpmとnginxを介してアプリを実行します。
サービスの公開URLを設定するには、新しいサービスの「設定」タブのNetworkingセクションに移動し、「Generate Domain」をクリックします。
注: LaravelアプリをPostgres(またはMySQL)データベース、cronジョブ、およびワーカーとともに実行する方法については、データベース、マイグレーション、Cron、ワーカーのセットアップセクションに進んでください。
CLIからデプロイ
Laravelアプリがローカルにある場合は、次の手順に従います。
- Railway CLIをインストールして認証します。
- Laravelアプリのルートディレクトリ内で
railway init
を実行して、Railwayに新しいプロジェクトを作成します。- プロンプトの手順に従ってプロジェクトに名前を付けます。
railway up
を実行してデプロイします。- CLIはLaravelアプリのファイルをスキャン、圧縮し、Railwayのバックエンドにアップロードしてデプロイします。
- ターミナルには、アプリがRailwayでデプロイされている間のリアルタイムログが表示されます。
- デプロイが成功したら、ダッシュボードの最近のデプロイで View logs をクリックします。
- サーバーが実行されていることがわかります。ただし、環境変数を追加するように求めるログも表示されます。
- Railwayダッシュボードでサービスの Variables セクションをクリックします。
- Raw Editor をクリックし、アプリのすべての環境変数を追加します。
- Deploy をクリックしてアプリを再デプロイします。
サービスの公開URLを設定するには、新しいサービスの「設定」タブのNetworkingセクションに移動し、「Generate Domain」をクリックします。
注: 次のステップでは、Laravelアプリをデータベース、マイグレーション、cronジョブ、ワーカーとともに実行する方法を示します。
データベース、マイグレーション、Cron、ワーカーのセットアップ
このセットアップでは、LaravelアプリをRailwayにデプロイし、データベース、スケジュールされたタスク(cron)、およびキュワーカがすべて完全に機能することを確認します。
デプロイ構造は「雄大なモノリス」アーキテクチャに従い、Laravelアプリ全体が単一のコードベースとして管理されますが、Railwayでは4つの別々のサービスに分割されます。
- アプリサービス:HTTPリクエストとユーザーインタラクションを処理します。
- Cronサービス:スケジュールされたタスク(メール送信やレポート実行など)を管理します。
- ワーカーサービス:キューからバックグラウンドジョブを処理します。
- データベースサービス:アプリケーションのデータを保存および取得します。
私の雄大なモノリスLaravelアプリ
開始するには、次の手順に従ってください。
- Laravelアプリのルートディレクトリに、
build-app.sh
、run-worker.sh
、run-cron.sh
の4つのBashスクリプトを作成します。 これらのスクリプトには、Laravelアプリのアプリ、ワーカー、およびcronサービスをRailwayにデプロイして実行するために必要なコマンドが含まれます。build-app.sh
ファイルに以下の内容を追加します。 注: アプリサービスがビルドされるたびに実行したい追加のコマンドをスクリプトに追加できます。#!/bin/bash # このファイルに実行権限があることを確認してください。`chmod +x build-app.sh` を実行します。 # いずれかのコマンドが失敗した場合はスクリプトを終了します。 set -e # NPMを使用してアセットをビルド npm run build # キャッシュをクリア php artisan optimize:clear # Laravelアプリケーションのさまざまなコンポーネントをキャッシュ php artisan config:cache php artisan event:cache php artisan route:cache php artisan view:cache
run-worker.sh
ファイルに以下の内容を追加します。#!/bin/bash # このファイルに実行権限があることを確認してください。`chmod +x run-worker.sh` を実行します。 # このコマンドはキューワーカーを実行します。 # 代替案は、php artisan queue:listenコマンドを使用することです。 php artisan queue:work
run-cron.sh
ファイルに以下の内容を追加します。#!/bin/bash # このファイルに実行権限があることを確認してください。`chmod +x run-cron.sh` を実行します。 # このコードブロックは、Laravelスケジューラを1分ごとに実行します。 while [ true ] do echo "Running the scheduler..." php artisan schedule:run --verbose --no-interaction & sleep 60 done
- プロジェクトキャンバスにPostgresデータベースサービスを作成します。
- Deploy をクリックします。
- プロジェクトキャンバスに新しいサービスを作成します。
- サービスに App service という名前を付け、Settings をクリックして構成します。
- Source セクションでGitHubリポジトリを Source Repo に接続します。
- Build セクションの Custom Build Command に
chmod +x ./build-app.sh && sh ./build-app.sh
を追加します。 - Deploy セクションの Pre-Deploy Command に
php artisan migrate
を追加します。 - サービスの上部に戻り、Variables をクリックします。
- Laravelアプリに必要なすべての環境変数、特に以下にリストされているものを追加します。
APP_KEY
:php artisan key:generate
コマンドから取得した値を設定します。DB_CONNECTION
:値をpgsql
に設定します。QUEUE_CONNECTION
:値をdatabase
に設定します。DB_URL
:値を${{Postgres.DATABASE_URL}}
に設定します(これは新しいPostgresデータベースのURLを参照します)。サービス変数の参照について詳しく学びます。
- Deploy をクリックします。
- プロジェクトキャンバスに新しいサービスを作成します。
- サービスに cron service という名前を付け、Settings をクリックします。
- Source セクションでGitHubリポジトリを Source Repo に接続します。
- Deploy セクションの Custom Start Command に
chmod +x ./run-cron.sh && sh ./run-cron.sh
を追加します。 - サービスの上部に戻り、Variables をクリックします。
- ステップ3で既に強調表示されているすべての必要な環境変数を追加します。
- Deploy をクリックします。
- プロジェクトキャンバスに再度新しいサービスを作成します。
- サービスに worker service という名前を付け、Settings をクリックします。
- Source セクションでGitHubリポジトリを Source Repo に接続します。
- Deploy セクションの Custom Start Command に
chmod +x ./run-worker.sh && sh ./run-worker.sh
を追加します。 - サービスの上部に戻り、Variables をクリックします。
- ステップ3で既に強調表示されているすべての必要な環境変数を追加します。
- Deploy をクリックします。
この時点で、3つのサービスすべてがデプロイされ、Postgresデータベースサービスに接続されているはずです。
- Cron Service:このサービスは、スケジュールされたタスクを管理するためにLaravelスケジューラを実行する必要があります。
- Worker Service:このサービスは実行中であり、キューからジョブを処理する準備ができている必要があります。
- App Service:このサービスは実行中であり、ユーザーがアプリケーションにアクセスできるように公開ドメインを持つ必要がある唯一のサービスです。
アプリサービス
注: このデプロイアプローチを示すコミュニティテンプレートが利用可能です。このテンプレートを簡単にデプロイし、アプリケーション用に独自のGitHubリポジトリに接続できます。
ロギング
Laravelは、デフォルトでディスク上のディレクトリにログを書き込みます。ただし、Railwayの一時的なファイルシステムでは、この設定ではログは永続化されません。
ログとエラーがRailwayのコンソールまたは railway logs
で表示されるようにするには、LOG_CHANNEL
環境変数を errorlog
に更新します。RailwayダッシュボードまたはCLIを介して次のように設定できます。
railway variables --set "LOG_CHANNEL=errorlog"
Laravel Sailでデプロイできますか?
DockerでLaravelアプリケーションをデプロイするための標準的なアプローチであるLaravel Sailの使用を考えているかもしれません。その核となるSailは、環境を管理するために docker-compose.yml
ファイルに依存しています。
ただし、Railwayは現在Docker Composeをサポートしていないことに注意することが重要です。
次のステップ
Railwayでのエクスペリエンスを最大限に活用する方法については、次のリソースを参照してください。
PR