docker学习(10)-利用Github Action 自动化部署
2026-04-16 13:51 xiashengwang 阅读(0) 评论(0) 收藏 举报前提条件
- GitHub账号,docker hub账号,一台服务器
- 你生成了 SSH 密钥对(私钥 id_rsa,公钥 id_rsa.pub),并将公钥添加到了服务器的 ~/.ssh/authorized_keys
第一步:测试 SSH 连接(端口 6666)
在本地 PowerShell 中执行:
ssh -i C:\Users\wangzheng\.ssh\id_rsa -p 6666 root@104.225.100.100
如果成功登录,说明密钥配置正确。输入 exit 退出。
第二步:创建 GitHub 私有仓库
登录 GitHub
点击右上角 + → New repository
Repository name:flask-ci-demo
选择 Private(私有)
不要勾选 “Initialize this repository with a README”
点击 Create repository
创建后,复制仓库地址(如 https://github.com/你的用户名/flask-ci-demo.git)。
第三步:在本地创建 Flask 项目
创建项目目录
mkdir D:\flask-ci-demo
cd D:\flask-ci-demo
创建 app.py
import os
from flask import Flaskapp = Flask(__name__)
greeting = os.environ.get('GREETING', 'Hello')@app.route('/')
def hello():return f'{greeting} from Docker and CI!'if __name__ == '__main__':app.run(host='0.0.0.0', port=5000)
创建 requirements.txt
flask==2.3.3
创建 Dockerfile
FROM python:3.9-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY app.py .
EXPOSE 5000
CMD ["python", "app.py"]
验证文件已创建:
dir
应该看到 app.py、requirements.txt、Dockerfile。
第四步:推送代码到 GitHub
git init
git add .
git commit -m "Initial commit"
git branch -M main
git remote add origin https://github.com/你的用户名/flask-ci-demo.git
git push -u origin main
(将 你的用户名 替换为你的 GitHub 用户名)
刷新 GitHub 仓库页面,应该能看到代码。
第五步:获取 Docker Hub 访问令牌
登录 Docker Hub
点击右上角头像 → Account Settings → Security
点击 New Access Token
输入描述(如 github-actions),权限选择 Read & Write
点击 Generate,复制生成的令牌(形如 dckr_pat_...)
第六步:在 GitHub 仓库中配置 Secrets
打开你的 GitHub 仓库页面 → Settings → Secrets and variables → Actions
点击 New repository secret,依次添加以下 5 个 Secrets:
| 名称 | 说明 |
|---|---|
| DOCKERHUB_USERNAME | 你的 Docker Hub 用户名 |
| DOCKERHUB_TOKEN | 上一步复制的 Access Token |
| SERVER_HOST | 104.225.100.100(只写 IP,不要端口) |
| SERVER_USER | root(或你的登录用户名) |
如何获取 SERVER_SSH_KEY 的值?
在本地 PowerShell 中执行:
Get-Content C:\Users\wangzheng\.ssh\id_rsa | Set-Clipboard
然后粘贴到 Secret 的 value 框中。确保内容包括:
-----BEGIN OPENSSH PRIVATE KEY-----
...
-----END OPENSSH PRIVATE KEY-----

第七步:创建 GitHub Actions 工作流文件
在项目目录 D:\flask-ci-demo 下创建文件夹 .github\workflows:
mkdir .github\workflows
然后创建文件 .github\workflows\deploy.yml,内容如下(注意端口已改为 6666):
name: Deploy Flask App to Serveron:push:branches: [ "main" ]workflow_dispatch:jobs:build-and-push:name: Build and Push Docker Imageruns-on: ubuntu-lateststeps:- name: Checkout codeuses: actions/checkout@v4- name: Log in to Docker Hubuses: docker/login-action@v3with:username: ${{ secrets.DOCKERHUB_USERNAME }}password: ${{ secrets.DOCKERHUB_TOKEN }}- name: Build and push Docker imageuses: docker/build-push-action@v5with:context: .push: truetags: ${{ secrets.DOCKERHUB_USERNAME }}/flask-ci-demo:latestdeploy:name: Deploy to Serverruns-on: ubuntu-latestneeds: build-and-pushsteps:- name: Deploy via SSHuses: appleboy/ssh-action@v1.0.3with:host: ${{ secrets.SERVER_HOST }}username: ${{ secrets.SERVER_USER }}key: ${{ secrets.SERVER_SSH_KEY }}port: 6666script: |docker pull ${{ secrets.DOCKERHUB_USERNAME }}/flask-ci-demo:latestdocker stop flask-app || truedocker rm flask-app || truedocker run -d --name flask-app -p 5000:5000 ${{ secrets.DOCKERHUB_USERNAME }}/flask-ci-demo:latest
保存文件。
第八步:提交并推送工作流文件
git add .github/workflows/deploy.yml
git commit -m "Add CI/CD pipeline with SSH port 6666"
git push origin main
推送后,进入 GitHub 仓库的 Actions 标签页,你会看到一个名为 Deploy Flask App to Server 的工作流正在运行。
第九步:验证部署结果
等待 Actions 执行完成(两个任务都变成绿色勾号)。

打开浏览器,访问 http://104.225.100.100(注意:服务器上需要开放 80 端口,并且容器映射了 80 端口)。
如果看到 Hello from Docker and CI!,说明部署成功。

第十步:测试自动化更新
修改本地 app.py 中的返回字符串,例如:
return f'{greeting} from Docker and CI! (auto deployed)'
然后提交推送:
git add app.py
git commit -m "Update message"
git push origin main
再次观察 Actions,会自动触发新的构建和部署。完成后刷新浏览器,内容应已更新。
