パート PHP (Laravel) アプリケーションを Amazon ECS にデプロイする
チュートリアル シリーズの最初の部分では、PHP (Laravel) アプリケーションを Amazon ECS にデプロイする手順を説明します。まず、Docker イメージを作成し、それを Amazon ECR にプッシュし、ECS タスク定義、ECS クラスター、ECS サービスを作成し、ドメイン名をサービスに接続します。
Docker と ECR の使用
Dockerfileとnginx構成を作成する
git リポジトリのルートに、次の内容の Dockerfile を作成します。
# Use the official PHP-FPM image as the base FROM public.ecr.aws/docker/library/php:fpm # Define a user variable ARG user=www-data # Install system dependencies and PHP extensions RUN apt-get update && apt-get install -y \ git curl \ libpng-dev \ libonig-dev \ libxml2-dev \ zip unzip libzip-dev \ nginx \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* \ && docker-php-ext-install \ pdo_mysql \ mbstring \ exif \ pcntl \ bcmath \ gd \ zip # Install Composer COPY --from=public.ecr.aws/composer/composer:latest-bin /usr/bin/composer /usr/bin/composer # Create a system user for running Composer and Artisan commands RUN mkdir -p /home/$user/.composer && \ chown -R $user:$user /home/$user # Copy Nginx configuration and entrypoint script COPY ./docker/default.conf /etc/nginx/sites-enabled/default COPY ./docker/entrypoint.sh /etc/entrypoint.sh # Make the entrypoint script executable RUN chmod +x /etc/entrypoint.sh # Set the working directory WORKDIR /var/www # Copy the application code COPY --chown=www-data:www-data . /var/www # Install PHP dependencies RUN composer install # Expose port 80 EXPOSE 80 # Define the entrypoint ENTRYPOINT ["/etc/entrypoint.sh"]
docker という名前の新しいフォルダーを作成し、その中に次の 2 つのファイルを配置します。
- ドッカー/エントリーポイント.sh
#!/usr/bin/env bash # Start Nginx service service nginx start # Run Laravel migrations php artisan migrate --force # Create symbolic link for storage php artisan storage:link # Clear and optimize the application cache php artisan optimize:clear php artisan optimize # Start PHP-FPM php-fpm
- docker/default.conf
server { listen 80 default_server; index index.php index.html; server_name localhost; error_log /var/log/nginx/error.log; access_log /var/log/nginx/access.log; root /var/www/public; location ~ \.php$ { fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_hide_header X-Powered-By; # Tells PHP we're using a reverse proxy with TLS termination fastcgi_param HTTPS on; fastcgi_param HTTP_X_FORWARDED_PROTO $scheme; fastcgi_param HTTP_X_FORWARDED_SSL on; add_header Content-Security-Policy "upgrade-insecure-requests" always; } location / { try_files $uri $uri/ /index.php?$query_string; } }
そして、chmod x docker/entrypoint.sh を実行して、entrypoint.sh を実行可能にします。
イメージを Amazon ECR にプッシュする
最初のステップは、イメージを ECR にプッシュすることです。アプリケーションを ECS にデプロイする前に、まずこの手順を手動で実行する必要があります。
ECRリポジトリを作成する
ECR リポジトリを作成するには、Amazon ECR コンソール に移動し、リポジトリの作成 をクリックし、リポジトリ名を入力します。この例では、demo-app.
を使用します。作成したら、リポジトリの URI をコピーします。この URI は後で必要になります。
イメージを ECR にプッシュします
作成したばかりのリポジトリを選択し、プッシュ コマンドの表示 をクリックして、ターミナルでコマンドを実行します。コマンドは次のようになります (必ず正しいリージョンを選択し、正しいアカウント ID を使用してください):
aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin 123456789012.dkr.ecr.us-east-1.amazonaws.com docker build -t demo-app . docker tag demo-app:latest 123456789012.dkr.ecr.us-east-1.amazonaws.com/demo-app:latest docker push 123456789012.dkr.ecr.us-east-1.amazonaws.com/demo-app:latest
コマンドが正常に実行されたら、Amazon ECR コンソール に戻り、リポジトリに入り、イメージがタグlatest で正常にプッシュされたことを確認します。
Amazon ECS の使用
ECS タスク定義の作成
次のステップは、ECR にプッシュしたばかりの Docker イメージを使用して ECS タスク定義を作成することです。
まず、Amazon ECS コンソール に移動し、タスク定義 で、新しいタスク定義の作成 をクリックします。
タスク定義に一意の名前を選択し (デモアプリを使用します)、起動タイプとして Fargate が選択されていることを確認します。現時点では、このセクションの他の内容は何も変更しないでください。
Container - 1 セクションまで下にスクロールし、次の値を入力します。
- 名前: デモアプリ
- 画像: 123456789012.dkr.ecr.us-east-1.amazonaws.com/demo-app:latest (前にコピーした独自の ECR URI に置き換えます)
後で、アプリケーションに応じてメモリと CPU の設定を調整することになるでしょう。必要に応じて、ここで環境変数と EFS ボリュームを追加することもできます。これについては別のチュートリアルで説明します。
今のところ、このセクションの他の部分は何も変更しないでください。一番下までスクロールし、作成 をクリックします。
ECS クラスターを作成する
次に、ECS クラスターを作成する必要があります。クラスターは、作成したばかりのタスク定義で定義されたサービスを実行する場所です。
Amazon ECS コンソール に移動し、クラスター で クラスターの作成 をクリックし、クラスター名を入力して、必ず AWS を選択しますインフラストラクチャとしての Fargate (サーバーレス):
クラスターの作成には数分かかります。特に新しいアカウントの場合、クラスターの作成が失敗することがあります。数分待ってから、別のクラスター名を選択して再試行してください。
ECSサービスを作成する
作成したクラスターを開き、サービス テーブルまで下にスクロールし、作成 をクリックして、次の値を入力します。
- ファミリー: デモアプリ
- リビジョン: 1 (このままにしておきます)
- サービス名: デモアプリ
まだ 作成 をクリックしないでください。
ロードバランサを追加する
おそらく HTTPS 経由でアプリケーションを提供しているため、ロード バランサーを追加する必要があります。これを後で行うことはできません。
ネットワーク セクションまで下にスクロールし、サービスをデプロイする VPC を選択します。 VPC に、インターネット ゲートウェイ が接続された パブリック サブネット があることを確認してください。 VPC がない場合は、[新しい VPC の作成] をクリックし、ウィザードに従って VPC を作成できます。
VPC を選択したら、読み続けてください。
ロード バランシング セクションまで下にスクロールし、Application Load Balancer を選択し、新しいロード バランサーの作成 オプションを選択します。
このオプションが利用できない場合は、前のステップで VPC を選択しなかった可能性があります。
次の値を調整します:
- ロードバランサ名:demo-app-alb
- ヘルスチェック猶予期間: 300 (アプリが起動して安定するように、これを 300 秒、つまり 5 分に設定することをお勧めします)
リスナー セクションで、新しいリスナーの作成 オプションを選択したままにしますが、ポート 443 と HTTPS プロトコルを使用するように値を調整します。この選択を確認するには、使用するドメインの ACM 証明書が必要です。入手方法の詳細については、AWS ドキュメントを参照してください。
ターゲット グループ セクションで、次の値を調整します:
- プロトコル: HTTP (デフォルトです。nginx コンテナはポート 80 でリッスンしているため、必ずこれを維持してください)
- 登録解除遅延: 60 (展開を少し速くするために、デフォルトの 5 分ではなく、これを 60 秒に設定することをお勧めします)
- ヘルスチェックパス: / (アプリ内で特別に作成した /healthcheck などのルートにこれを設定することをお勧めします。今のところはデフォルトのままで構いません)
作成をクリックします。
サービスステータスを確認する
サービスが サービス テーブルに表示されるまでに数分かかる場合があります。新しいサービスがすぐに表示されない場合は、少し待ってページを更新してください。
すべてがうまくいけば、サービス テーブルにサービスがリストされ、アクティブ と デプロイメントとタスク が 1/1 を示していることがわかります。実行中のタスク。
デプロイメントエラーは次のように表示されます:
デプロイメント エラーをデバッグするには、サービスを開いて、Deployments タブをクリックします。 イベント セクションまで下にスクロールし、最後に開始したタスクの ID をクリックします。タスク実行の ログ セクションには、何が問題だったかの詳細が表示されます。
Laravel は通常、ストレージフォルダー構造が不完全である (例: フレームワーク、キャッシュ、セッションのいずれかが欠落している) と文句を言います。この問題を解決するために EFS ボリュームをタスク定義にアタッチする方法については、別のチュートリアルで説明します。
ドメイン名をサービスに接続する
おそらく、デプロイしたばかりのサービスにドメイン名を接続したいと考えているでしょう。前のステップで、インターネット トラフィックをサービスにルーティングする役割を担う AWS コンポーネントである Application Load Balancer をすでに作成しました。
エンドユーザーとロードバランサー間のトラフィックの暗号化に使用される ACM 証明書もすでにプロビジョニングされています。
プロセスを完了し、公共のインターネットから HTTPS 経由でアプリケーションにアクセスできるようにするには、ドメイン名がロード バランサーを指す DNS レコードを作成する必要があります。このプロセスは、使用している DNS プロバイダーによって異なります。詳細については、ドキュメントを参照してください。
まず、Application Load Balancer の DNS 名を取得します。 AWS コンソールの検索バー (macOS ではオプション S) に移動し、「ロード バランサー」と入力して、ロード バランサー (EC2 機能) を選択します。ドメイン名を接続するために必要なロード バランサーのテーブルが表示されます:
ロード バランサーの DNS 名をコピーします。
Route 53 を使用している場合は、次の手順に従ってください:
- Route 53 コンソール に移動し、ホスト ゾーン をクリックして、ドメイン名を選択します。
- レコードの作成 ボタンをクリックします。
- レコード タイプを A に設定します。
- エイリアス オプションをチェックします。
- トラフィックのルーティング先フィールドで、アプリケーションおよびクラシック ロード バランサーへのエイリアスを選択し、ロード バランサーのリージョンを選択します。
- ロード バランサーの選択 ドロップダウンから、ドメイン名を接続する必要があるロード バランサーを選択します。複数のロード バランサーがある場合は、ドロップダウンから選択したロード バランサーが、前にコピーしたロード バランサーの DNS 名と一致する必要があることを確認してください。
- ターゲットの健康状態の評価をオフにします。
- レコードの作成をクリックします。
Route 53 を使用していない場合:
詳細については、DNS プロバイダーのドキュメントを参照してください。おそらく、ターゲット/値としてロード バランサーの DNS 名を持つ CNAME レコードを作成する必要があります。
おめでとう
DNS レコードを作成したら、それが伝播されるまで数分待ってから、ドメイン名を介してアプリケーションにアクセスしてみます。
おめでとうございます! これで、PHP (Laravel) アプリケーションが AWS ECS に正常にデプロイされました。
このチュートリアル シリーズで近日公開予定
- Laravel のストレージフォルダー構造の問題を修正するために EFS ボリュームをタスク定義にアタッチする
- AWS CodePipeline を使用して新しいコードをサービスに自動的にデプロイする
- AWS CDK を使用したインフラストラクチャのプロビジョニングの自動化
以上がパート PHP (Laravel) アプリケーションを Amazon ECS にデプロイするの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

セッションハイジャックは、次の手順で達成できます。1。セッションIDを取得します。2。セッションIDを使用します。3。セッションをアクティブに保ちます。 PHPでのセッションハイジャックを防ぐための方法には次のものが含まれます。1。セッション_regenerate_id()関数を使用して、セッションIDを再生します。2。データベースを介してストアセッションデータを3。

php8.1の列挙関数は、指定された定数を定義することにより、コードの明確さとタイプの安全性を高めます。 1)列挙は、整数、文字列、またはオブジェクトであり、コードの読みやすさとタイプの安全性を向上させることができます。 2)列挙はクラスに基づいており、トラバーサルや反射などのオブジェクト指向の機能をサポートします。 3)列挙を比較と割り当てに使用して、タイプの安全性を確保できます。 4)列挙は、複雑なロジックを実装するためのメソッドの追加をサポートします。 5)厳密なタイプのチェックとエラー処理は、一般的なエラーを回避できます。 6)列挙は魔法の価値を低下させ、保守性を向上させますが、パフォーマンスの最適化に注意してください。

PHP開発における固体原理の適用には、次のものが含まれます。1。単一責任原則(SRP):各クラスは1つの機能のみを担当します。 2。オープンおよびクローズ原理(OCP):変更は、変更ではなく拡張によって達成されます。 3。Lischの代替原則(LSP):サブクラスは、プログラムの精度に影響を与えることなく、基本クラスを置き換えることができます。 4。インターフェイス分離原理(ISP):依存関係や未使用の方法を避けるために、細粒インターフェイスを使用します。 5。依存関係の反転原理(DIP):高レベルのモジュールと低レベルのモジュールは抽象化に依存し、依存関係噴射を通じて実装されます。

phpstormでCLIモードをデバッグする方法は? PHPStormで開発するときは、PHPをコマンドラインインターフェイス(CLI)モードでデバッグする必要がある場合があります。

PHP開発でPHPのCurlライブラリを使用してJSONデータを送信すると、外部APIと対話する必要があることがよくあります。一般的な方法の1つは、Curlライブラリを使用して投稿を送信することです。

静的結合(静的::) PHPで後期静的結合(LSB)を実装し、クラスを定義するのではなく、静的コンテキストで呼び出しクラスを参照できるようにします。 1)解析プロセスは実行時に実行されます。2)継承関係のコールクラスを検索します。3)パフォーマンスオーバーヘッドをもたらす可能性があります。
