4fd89b038d
Co-authored-by: multica-agent <github@multica.ai>
202 lines
4.4 KiB
Markdown
202 lines
4.4 KiB
Markdown
# 服务部署流程 SOP
|
||
|
||
## 元数据
|
||
|
||
| 属性 | 值 |
|
||
|------|-----|
|
||
| **领域** | 运维 |
|
||
| **责任人** | 严维序(opengineer) |
|
||
| **版本** | v1.0 |
|
||
| **创建日期** | 2026-06-24 |
|
||
| **最后更新** | 2026-06-24 |
|
||
| **标签** | 部署, 运维, SOP |
|
||
|
||
## 概述
|
||
|
||
本文档定义 BizWings 团队所有业务服务的部署流程标准,涵盖部署前检查、执行步骤、验证测试和回滚预案。适用于所有生产环境的代码部署与服务更新。
|
||
|
||
---
|
||
|
||
## 一、部署前置检查
|
||
|
||
### 1.1 代码准备
|
||
|
||
- [ ] 代码已合并到目标分支(main / release)
|
||
- [ ] PR 已通过 Code Review 并合并
|
||
- [ ] 本地或 CI 构建通过(编译无报错)
|
||
- [ ] 版本号已更新(如有)
|
||
|
||
### 1.2 环境检查
|
||
|
||
- [ ] 目标服务器磁盘空间充足(> 剩余 20%)
|
||
- [ ] CPU / 内存负载正常(< 80%)
|
||
- [ ] 网络连通性:本机 → 目标服务器可达
|
||
- [ ] 目标端口未被占用
|
||
- [ ] 依赖服务(数据库 / 中间件)运行正常
|
||
|
||
### 1.3 备份准备
|
||
|
||
- [ ] **配置备份**:服务器配置文件备份到 `/backup/conf/` 目录
|
||
- [ ] **数据库备份**:涉及数据库变更,先执行 `mysqldump` 全量备份
|
||
- [ ] **当前版本标记**:记录当前运行版本号或 Git commit hash
|
||
|
||
---
|
||
|
||
## 二、部署执行步骤
|
||
|
||
### 2.1 文件分发
|
||
|
||
```bash
|
||
# 标准部署(SSH + scp/rsync)
|
||
scp -P <port> ./dist/app root@<server>:/opt/app/
|
||
# 或使用 rsync 增量同步
|
||
rsync -avz --delete -e "ssh -p <port>" ./dist/ root@<server>:/opt/app/
|
||
```
|
||
|
||
### 2.2 服务更新
|
||
|
||
#### 方式 A:systemd 服务
|
||
```bash
|
||
# 1. 停止服务
|
||
systemctl stop <service-name>
|
||
|
||
# 2. 备份旧版本(如有必要)
|
||
mv /opt/app/<app> /opt/app/<app>.bak
|
||
|
||
# 3. 放置新版本
|
||
cp /tmp/<app> /opt/app/<app>
|
||
chmod +x /opt/app/<app>
|
||
|
||
# 4. 重启服务
|
||
systemctl start <service-name>
|
||
systemctl status <service-name>
|
||
```
|
||
|
||
#### 方式 B:Docker 容器
|
||
```bash
|
||
# 1. 拉取新镜像
|
||
docker pull <registry>/<image>:<tag>
|
||
|
||
# 2. 停止旧容器
|
||
docker stop <container-name>
|
||
docker rm <container-name>
|
||
|
||
# 3. 启动新容器
|
||
docker run -d --name <container-name> \
|
||
--restart unless-stopped \
|
||
-p <host-port>:<container-port> \
|
||
<registry>/<image>:<tag>
|
||
```
|
||
|
||
#### 方式 C:Nginx 反向代理更新
|
||
```bash
|
||
# 更新上游配置后重载
|
||
nginx -t # 语法检查
|
||
systemctl reload nginx # 热重载
|
||
```
|
||
|
||
### 2.3 配置变更
|
||
|
||
```bash
|
||
# 1. 备份当前配置
|
||
cp /etc/<app>/config.yml /etc/<app>/config.yml.$(date +%Y%m%d-%H%M%S)
|
||
|
||
# 2. 修改配置
|
||
vim /etc/<app>/config.yml
|
||
|
||
# 3. 重启服务使配置生效
|
||
systemctl restart <service-name>
|
||
```
|
||
|
||
---
|
||
|
||
## 三、部署验证
|
||
|
||
### 3.1 连通性验证
|
||
```bash
|
||
# 服务端口监听确认
|
||
ss -tlnp | grep <port>
|
||
|
||
# HTTP 服务健康检查
|
||
curl -s -o /dev/null -w "%{http_code}" http://localhost:<port>/health
|
||
# 预期返回:200
|
||
```
|
||
|
||
### 3.2 功能验证
|
||
|
||
- [ ] API 基础功能运行正常
|
||
- [ ] 日志无新增 ERROR 级别报错
|
||
- [ ] 数据库连接正常
|
||
- [ ] 前端页面(如有)可正常加载
|
||
|
||
### 3.3 监控确认
|
||
|
||
- [ ] Prometheus / Grafana 指标正常
|
||
- [ ] 日志系统(如有)已捕获新日志
|
||
- [ ] 告警规则未被触发
|
||
|
||
---
|
||
|
||
## 四、回滚方案
|
||
|
||
### 4.1 代码回滚
|
||
```bash
|
||
# Git 回滚到上一版本
|
||
cd /opt/app/repo
|
||
git revert HEAD --no-edit
|
||
git push
|
||
# 重新执行部署
|
||
```
|
||
|
||
### 4.2 文件回滚
|
||
```bash
|
||
# 恢复备份文件
|
||
mv /opt/app/<app>.bak /opt/app/<app>
|
||
systemctl restart <service-name>
|
||
```
|
||
|
||
### 4.3 数据库回滚
|
||
```bash
|
||
# 导入备份
|
||
gunzip < /backup/db/<dbname>.$(date +%Y%m%d).sql.gz | mysql -u root -p<pass> <dbname>
|
||
```
|
||
|
||
### 4.4 回滚确认
|
||
- [ ] 旧版本服务运行正常
|
||
- [ ] 端口监听确认
|
||
- [ ] 用户无访问异常
|
||
- [ ] 记录回滚原因到工作日志
|
||
|
||
---
|
||
|
||
## 五、部署后记录
|
||
|
||
### 5.1 必填信息
|
||
|
||
| 项目 | 内容 |
|
||
|------|------|
|
||
| 部署时间 | YYYY-MM-DD HH:mm |
|
||
| 部署人 | 严维序(opengineer) |
|
||
| 部署内容 | [简要描述] |
|
||
| 版本 | commit hash / tag |
|
||
| 验证结果 | ✅/❌ 通过 |
|
||
| 回滚情况 | 无需回滚 / 已回滚(原因) |
|
||
|
||
### 5.2 记录位置
|
||
|
||
- 工作日志:`memory/YYYY-MM-DD.md`
|
||
- 任务记录:WorkBoard 相关卡片注释
|
||
- 知识更新:如部署暴露流程问题,更新本文档
|
||
|
||
---
|
||
|
||
## 相关条目
|
||
|
||
- [故障排查手册_v1.0.md](故障排查手册_v1.0.md)
|
||
- [服务器运维标准_v1.0.md](服务器运维标准_v1.0.md)
|
||
|
||
## 变更记录
|
||
|
||
| 日期 | 版本 | 变更说明 | 变更人 |
|
||
|------|------|----------|--------|
|
||
| 2026-06-24 | v1.0 | 初始创建 | 严维序 | |