搜索
首页后端开发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 的文件夹,并将以下两个文件放入其中。

  • docker/entrypoint.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 存储库

通过前往 Amazon ECR 控制台,单击 创建存储库,然后输入存储库名称来创建 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 控制台,在 任务定义 下,单击 创建新任务定义

为任务定义选择一个唯一的名称(我们将使用 demo-app),并确保选择 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服务

打开刚刚创建的集群,向下滚动到 Services 表,单击 创建,然后输入以下值:

  • 家庭:演示应用程序
  • 修订:1(保持原样)
  • 服务名称:demo-app

Part  Deploying a PHP (Laravel) application to Amazon ECS

暂时不要点击创建

添加负载均衡器

由于我们可能通过 HTTPS 为应用程序提供服务,因此我们需要添加一个负载均衡器。您以后不能再这样做。

向下滚动到网络部分,然后选择要将服务部署到的 VPC。确保 VPC 具有 公共子网,并附加有 Internet 网关。如果您没有 VPC,您可以通过单击创建新 VPC 并按照向导操作来创建一个 VPC。

选择 VPC 后,请继续阅读。

向下滚动到负载均衡部分,选择应用程序负载均衡器,然后选择选项创建新的负载均衡器

如果此选项不可用,则您可能在上一步中没有选择 VPC。

调整以下值:

  • 负载均衡器名称:demo-app-alb
  • 健康检查宽限期:300(我建议将其设置为 300 秒,即 5 分钟,以便您的应用程序启动并稳定)

Listener 部分下,保持选中 创建新监听器 选项,但调整值以使用端口 443 和 HTTPS 协议。要确认此选择,您需要您要使用的域的 ACM 证书;有关如何获取的更多信息,请参阅 AWS 文档。

Part  Deploying a PHP (Laravel) application to Amazon ECS

目标组部分下,调整以下值:

  • 协议:HTTP(这是默认值,请确保保留它,因为我们的 nginx 容器正在侦听端口 80)
  • 注销延迟:60(我建议将其设置为 60 秒,而不是默认的 5 分钟,以使部署更快一点)
  • 健康检查路径:/(我建议将其设置为您在应用程序中专门创建的路由,例如/healthcheck;您现在可以将其保留为默认值)

Part  Deploying a PHP (Laravel) application to Amazon ECS

点击创建

检查服务状态

服务可能需要几分钟时间才会显示在服务 表中。如果您没有立即看到新服务,请稍等一下,然后刷新页面。

如果一切顺利,您应该会看到 服务 表中列出的服务,其状态为 活动部署和任务 显示 1/1正在运行任务。

部署错误显示如下:

Part  Deploying a PHP (Laravel) application to Amazon ECS

要调试部署错误,请打开服务,然后单击部署选项卡;向下滚动到 Events 部分,然后单击最近启动的任务的 ID。任务执行的日志部分将向您显示有关出错原因的更多详细信息。

Laravel 通常会抱怨存储文件夹结构不完整(例如,缺少框架、缓存、会话之一)。我们将在单独的教程中了解如何将 EFS 卷附加到任务定义来解决此问题。

将域名连接到服务

您可能想要将域名连接到我们刚刚部署的服务。在前面的步骤中,我们已经创建了一个应用程序负载均衡器,它是负责将互联网流量路由到服务的 AWS 组件。

我们还已经配置了 ACM 证书,用于加密最终用户和负载均衡器之间的流量。

要完成该过程并使您的应用程序能够通过 HTTPS 从公共互联网访问,您需要创建一条 DNS 记录,将您的域名指向负载均衡器。此过程会有所不同,具体取决于您使用的 DNS 提供商;请参阅他们的文档以获取更多信息。

首先获取应用程序负载均衡器的 DNS 名称。导航到 AWS 控制台中的搜索栏(macOS 上的选项 S),输入负载均衡器,然后选择 负载均衡器(EC2 功能)。您将看到一个表格,其中包含我们需要将域名连接到的负载均衡器:

Part  Deploying a PHP (Laravel) application to Amazon ECS

复制负载均衡器的 DNS 名称。

如果您使用 53 号公路,请按照以下说明操作:

  • 导航到 Route 53 控制台,单击 托管区域,然后选择您的域名。
  • 点击创建记录按钮。
  • 将记录类型设置为A.
  • 选中别名选项。
  • 将流量路由到字段中,选择应用程序和经典负载均衡器的别名,然后选择负载均衡器的区域。
  • 选择负载均衡器下拉列表中,选择我们需要将域名连接到的负载均衡器。如果您有多个负载均衡器,请检查从下拉列表中选择的负载均衡器必须与我们之前复制的负载均衡器的 DNS 名称相匹配。
  • 关闭评估目标健康状况
  • 点击创建记录

如果您不使用 53 号公路:

请参阅您的 DNS 提供商的文档以了解更多信息。您可能需要创建一条 CNAME 记录,将负载均衡器的 DNS 名称作为其目标/值。

恭喜你

创建 DNS 记录后,等待几分钟让它传播,然后尝试通过域名访问您的应用程序。

恭喜!您现已成功将 PHP (Laravel) 应用程序部署到 AWS ECS。

本教程系列即将推出

  • 将 EFS 卷附加到任务定义以修复 Laravel 的存储文件夹结构问题
  • 使用 AWS CodePipeline 自动将新代码部署到服务
  • 使用 AWS CDK 自动化基础设施配置

以上是将 PHP (Laravel) 应用程序部署到 Amazon ECS 部分的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
11个最佳PHP URL缩短脚本(免费和高级)11个最佳PHP URL缩短脚本(免费和高级)Mar 03, 2025 am 10:49 AM

长URL(通常用关键字和跟踪参数都混乱)可以阻止访问者。 URL缩短脚本提供了解决方案,创建了简洁的链接,非常适合社交媒体和其他平台。 这些脚本对于单个网站很有价值

在Laravel中使用Flash会话数据在Laravel中使用Flash会话数据Mar 12, 2025 pm 05:08 PM

Laravel使用其直观的闪存方法简化了处理临时会话数据。这非常适合在您的应用程序中显示简短的消息,警报或通知。 默认情况下,数据仅针对后续请求: $请求 -

构建具有Laravel后端的React应用程序:第2部分,React构建具有Laravel后端的React应用程序:第2部分,ReactMar 04, 2025 am 09:33 AM

这是有关用Laravel后端构建React应用程序的系列的第二个也是最后一部分。在该系列的第一部分中,我们使用Laravel为基本的产品上市应用程序创建了一个RESTFUL API。在本教程中,我们将成为开发人员

简化的HTTP响应在Laravel测试中模拟了简化的HTTP响应在Laravel测试中模拟了Mar 12, 2025 pm 05:09 PM

Laravel 提供简洁的 HTTP 响应模拟语法,简化了 HTTP 交互测试。这种方法显着减少了代码冗余,同时使您的测试模拟更直观。 基本实现提供了多种响应类型快捷方式: use Illuminate\Support\Facades\Http; Http::fake([ 'google.com' => 'Hello World', 'github.com' => ['foo' => 'bar'], 'forge.laravel.com' =>

php中的卷曲:如何在REST API中使用PHP卷曲扩展php中的卷曲:如何在REST API中使用PHP卷曲扩展Mar 14, 2025 am 11:42 AM

PHP客户端URL(curl)扩展是开发人员的强大工具,可以与远程服务器和REST API无缝交互。通过利用Libcurl(备受尊敬的多协议文件传输库),PHP curl促进了有效的执行

在Codecanyon上的12个最佳PHP聊天脚本在Codecanyon上的12个最佳PHP聊天脚本Mar 13, 2025 pm 12:08 PM

您是否想为客户最紧迫的问题提供实时的即时解决方案? 实时聊天使您可以与客户进行实时对话,并立即解决他们的问题。它允许您为您的自定义提供更快的服务

宣布 2025 年 PHP 形势调查宣布 2025 年 PHP 形势调查Mar 03, 2025 pm 04:20 PM

2025年的PHP景观调查调查了当前的PHP发展趋势。 它探讨了框架用法,部署方法和挑战,旨在为开发人员和企业提供见解。 该调查预计现代PHP Versio的增长

Laravel中的通知Laravel中的通知Mar 04, 2025 am 09:22 AM

在本文中,我们将在Laravel Web框架中探索通知系统。 Laravel中的通知系统使您可以通过不同渠道向用户发送通知。今天,我们将讨论您如何发送通知OV

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前By尊渡假赌尊渡假赌尊渡假赌
仓库:如何复兴队友
1 个月前By尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
4 周前By尊渡假赌尊渡假赌尊渡假赌

热工具

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )专业的PHP集成开发工具

安全考试浏览器

安全考试浏览器

Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

SublimeText3 英文版

SublimeText3 英文版

推荐:为Win版本,支持代码提示!

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)