検索
ホームページバックエンド開発PHPチュートリアルパート 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.

を使用します。

Part  Deploying a PHP (Laravel) application to Amazon ECS

作成したら、リポジトリの 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 で正常にプッシュされたことを確認します。

Part  Deploying a PHP (Laravel) application to Amazon ECS

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 ボリュームを追加することもできます。これについては別のチュートリアルで説明します。

Part  Deploying a PHP (Laravel) application to Amazon ECS

今のところ、このセクションの他の部分は何も変更しないでください。一番下までスクロールし、作成 をクリックします。

ECS クラスターを作成する

次に、ECS クラスターを作成する必要があります。クラスターは、作成したばかりのタスク定義で定義されたサービスを実行する場所です。

Amazon ECS コンソール に移動し、クラスタークラスターの作成 をクリックし、クラスター名を入力して、必ず AWS を選択しますインフラストラクチャとしての Fargate (サーバーレス):

Part  Deploying a PHP (Laravel) application to Amazon ECS

クラスターの作成には数分かかります。特に新しいアカウントの場合、クラスターの作成が失敗することがあります。数分待ってから、別のクラスター名を選択して再試行してください。

ECSサービスを作成する

作成したクラスターを開き、サービス テーブルまで下にスクロールし、作成 をクリックして、次の値を入力します。

  • ファミリー: デモアプリ
  • リビジョン: 1 (このままにしておきます)
  • サービス名: デモアプリ

Part  Deploying a PHP (Laravel) application to Amazon ECS

まだ 作成 をクリックしないでください。

ロードバランサを追加する

おそらく HTTPS 経由でアプリケーションを提供しているため、ロード バランサーを追加する必要があります。これを後で行うことはできません。

ネットワーク セクションまで下にスクロールし、サービスをデプロイする VPC を選択します。 VPC に、インターネット ゲートウェイ が接続された パブリック サブネット があることを確認してください。 VPC がない場合は、[新しい VPC の作成] をクリックし、ウィザードに従って VPC を作成できます。

VPC を選択したら、読み続けてください。

ロード バランシング セクションまで下にスクロールし、Application Load Balancer を選択し、新しいロード バランサーの作成 オプションを選択します。

このオプションが利用できない場合は、前のステップで VPC を選択しなかった可能性があります。

次の値を調整します:

  • ロードバランサ名:demo-app-alb
  • ヘルスチェック猶予期間: 300 (アプリが起動して安定するように、これを 300 秒、つまり 5 分に設定することをお勧めします)

リスナー セクションで、新しいリスナーの作成 オプションを選択したままにしますが、ポート 443 と HTTPS プロトコルを使用するように値を調整します。この選択を確認するには、使用するドメインの ACM 証明書が必要です。入手方法の詳細については、AWS ドキュメントを参照してください。

Part  Deploying a PHP (Laravel) application to Amazon ECS

ターゲット グループ セクションで、次の値を調整します:

  • プロトコル: HTTP (デフォルトです。nginx コンテナはポート 80 でリッスンしているため、必ずこれを維持してください)
  • 登録解除遅延: 60 (展開を少し速くするために、デフォルトの 5 分ではなく、これを 60 秒に設定することをお勧めします)
  • ヘルスチェックパス: / (アプリ内で特別に作成した /healthcheck などのルートにこれを設定することをお勧めします。今のところはデフォルトのままで構いません)

Part  Deploying a PHP (Laravel) application to Amazon ECS

作成をクリックします。

サービスステータスを確認する

サービスが サービス テーブルに表示されるまでに数分かかる場合があります。新しいサービスがすぐに表示されない場合は、少し待ってページを更新してください。

すべてがうまくいけば、サービス テーブルにサービスがリストされ、アクティブデプロイメントとタスク が 1/1 を示していることがわかります。実行中のタスク。

デプロイメントエラーは次のように表示されます:

Part  Deploying a PHP (Laravel) application to Amazon ECS

デプロイメント エラーをデバッグするには、サービスを開いて、Deployments タブをクリックします。 イベント セクションまで下にスクロールし、最後に開始したタスクの ID をクリックします。タスク実行の ログ セクションには、何が問題だったかの詳細が表示されます。

Laravel は通常、ストレージフォルダー構造が不完全である (例: フレームワーク、キャッシュ、セッションのいずれかが欠落している) と文句を言います。この問題を解決するために EFS ボリュームをタスク定義にアタッチする方法については、別のチュートリアルで説明します。

ドメイン名をサービスに接続する

おそらく、デプロイしたばかりのサービスにドメイン名を接続したいと考えているでしょう。前のステップで、インターネット トラフィックをサービスにルーティングする役割を担う AWS コンポーネントである Application Load Balancer をすでに作成しました。

エンドユーザーとロードバランサー間のトラフィックの暗号化に使用される ACM 証明書もすでにプロビジョニングされています。

プロセスを完了し、公共のインターネットから HTTPS 経由でアプリケーションにアクセスできるようにするには、ドメイン名がロード バランサーを指す DNS レコードを作成する必要があります。このプロセスは、使用している DNS プロバイダーによって異なります。詳細については、ドキュメントを参照してください。

まず、Application Load Balancer の DNS 名を取得します。 AWS コンソールの検索バー (macOS ではオプション S) に移動し、「ロード バランサー」と入力して、ロード バランサー (EC2 機能) を選択します。ドメイン名を接続するために必要なロード バランサーのテーブルが表示されます:

Part  Deploying a PHP (Laravel) application to Amazon ECS

ロード バランサーの 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 サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
PHP多次元アレイの要素の総数を計算する方法は?PHP多次元アレイの要素の総数を計算する方法は?May 15, 2025 pm 09:00 PM

PHP多次元アレイの要素の総数を計算することは、再帰的または反復的な方法を使用して行うことができます。 1.再帰的な方法は、アレイを通過し、ネストされた配列を再帰的に処理することによりカウントされます。 2。反復法は、スタックを使用して再帰をシミュレートして深さの問題を回避します。 3. array_walk_recursive関数も実装できますが、手動でカウントする必要があります。

PHPのDo-While Loopsの特徴は何ですか?PHPのDo-While Loopsの特徴は何ですか?May 15, 2025 pm 08:57 PM

PHPでは、ループの特性は、ループ本体が少なくとも1回実行されることを確認し、条件に基づいてループを続行するかどうかを決定することです。 1)条件付きチェックの前にループ本体を実行します。これは、ユーザー入力検証やメニューシステムなど、操作を少なくとも1回実行する必要があるシナリオに適しています。 2)ただし、do-whileループの構文は、初心者間の混乱を引き起こす可能性があり、不要なパフォーマンスオーバーヘッドを追加する可能性があります。

PHPで弦をハッシュする方法は?PHPで弦をハッシュする方法は?May 15, 2025 pm 08:54 PM

PHPの効率的なハッシュ文字列は、次の方法を使用できます。1。MD5関数を使用して高速ハッシュを使用しますが、パスワードストレージには適していません。 2。SHA256関数を使用して、セキュリティを改善します。 3. password_hash関数を使用してパスワードを処理して、最高のセキュリティと利便性を提供します。

PHPに配列スライディングウィンドウを実装する方法は?PHPに配列スライディングウィンドウを実装する方法は?May 15, 2025 pm 08:51 PM

PHPに配列スライディングウィンドウを実装することは、slidewindowとslidewindowaverage関数によって実行できます。 1. SlideWindow関数を使用して、配列を固定サイズのサブアレイに分割します。 2。各ウィンドウの平均値を計算するには、SlideWindowaverage関数を使用します。 3.リアルタイムのデータストリームの場合、非同期処理と外れ値検出を使用して使用できます。

PHPで__CLONEメソッドを使用する方法は?PHPで__CLONEメソッドを使用する方法は?May 15, 2025 pm 08:48 PM

PHPの__Cloneメソッドは、オブジェクトクローン時にカスタム操作を実行するために使用されます。クローンキーワードを使用してオブジェクトをクローニングする場合、オブジェクトに__クローンメソッドがある場合、メソッドが自動的に呼び出され、クローン型属性をリセットしてクローンオブジェクトの独立性を確保するなど、クローンプロセス中にカスタマイズされた処理を許可します。

PHPでGOTOステートメントを使用する方法は?PHPでGOTOステートメントを使用する方法は?May 15, 2025 pm 08:45 PM

PHPでは、GOTOステートメントは、プログラムの特定のタグに無条件にジャンプするために使用されます。 1)複雑なネストされたループまたは条件付きステートメントの処理を簡素化することができますが、2)GOTOを使用すると、コードの理解と維持が困難になる場合があります。3)構造化された制御ステートメントの使用を優先することをお勧めします。全体として、gotoは注意して使用する必要があり、コードの読みやすさと保守性を確保するために、ベストプラクティスに従う必要があります。

PHPにデータ統計を実装する方法は?PHPにデータ統計を実装する方法は?May 15, 2025 pm 08:42 PM

PHPでは、組み込み関数、カスタム関数、およびサードパーティライブラリを使用してデータ統計を実現できます。 1)array_sum()やcount()などの組み込み関数を使用して、基本統計を実行します。 2)カスタム関数を記述して、中央値などの複雑な統計を計算します。 3)PHP-MLライブラリを使用して、高度な統計分析を実行します。これらの方法により、データ統計を効率的に実行できます。

PHPで匿名関数を使用する方法は?PHPで匿名関数を使用する方法は?May 15, 2025 pm 08:39 PM

はい、PHPの匿名関数は、名前のない関数を参照します。これらは、他の関数へのパラメーターとして、および関数の返品値として渡すことができ、コードをより柔軟で効率的にします。匿名関数を使用する場合、範囲とパフォーマンスの問題に注意を払う必要があります。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

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

ホットツール

DVWA

DVWA

Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境