You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于GitHub+AWS ECR实现Docker Compose应用自动部署?

自动化部署方案(GitHub -> ECR -> ECS Compose 重新部署)

一、前置准备

  • 确认AWS账号下已创建对应4个容器的ECR仓库,重点确保Web App的ECR仓库配置正常
  • 本地已验证ecs-cli service up命令可成功部署整个应用,docker-compose.yml的容器互联、镜像地址配置无误
  • 准备好拥有ECR镜像推送权限和ECS服务部署权限的AWS IAM用户凭证

二、具体实现步骤

1. 配置GitHub Actions触发规则

在GitHub仓库根目录创建.github/workflows/deploy.yml文件,设置仅当Web App代码变更时触发流程:

name: Auto Deploy to ECS
on:
  push:
    branches: [ main ] # 监听主分支提交
    paths:
      - 'web-app/**' # 限定仅Web App目录代码变更时触发

2. 存储AWS凭证到GitHub Secrets

进入GitHub仓库的Settings -> Secrets and variables -> Actions,添加以下3个Secrets:

  • AWS_ACCESS_KEY_ID:具备权限的IAM用户访问密钥ID
  • AWS_SECRET_ACCESS_KEY:对应IAM用户的私有访问密钥
  • AWS_REGION:ECR和ECS集群所在的AWS区域(如us-east-1)

3. 构建并推送Web App镜像到ECR

在Workflow中添加镜像构建推送步骤,用提交哈希作为镜像标签保证唯一性:

jobs:
  build-deploy:
    runs-on: ubuntu-latest
    steps:
      - name: 拉取代码
        uses: actions/checkout@v4

      - name: 配置AWS凭证
        uses: aws-actions/configure-aws-credentials@v4
        with:
          aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
          aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          aws-region: ${{ secrets.AWS_REGION }}

      - name: 登录ECR
        id: login-ecr
        uses: aws-actions/amazon-ecr-login@v2

      - name: 构建并推送Web App镜像
        env:
          ECR_REGISTRY: ${{ steps.login-ecr.outputs.registry }}
          ECR_REPO: your-web-app-repo # 替换为你的Web App ECR仓库名
          IMAGE_TAG: ${{ github.sha }}
        run: |
          docker build -t $ECR_REGISTRY/$ECR_REPO:$IMAGE_TAG ./web-app
          docker push $ECR_REGISTRY/$ECR_REPO:$IMAGE_TAG

4. 更新docker-compose.yml的镜像标签

动态替换docker-compose.yml中Web App的镜像标签,确保ECS拉取最新镜像:

- name: 更新docker-compose镜像标签
        run: |
          # 替换为你的Web App在ECR的完整镜像前缀(不含标签)
          sed -i 's|123456789012.dkr.ecr.us-east-1.amazonaws.com/web-app:.*|123456789012.dkr.ecr.us-east-1.amazonaws.com/web-app:${{ github.sha }}|' docker-compose.yml

5. 用ecs-cli重新部署到ECS

安装ecs-cli并执行部署命令:

- name: 安装ECS CLI
        run: |
          sudo curl -Lo /usr/local/bin/ecs-cli https://amazon-ecs-cli.s3.amazonaws.com/ecs-cli-linux-amd64-latest
          sudo chmod +x /usr/local/bin/ecs-cli

      - name: 部署到ECS集群
        run: |
          ecs-cli service up --cluster your-ecs-cluster --compose-file docker-compose.yml --service-name your-ecs-service --region ${{ secrets.AWS_REGION }}
          # 替换为你的ECS集群名和服务名

三、关键注意事项

  • 镜像标签唯一性:使用GitHub提交哈希作为标签,避免镜像覆盖导致的缓存问题
  • 权限最小化:IAM用户仅授予ecr:GetAuthorizationToken、ecr:BatchCheckLayerAvailability、ecr:BatchGetImage、ecr:InitiateLayerUpload、ecr:UploadLayerPart、ecr:CompleteLayerUpload、ecr:PutImage(ECR推送权限)和ecs:UpdateService、ecs:DescribeServices(ECS部署权限),不要用管理员权限
  • 部署验证:可在Workflow中添加步骤检查ECS服务运行状态,确保部署成功
  • 扩展支持:若后续其他容器需要自动构建,只需添加对应路径监听和镜像构建推送步骤即可

内容的提问来源于stack exchange,提问作者Garvit Gulati

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 06:21:58