チュートリアル シリーズの最初の部分では、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 サイトの他の関連記事を参照してください。

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

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

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

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

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

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

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

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


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

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

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

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

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

ZendStudio 13.5.1 Mac
強力な PHP 統合開発環境
