1. 为什么选择从ElasticBeanstalk迁移到ECS三年前我第一次用ElasticBeanstalk部署Laravel应用时觉得这种一键部署的服务简直是开发者的福音。但随着业务量增长到日均10万PV后EB的局限性开始显现固定的EC2实例规格导致资源浪费严重凌晨流量低谷时CPU利用率不到5%却还要支付全额费用每次部署都要重建整个环境导致停机时间难以控制。迁移到ECS后我们实现了动态资源调配Fargate模式根据实际负载自动伸缩容器化带来的部署效率提升镜像构建时间从EB的15分钟缩短到3分钟成本降低40%实测数据重要提示迁移前务必做好完整的架构评估。如果当前EB环境运行稳定且业务规模较小迁移的性价比可能不高。2. 迁移前的关键准备工作2.1 基础设施规划清单在控制台点击创建集群前建议先用Excel做好这些规划资源类型规格示例注意事项ECS Cluster生产环境集群建议与测试环境集群物理隔离ALB应用型负载均衡器必须开启HTTPS并配置ACLTask Definition4vCPU/8GB内存根据laravel-queue需求单独配置Service最小健康数70%防止部署时服务中断2.2 必须备份的EB配置很多开发者会忽略EB环境中的隐藏配置通过eb config save命令导出当前环境所有配置特别检查.ebextensions/目录下的自定义脚本记录RDS连接字符串和ElastiCache终端节点我在第一次迁移时就因为漏掉了cronjob配置导致订单处理延迟了6小时才发现问题。3. Docker化过程中的技术细节3.1 生产级Dockerfile优化这是经过5次迭代后的稳定版本# 使用官方多阶段构建镜像 FROM php:8.1-fpm as builder # 安装依赖时使用no-cache避免安全风险 RUN apt-get update apt-get install -y \ libzip-dev \ unzip \ docker-php-ext-install zip pdo_mysql opcache \ rm -rf /var/lib/apt/lists/* # 单独安装composer避免污染最终镜像 COPY --fromcomposer:2 /usr/bin/composer /usr/bin/composer WORKDIR /var/www COPY . . RUN composer install --no-dev --optimize-autoloader # 最终生产镜像 FROM php:8.1-fpm COPY --frombuilder /var/www /var/www RUN chown -R www-data:www-data /var/www/storage关键优化点多阶段构建减少镜像体积从1.2GB降到460MB明确指定用户权限避免部署失败使用--no-dev标志排除开发依赖3.2 docker-compose.prod.yml配置version: 3.8 services: app: build: . ports: - 9000:9000 environment: - APP_ENVproduction - APP_KEYbase64:... volumes: - ./storage:/var/www/storage nginx: image: nginx:alpine ports: - 80:80 volumes: - ./docker/nginx.conf:/etc/nginx/conf.d/default.conf - ./public:/var/www/public4. 解决CSRF Token错误的实战方案4.1 问题根源分析在EB环境中Nginx和PHP-FPM在同一实例运行会话保持很简单。但ECS中可能出现负载均衡器未转发适当头信息容器IP动态变化导致session失效跨服务通信时的域名验证问题4.2 分步解决方案修改ALB配置aws elbv2 modify-listener --listener-arn arn:aws:... \ --default-actions Typeforward,TargetGroupArnarn:aws:...调整Nginx配置location / { proxy_pass http://app:9000; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_set_header X-Forwarded-Proto $scheme; proxy_redirect off; }Laravel环境变量配置SESSION_DRIVERredis SESSION_SECURE_COOKIEtrue SESSION_DOMAIN.yourdomain.com中间件特殊处理app/Http/Middleware/VerifyCsrfToken.phpprotected $except [ /webhook/*, // 需要排除的URL ];5. 迁移后的监控与调优5.1 必须配置的CloudWatch指标指标名称报警阈值响应措施CPUUtilization70%持续5分钟自动扩展任务数量MemoryUtilization80%持续3分钟检查内存泄漏HTTPCode_Target_5XX_Count10次/分钟立即回滚到上一个稳定版本5.2 性能优化实测数据优化前后对比相同业务负载下指标EB环境ECS优化后提升幅度平均响应时间420ms210ms50%最大并发数8002200175%部署时间15min2min87%这个优化主要来自OPcache配置优化静态资源CDN加速数据库连接池设置迁移过程中最耗时的其实是各种小细节的调试。建议准备一个checklist每完成一项就打勾确认。我们团队在第三次迁移时才养成这个习惯结果出错率直接下降了80%。现在每次部署前我们都会用k6做压力测试确保新版本至少能承受当前流量2倍的负载。
阅读完成 · 觉得有帮助?