post-bank-point-mall/DEPLOY.md

463 lines
11 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 邮储银行积分商城服务部署步骤
## 前置条件
1. Docker Swarm 集群已搭建
2. NFS 服务器已配置172.29.104.45
3. Harbor 镜像仓库可访问
4. Goploy 部署平台已配置
---
## 一、准备工作
### 1.1 准备配置文件
> 💡 **说明**:现在支持多环境配置,文件命名规则为 `config.{env}.yaml`,例如:
> - `config.dev.yaml` - 开发环境
> - `config.test.yaml` - 测试环境
> - `config.prod.yaml` - 生产环境
#### 1.1.1 复制配置模板(可选)
```bash
cd /Users/zhouyonggao/Project/post-bank-point-mall
# 如果还没有配置文件,可以从示例复制
cp trans_hub/app/ymt/post_bank_point_mall/service/configs/config.example.yaml \
trans_hub/app/ymt/post_bank_point_mall/service/configs/config.prod.yaml
```
#### 1.1.2 修改生产环境配置
编辑 `trans_hub/app/ymt/post_bank_point_mall/service/configs/config.prod.yaml`
```yaml
env: prod # 改为 prod
server:
http:
addr: ":12022"
timeout: 30s
data:
db:
driver: mysql
source: root:密码@tcp(数据库地址3306)/transfer?charset=utf8mb4&parseTime=true&loc=Local
maxIdle: 5
maxOpen: 20
maxLifetime: 5s
isDebug: false # 生产环境关闭 debug
redis:
addr: Redis 地址6379
password: Redis 密码
readTimeout: 3s
writeTimeout: 3s
poolSize: 5
minIdleConns: 2
connMaxIdleTime: 30s
db: 4
config:
# 根据实际业务修改配置
task:
interval: 5s
batchSize: 50
concurrency: 5
psbc:
domain: "https://正式环境域名"
fileDomain: "https://文件服务域名"
merchantId: "正式商户 ID"
# ... 其他配置
```
---
## 二、服务器端操作(只需在 Docker Swarm 管理节点执行一次)
> 💡 **提示**:管理节点是运行 `docker stack deploy` 命令的节点,可以通过 `docker node ls` 查看节点角色MANAGER STATUS 为 `Leader` 或 `Reachable` 的即为管理节点。
### 2.1 创建 NFS 配置目录
```bash
# SSH 登录到 Swarm 管理节点Leader 节点)
ssh root@manager-node # 替换为你的管理节点 IP
# 验证是否为管理节点
docker node ls # MANAGER STATUS 列显示 Leader 或 Reachable
# 创建 NFS 目录
mkdir -p /data/nfs/trans-hub/post_bank_point_mall/config
# 设置权限
chmod 755 /data/nfs/trans-hub/post_bank_point_mall/config
```
### 2.2 上传配置文件到 NFS 服务器
> 💡 **说明**NFS 服务器可以是独立服务器,也可以是 Swarm 集群中的某个节点。配置文件只需上传一次,所有节点通过 NFS 共享访问。
```bash
# 从本地上传配置文件到 NFS 服务器
cd /Users/zhouyonggao/Project/post-bank-point-mall
# 上传对应环境的配置文件(重命名为 config.yaml
# 例如:上传生产环境配置
scp trans_hub/app/ymt/post_bank_point_mall/service/configs/config.prod.yaml \
root@172.29.104.45:/data/nfs/trans-hub/post_bank_point_mall/config/config.yaml
# 验证文件是否存在
ssh root@172.29.104.45 "cat /data/nfs/trans-hub/post_bank_point_mall/config/config.yaml"
```
---
## 三、Goploy 部署配置
### 3.1 创建项目
登录 Goploy点击"新建项目"
### 3.2 基本配置
| 配置项 | 值 |
|--------|-----|
| 名称 | `邮储银行积分商城` |
| 仓库地址 | `ssh://git@gitea.cdlsxd.cn:222/transfer_project/trans_hub.git` |
| 部署路径 | `/root/wwwroot/servers/trans_hub_post_bank_point_mall` |
| 环境 | `测试环境``生产环境` |
| 分支 | `post_bank_point_mall` |
| 传输方式 | `sftp` |
| 传输选项 | `-rtv --exclude-regexexp='*' --include-regexexp='^.sh config/' --include=.env` |
| 服务器 | 选择目标服务器 |
| 用户 | 选择部署用户 |
### 3.3 自定义变量
添加以下变量:
| 变量名 | 类型 | 值 |
|--------|------|-----|
| `CONTAINER_NAME` | string | `post_bank_point_mall` |
### 3.4 拉取后运行脚本(构建镜像)
```bash
#!/bin/bash
export VERSION=$(git describe --tags --always)
echo "CONTAINER_NAME=${CONTAINER_NAME}" >> .env
echo "VERSION=${VERSION}" >> .env
source .env
# 构建镜像
docker build --build-arg CODEUP_USER="你的账号" \
--build-arg CODEUP_PASS="你的密码" \
--build-arg VERSION="${VERSION}" \
--build-arg SERVICE_NAME="${CONTAINER_NAME}" \
-t ${CONTAINER_NAME}:${VERSION} \
-f trans_hub/app/ymt/post_bank_point_mall/service/Dockerfile \
trans_hub/app/ymt/post_bank_point_mall/service
# 推送到 Harbor
docker tag ${CONTAINER_NAME}:${VERSION} harbor.dev.cdlsxd.cn/common/${CONTAINER_NAME}:${VERSION}
docker login harbor.dev.cdlsxd.cn -u admin -p Harbor8@121212
docker push harbor.dev.cdlsxd.cn/common/${CONTAINER_NAME}:${VERSION}
echo "镜像构建完成:${CONTAINER_NAME}:${VERSION}"
```
### 3.5 部署后运行脚本(更新服务)
```bash
#!/bin/bash
source ${PROJECT_PATH}/.env
echo "${UP_VERSION} ${CONTAINER_NAME} ${VERSION}"
# 登录 Harbor
docker login harbor.dev.cdlsxd.cn -u admin -p Harbor8@121212
# 拉取最新镜像
docker pull harbor.dev.cdlsxd.cn/common/${CONTAINER_NAME}:${VERSION}
# 更新服务
docker service update \
--image harbor.dev.cdlsxd.cn/common/${CONTAINER_NAME}:${VERSION} \
trans-hub_${CONTAINER_NAME}
echo "服务更新完成!"
```
---
## 四、首次部署 Stack
### 4.1 上传部署脚本到 Docker Swarm 管理节点
> ⚠️ **重要**必须上传到管理节点Manager Node因为 `docker stack deploy` 命令只能在管理节点执行。
```bash
# 1. 找到管理节点(在你的机器上执行)
ssh root@你的管理节点 IP
# 2. 验证节点角色
docker node ls
# 输出示例:
# ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
# abc123 manager Ready Active Leader 20.10.x ← 这是管理节点
# def456 worker1 Ready Active 20.10.x ← 这是工作节点
# 3. 上传文件到管理节点(在你的机器上执行)
cd /Users/zhouyonggao/Project/post-bank-point-mall/devops/stack/business/post-bank-point-mall
scp deploy.sh root@你的管理节点 IP:/root/
scp post-bank-point-mall-stack.yml root@你的管理节点 IP:/root/
```
### 4.2 在管理节点执行部署
```bash
# SSH 登录到管理节点
ssh root@你的管理节点 IP
# 验证当前节点是管理节点
docker node ls # 确认 MANAGER STATUS 列有值
# 进入部署目录
cd /root
# 执行部署脚本
bash deploy.sh
```
### 4.3 验证部署
```bash
# 查看服务状态
docker service ls
# 查看服务详情
docker service ps trans-hub_post_bank_point_mall
# 查看服务日志
docker service logs trans-hub_post_bank_point_mall -f
# 测试服务
curl -I http://localhost:12022/health
```
---
## 五、配置更新
### 5.1 更新配置文件
```bash
# 修改本地配置(根据环境选择对应的文件)
vim trans_hub/app/ymt/post_bank_point_mall/service/configs/config.prod.yaml
# 重新上传到 NFS重命名为 config.yaml
scp trans_hub/app/ymt/post_bank_point_mall/service/configs/config.prod.yaml \
root@172.29.104.45:/data/nfs/trans-hub/post_bank_point_mall/config/config.yaml
```
### 5.2 重启服务(可选)
某些配置需要重启才能生效:
```bash
docker service update --force trans-hub_post_bank_point_mall
```
---
## 六、注意事项
### 6.1 配置安全
⚠️ **敏感信息处理**
- 数据库密码、Redis 密码等敏感信息不要提交到 Git
- 生产环境使用 Docker Secret 管理敏感信息
- 配置文件设置合适的权限:`chmod 600 config.yaml`
### 6.2 端口冲突
⚠️ **检查端口占用**
```bash
# 部署前检查端口是否被占用
netstat -tlnp | grep 12022
# 如果端口被占用,修改配置文件中的端口
```
### 6.3 数据库连接
⚠️ **确保数据库可访问**
- 测试数据库连接:`telnet 数据库 IP 3306`
- 确保防火墙允许 Docker 网络访问数据库
- 检查数据库用户权限
### 6.4 Redis 连接
⚠️ **确保 Redis 可访问**
- 测试 Redis 连接:`redis-cli -h Redis 地址 -p 6379`
- 检查 Redis 密码是否正确
- 确认 Redis 最大连接数足够
### 6.5 日志查看
```bash
# 查看实时日志
docker service logs trans-hub_post_bank_point_mall -f
# 查看最近 100 行日志
docker service logs trans-hub_post_bank_point_mall --tail 100
# 查看错误日志
docker service logs trans-hub_post_bank_point_mall 2>&1 | grep ERROR
```
### 6.6 服务回滚
如果部署失败,回滚到上一个版本:
```bash
docker service rollback trans-hub_post_bank_point_mall
```
### 6.7 扩容/缩容
```bash
# 扩容到 3 个副本
docker service update --replicas 3 trans-hub_post_bank_point_mall
# 缩容到 1 个副本
docker service update --replicas 1 trans-hub_post_bank_point_mall
```
### 6.8 调整资源限制
```bash
# 修改 deploy.sh 中的资源配置
vim devops/stack/business/post-bank-point-mall/deploy.sh
# 例如:调整 CPU 限制为 50%
export CPU_LIMIT=0.50
# 调整内存限制为 1G
export MEM_LIMIT=1024M
# 重新部署
bash deploy.sh
```
### 6.9 查看资源使用情况
```bash
# 查看服务资源使用
docker stats $(docker ps -q | head -5)
# 查看服务详细配置
docker service inspect trans-hub_post_bank_point_mall --format='{{.Spec.TaskTemplate.Resources}}'
```
### 6.8 健康检查
确保服务健康检查正常:
```bash
# 查看健康检查状态
docker service inspect trans-hub_post_bank_point_mall --format='{{.Spec.Healthcheck}}'
```
---
## 七、常见问题
### Q1: 服务启动失败
```bash
# 查看日志
docker service logs trans-hub_post_bank_point_mall --tail 200
# 常见原因:
# - 配置文件路径错误
# - 数据库连接失败
# - 端口被占用
```
### Q2: NFS 挂载失败
```bash
# 检查 NFS 服务器
showmount -e 172.29.104.45
# 手动测试挂载
mount -t nfs 172.29.104.45:/data/nfs/trans-hub/post_bank_point_mall/config /mnt
```
### Q3: 镜像拉取失败
```bash
# 检查 Harbor 连接
docker login harbor.dev.cdlsxd.cn
# 检查镜像是否存在
docker images | grep post_bank_point_mall
```
---
## 八、监控和告警
### 8.1 服务监控
```bash
# 查看服务状态
watch -n 2 'docker service ls | grep post_bank_point_mall'
# 查看资源使用(实时)
docker stats $(docker ps -q | head -5)
# 查看服务资源限制配置
docker service inspect trans-hub_post_bank_point_mall \
--format='{{.Spec.TaskTemplate.Resources.Limits.NanoCPUs}},{{.Spec.TaskTemplate.Resources.Limits.MemoryBytes}}'
```
### 8.2 日志收集
建议配置日志收集系统(如 ELK、Loki
- 实时查看日志
- 日志搜索和过滤
- 告警通知
---
## 九、回滚流程
### 9.1 快速回滚
```bash
# 回滚到上一个版本
docker service rollback trans-hub_post_bank_point_mall
# 或者指定版本
docker service update \
--image harbor.dev.cdlsxd.cn/common/post_bank_point_mall:v1.0.0 \
trans-hub_post_bank_point_mall
```
### 9.2 配置回滚
```bash
# 恢复配置文件
scp configs/config-backup.yaml \
root@172.29.104.45:/data/nfs/trans-hub/post_bank_point_mall/config/config.yaml
# 重启服务
docker service update --force trans-hub_post_bank_point_mall
```
---
## 十、联系支持
遇到问题时:
1. 查看日志:`docker service logs trans-hub_post_bank_point_mall`
2. 检查配置:确认配置文件正确
3. 联系运维团队