📝 项目概览:一个"可运行的"待办事项API
-
应用名称 :
todo-api -
核心功能 :一个简单的RESTful API,用于管理待办事项,并提供一个
/health健康检查端点。 -
技术栈:Python + Flask(轻量级,便于快速开发)。
-
目标:从零开始,构建一个可以通过Docker运行、并能自动构建和部署到云端的完整项目。
整体的运转过程如图:

📁 第一步:项目结构与应用代码
首先,为你的项目创建一个清晰的目录结构:
text
todo-api/
├── app.py # 应用主入口
├── requirements.txt # Python依赖
├── Dockerfile # 容器构建文件
├── .github/
│ └── workflows/
│ └── ci-cd.yml # GitHub Actions 流水线定义
└── README.md # 项目说明文档
1. 编写应用代码 (app.py)
这是一个使用Flask框架的简单API,包含了我们需要的两个核心功能:
python
from flask import Flask, jsonify, request
app = Flask(__name__)
# 一个简单的内存数据库,用于存储待办事项
todos = [
{"id": 1, "task": "学习DevOps"},
{"id": 2, "task": "完成实习项目"}
]
@app.route('/')
def hello():
return "Hello, DevOps!"
# 1. 业务功能:获取所有待办事项
@app.route('/todos', methods=['GET'])
def get_todos():
return jsonify(todos)
# 2. 健康检查端点,对容器编排和监控至关重要
@app.route('/health')
def health_check():
return jsonify({"status": "healthy"}), 200
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
2. 定义依赖 (requirements.txt)
txt
Flask==2.3.2
🐳 第二步:容器化------编写 Dockerfile
Dockerfile 是让你的应用在任何地方都能一致运行的关键。
dockerfile
# 使用轻量级的Python官方镜像作为基础
FROM python:3.9-slim
# 设置工作目录
WORKDIR /app
# 复制依赖文件并安装
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
# 复制应用代码
COPY . .
# 声明容器运行时监听的端口
EXPOSE 5000
# 定义容器启动时运行的命令
CMD ["python", "app.py"]
验证 :在项目根目录下,运行
docker build -t todo-api .和docker run -p 5000:5000 todo-api,然后在浏览器访问http://localhost:5000/health,确认能看到{"status":"healthy"}的返回。
📝 项目概览:一个"可运行的"待办事项API

⚙️ 第三步:CI/CD------配置 GitHub Actions 流水线
接下来,我们将配置 GitHub Actions,让它在我们每次推送代码时,自动完成应用的构建、并推送镜像到仓库。
-
在GitHub上创建仓库,并将本地代码推送上去。
-
配置仓库密钥 (Secrets):
- 进入仓库的
Settings->Secrets and variables->Actions。
- 进入仓库的
Settings:

Secrets and variables

Actions:

-
-
点击
New repository secret,添加以下密钥:-
DOCKER_USERNAME:你的Docker Hub用户名。 -
DOCKER_PASSWORD:你的Docker Hub密码或访问令牌(Access Token)。
-
-






-
创建工作流文件 :
在项目的
.github/workflows/目录下创建ci-cd.yml文件:
yaml
name: Build and Push Docker Image
on:
push:
branches: [ "main" ] # 当代码推送到main分支时触发
jobs:
build-and-push:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Login to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Build and push
uses: docker/build-push-action@v5
with:
context: .
push: true
tags: ${{ secrets.DOCKER_USERNAME }}/todo-api:latest
验证 :推送此工作流文件到GitHub后,在仓库的
Actions选项卡中,你应该能看到一个新的工作流正在运行。如果它显示为绿色(成功),恭喜你,你的CI流水线已经搭建好了!
git status # 查看文件状态
git add . # 添加所有文件
git commit -m "初始化项目" # 提交
git remote -v # 检查远程仓库是否关联
git remote add origin https://github.com/zxcspider/cicd-demo.git # 如未关联则执行
git branch -M main # 确保分支名正确
git push -u origin main # 推送到 GitHub
☁️ 第四步:部署到云------以 阿里云为例
最后,我们将应用部署到云上,让它成为一个真正可访问的服务。
-
启动一个EC2实例:
-
在AWS控制台选择EC2服务,点击"启动实例"。
-
选择Amazon Linux 2 AMI,实例类型选择
t2.micro。 -
关键步骤 :在"安全组"设置中,添加一条规则,允许来自
0.0.0.0/0(即任何IP) 的5000端口TCP访问。这样你才能从外部访问到你的应用。
-
-
连接到你的EC2实例:使用SSH客户端(如终端或PuTTY)连接到你的实例。
-
在EC2上安装Docker并运行容器 :
连接到实例后,执行以下命令安装Docker并运行你的应用容器:
bash
📝 第一步:注册阿里云账号并完成实名认证 首先,你需要一个阿里云账号。 注册账号:访问阿里云官网,点击右上角的"免费注册",按提示完成注册。 实名认证:注册后,需要完成实名认证才能使用云服务。可以在控制台的"账号中心"找到认证入口。 注意:新用户通常可以免费试用ECS实例3个月。在创建实例时,可以留意一下是否有试用资格。 🚀 第二步:创建ECS实例(云服务器) 登录控制台:进入阿里云管理控制台。 进入ECS控制台:在左上角菜单中,选择"云服务器 ECS"。 创建实例:在"实例"列表页面,点击"创建实例"。 配置实例(按以下示例选择): 配置项 推荐值 说明 付费类型 按量付费 练习使用更灵活,不用了可以随时释放,避免持续扣费 地域 离你最近的地域 选择如"华东1(杭州)",网络延迟更低 实例规格 ecs.t5-lc1m1.small 或 ecs.t6-c1m1.large 这些是入门级规格,通常足够运行一个Docker容器,且在免费试用范围内 镜像 Alibaba Cloud Linux 3 阿里云官方优化版Linux,对Docker支持良好 存储 默认配置 一般40 GiB的系统盘足够 公网IP 勾选"分配公网IPv4地址" 这样你的实例才能被外网访问 安全组 新建安全组 我们将在下一步详细配置 登录凭证 自定义密码 设置一个root密码,用于SSH登录 注意:在"安全组"配置中,可以先勾选"HTTP (TCP:80)"和"HTTPS (TCP:443)"等常用规则。 确认下单:检查配置和费用,确认无误后,阅读并同意服务协议,点击"确认下单"。 🔧 第三步:配置安全组(开放端口) 实例创建后,需要配置安全组规则,允许外部访问你的应用。 找到安全组:在ECS控制台左侧菜单,点击"网络与安全" > "安全组"。 管理规则:找到你实例绑定的安全组,点击"管理规则"。 添加入方向规则:点击"入方向" > "快速添加"或"手动添加"。你需要添加两条规则: 端口 目的 授权对象 说明 22 SSH远程连接 你的公网IP(如 123.123.123.123/32) 安全建议:只允许你自己的IP连接,避免被攻击 5000 访问你的应用 0.0.0.0/0 允许所有IP访问你的Flask应用 如何查看自己的公网IP? 在浏览器中搜索"IP"即可。 添加规则时,协议类型选择"自定义TCP",端口范围分别填 22/22 和 5000/5000。 🔗 第四步:连接到你的ECS实例 现在,你可以通过SSH连接到云服务器了。 方式一:使用阿里云Workbench(推荐):在ECS实例列表页面,点击对应实例右侧的"远程连接",选择"Workbench远程连接",输入你设置的root密码即可登录。这是最方便的方式。 方式二:使用本地终端(Terminal / PowerShell): 打开你的终端(Mac/Linux)或PowerShell(Windows)。 在ECS控制台找到你的公网IP地址。 执行以下命令(将IP地址替换为你的真实IP): bash ssh root@<你的公网IP地址> 首次连接会提示验证指纹,输入 yes 即可。 输入你创建实例时设置的root密码。 🐳 第五步:在ECS上安装Docker并运行你的应用 连接上服务器后,就可以安装Docker并运行你的应用了。 安装Docker: 因为用的是Alibaba Cloud Linux 3系统,可以按照以下步骤安装: bash # 1. 安装 dnf(新一代包管理器) yum install dnf -y[reference:36] # 2. 安装 Docker 依赖 dnf install device-mapper-persistent-data lvm2 -y[reference:37] # 3. 添加阿里云镜像的 Docker 软件源 dnf config-manager --add-repo=https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo[reference:38] # 4. 安装 Docker dnf -y install docker-ce --nobest[reference:39] 启动Docker服务并设置开机自启: bash # 启动 Docker 服务 systemctl start docker # 设置 Docker 开机自启动 systemctl enable docker 从Docker Hub拉取你的镜像: 现在,可以从你之前推送到的Docker Hub拉取镜像了。 bash docker pull <你的Docker Hub用户名>/todo-api:latest 运行你的容器: 最后,在后台运行你的应用容器。 bash docker run -d -p 5000:5000 <你的Docker Hub用户名>/todo-api:latest ✅ 第六步:验证部署 一切就绪后,在本地浏览器中访问: http://<你的ECS公网IP地址>:5000/health 如果能看到 {"status":"healthy"} 的返回,就说明你的应用已经在阿里云上成功运行了! 💎 总结与后续 至此,你已经在阿里云上完整地部署了你的应用。与AWS的流程相比,核心概念是相通的,只是产品名称(ECS vs EC2)和具体操作界面不同。 完成这一步后,你的DevOps实习项目就真正"上线"了。之后,你还可以在这个基础上继续探索更高级的主题,比如: 使用阿里云容器服务ACK 来管理Kubernetes集群。 使用Terraform 或阿里云的ROS(资源编排)实现基础设施即代码。 配置日志服务和云监控,实现更完善的运维体系。 如果在操作中遇到任何问题,随时可以把错误信息贴给我,我帮你一起看看。
最终验证 :在浏览器中访问
http://<你的EC2实例公网IP>:5000/health。如果看到{"status":"healthy"},恭喜你!你的第一个"实习级"DevOps项目已经成功上线了!
