在实际项目中,你是否每次发布都需要手动登录服务器执行一系列繁琐的操作?手动构建镜像、手动登录仓库、手动拉取镜像、手动启动容器…这些重复性工作不仅耗时,还容易因为人为疏忽导致部署失败。
本文将以部署Next.js应用为例,手把手教你搭建完整的CI/CD流水线:通过GitHub Actions实现代码推送后自动构建Docker镜像,一键推送到腾讯云私有仓库,并在服务器上自动完成部署。整个过程完全自动化,开发者只需专注代码开发,部署全部由流水线自动完成。
准备工作
在开始配置之前,你需要准备以下内容:
- GitHub仓库:用于托管代码和配置Actions工作流
- 腾讯云账号:需要开通容器镜像服务TCR
- 服务器:用于运行Docker容器(需安装Docker)
GitHub Actions工作流配置
创建工作流文件
在GitHub仓库的.github/workflows目录下创建build-docker.yml文件:
name: 构建和上传镜像到腾讯云私有镜像仓库
on: push: branches: [master]
jobs: build-and-push: runs-on: ubuntu-latest env: IMAGE_NAME: my-app TCR_NAMESPACE: test-hk TZ: Asia/Shanghai REGISTRY: hkccr.ccs.tencentyun.com steps: - name: Checkout code uses: actions/checkout@v4
- name: Generate Docker image tag with timestamp id: tag run: | # 验证时区设置 echo "当前时区:" date # 生成时间戳标签,格式为 2025-10-10-12-00-00(精确到秒) TIMESTAMP=$(date +'%Y-%m-%d-%H-%M-%S') echo "生成的时间戳: $TIMESTAMP" echo "TIMESTAMP=$TIMESTAMP" >> $GITHUB_ENV # 设置镜像标签,格式为 hkccr.ccs.tencentyun.com/命名空间/镜像名:时间戳 echo "IMAGE_TAG=${{ env.REGISTRY }}/${{ env.TCR_NAMESPACE }}/${{ env.IMAGE_NAME }}:$TIMESTAMP" >> $GITHUB_ENV
- name: Log in to Tencent Cloud Container Registry uses: docker/login-action@v3 with: registry: ${{ env.REGISTRY }} username: ${{ secrets.TENCENT_USERNAME }} password: ${{ secrets.TENCENT_PASSWORD }}
- name: Set up Docker Buildx uses: docker/setup-buildx-action@v3
- name: Build and push Docker image uses: docker/build-push-action@v5 with: context: . file: Dockerfile platforms: linux/amd64 push: true tags: ${{ env.IMAGE_TAG }}
deploy: runs-on: ubuntu-latest needs: build-and-push steps: - name: Execute deployment script on server uses: appleboy/ssh-action@v1 with: host: ${{ secrets.SERVER_IP }} username: ${{ secrets.SERVER_USERNAME }} password: ${{ secrets.SERVER_PASSWORD }} script: 'sh /www/docker-deploy.sh'
|
配置GitHub Secrets
在GitHub仓库的Settings → Secrets and variables → Actions中配置以下敏感信息。这些信息会以环境变量的形式注入到工作流中,确保敏感数据的安全:
| 变量名 |
说明 |
| SERVER_USERNAME |
服务器SSH登录用户名 |
| SERVER_PASSWORD |
服务器SSH登录密码 |
| SERVER_IP |
服务器公网IP地址 |
| TENCENT_USERNAME |
腾讯云账户名 |
| TENCENT_PASSWORD |
腾讯云镜像仓库的密码 |
安全建议:生产环境建议使用SSH密钥而非密码认证,并将敏感信息的访问权限限制为最小必要范围。
腾讯云私有仓库配置
创建私有镜像仓库
首先登录腾讯云容器镜像控制台,创建私有镜像仓库:
创建命名空间:点击「命名空间」→「创建」,输入命名空间名称(如test-hk)
创建镜像仓库:点击「镜像仓库」→「创建」,填写仓库名称和描述

获取镜像仓库地址
在镜像仓库详情页面可以查看仓库的访问地址:

设置镜像仓库登录密码
首次使用需要设置登录密码,用于Docker login认证:
- 进入「访问凭证」页面
- 点击「设置密码」
- 设置完成后,该密码即用于后续Docker登录认证

服务器端配置
安装腾讯云CLI
在服务器上安装腾讯云CLI工具,用于查询镜像版本:
pip3 install tccli
tccli configure
|
创建部署脚本
将一键部署脚本放到服务器目录 /www/deploy-scripts/docker-deploy.sh:
部署应用
当GitHub Action构建成功后,会自动推送镜像到私有仓库:

然后我们在服务器端拉取镜像并启动容器即可完成部署:
tccli tcr DescribeImagePersonal --cli-unfold-argument --region ap-guangzhou --RepoName tcb-8121221-mope/my-app --Offset 0 --Limit 2
|
docker login hkccr.ccs.tencentyun.com --username=12312 --password="123132123"
docker pull hkccr.ccs.tencentyun.com/tcb-test-mope/my-app:202510281002
docker ps docker rm xx -f
docker stop xx
docker run -d -p 3000:3000 --name my-app-202510281002 hkccr.ccs.tencentyun.com/tcb-100008440496-mope/my-app:202510281002
|
完整部署流程总结
整个自动化部署流程如下:
代码推送:开发人员将代码推送到GitHub master分支
自动触发:GitHub Actions检测到push事件,自动开始执行工作流
构建镜像:基于Dockerfile构建Docker镜像,使用时间戳作为版本标签
推送仓库:登录腾讯云私有仓库,将构建好的镜像推送到仓库
自动部署:通过SSH连接到服务器,执行部署脚本拉取最新镜像并启动容器
验证服务:确认服务正常运行,部署完成
整个过程完全自动化,无需人工干预,大大提高了部署效率和可靠性。