Laravel 8项目基于Laravel Sail部署AWS的服务选型及实施求助
Laravel 8(Docker/Sail)部署到AWS的服务选型与实操步骤
一、推荐服务选型
- ECS Fargate:托管式容器编排服务,无需维护底层服务器,和你本地Docker/Sail的容器化思路完全匹配,只需定义镜像与资源配置,AWS负责调度运行
- Amazon RDS MySQL:托管型MySQL数据库,比本地容器运行的数据库更稳定,自带自动备份、故障转移、性能监控,无需自行维护实例
- Application Load Balancer(ALB):负责将外部流量转发到ECS上的Laravel容器,支持HTTPS配置、流量分发,还可配合ECS实现自动扩缩容
- Amazon ECR:AWS官方容器镜像仓库,用于存储构建好的Laravel Docker镜像,方便ECS拉取部署
二、具体部署步骤
1. 构建并推送Docker镜像到ECR
因为本地已用Sail跑通项目,已有现成Dockerfile,直接基于此构建生产镜像:
- 在AWS控制台创建ECR仓库(例如命名
laravel-app) - 本地执行ECR登录命令(替换为你的AWS区域和账号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 laravel-app . docker tag laravel-app:latest 123456789012.dkr.ecr.us-east-1.amazonaws.com/laravel-app:latest - 推送到ECR:
docker push 123456789012.dkr.ecr.us-east-1.amazonaws.com/laravel-app:latest
2. 创建RDS MySQL实例
- 在AWS控制台创建RDS MySQL实例,选择适合的规格(比如
t3.micro用于测试),设置数据库名称、用户名和密码 - 配置安全组,允许ECS所在VPC访问RDS的3306端口
- 记录RDS的端点地址、用户名、密码,后续用于配置Laravel数据库连接
3. 配置ECS任务定义与服务
- 创建ECS集群(选择Fargate类型)
- 创建任务定义:
- 启动类型选
Fargate,分配合适的CPU和内存(比如0.5vCPU/1GB内存) - 添加容器:镜像地址填ECR中的镜像地址,端口映射设置为
80:80(对应Laravel容器的80端口) - 环境变量:不要硬编码
.env内容,用AWS Secrets Manager或Parameter Store存储数据库连接信息、APP_KEY等,在任务定义中引用这些密钥
- 启动类型选
- 创建ECS服务:
- 选择刚才的任务定义,设置服务所需任务数量(比如1个)
- 关联ALB:选择新建或已有的ALB,配置目标组,将流量转发到容器的80端口
4. 配置ALB与HTTPS
- 在ALB上配置两个监听:80端口(HTTP)和443端口(HTTPS)
- 用AWS Certificate Manager(ACM)申请免费SSL证书,绑定到443端口的监听
- 设置HTTP到HTTPS的强制跳转规则
- 配置安全组允许外部访问ALB的80/443端口
5. 调整Laravel生产配置
- 构建Docker镜像时,加入生产环境优化命令:
RUN php artisan config:cache && php artisan route:cache && php artisan view:cache - 确保容器内存储目录(比如
storage、bootstrap/cache)有正确读写权限,可在Dockerfile中添加:RUN chown -R www-data:www-data /var/www/html/storage /var/www/html/bootstrap/cache
6. 测试访问
- 将你的域名解析到ALB的DNS地址
- 访问域名,确认Laravel项目正常加载,数据库连接正常(可通过页面或接口测试数据库查询)
内容的提问来源于stack exchange,提问作者James Baker
相关产品推荐
相关产品推荐

