post-bank-point-mall/DEPLOY.md

11 KiB
Raw Permalink Blame History

邮储银行积分商城服务部署步骤

前置条件

  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 复制配置模板(可选)

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

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 为 LeaderReachable 的即为管理节点。

2.1 创建 NFS 配置目录

# 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 共享访问。

# 从本地上传配置文件到 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 拉取后运行脚本(构建镜像)

#!/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 部署后运行脚本(更新服务)

#!/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 命令只能在管理节点执行。

# 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 在管理节点执行部署

# SSH 登录到管理节点
ssh root@你的管理节点 IP

# 验证当前节点是管理节点
docker node ls  # 确认 MANAGER STATUS 列有值

# 进入部署目录
cd /root

# 执行部署脚本
bash deploy.sh

4.3 验证部署

# 查看服务状态
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 更新配置文件

# 修改本地配置(根据环境选择对应的文件)
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 重启服务(可选)

某些配置需要重启才能生效:

docker service update --force trans-hub_post_bank_point_mall

六、注意事项

6.1 配置安全

⚠️ 敏感信息处理

  • 数据库密码、Redis 密码等敏感信息不要提交到 Git
  • 生产环境使用 Docker Secret 管理敏感信息
  • 配置文件设置合适的权限:chmod 600 config.yaml

6.2 端口冲突

⚠️ 检查端口占用

# 部署前检查端口是否被占用
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 日志查看

# 查看实时日志
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 服务回滚

如果部署失败,回滚到上一个版本:

docker service rollback trans-hub_post_bank_point_mall

6.7 扩容/缩容

# 扩容到 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 调整资源限制

# 修改 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 查看资源使用情况

# 查看服务资源使用
docker stats $(docker ps -q | head -5)

# 查看服务详细配置
docker service inspect trans-hub_post_bank_point_mall --format='{{.Spec.TaskTemplate.Resources}}'

6.8 健康检查

确保服务健康检查正常:

# 查看健康检查状态
docker service inspect trans-hub_post_bank_point_mall --format='{{.Spec.Healthcheck}}'

七、常见问题

Q1: 服务启动失败

# 查看日志
docker service logs trans-hub_post_bank_point_mall --tail 200

# 常见原因:
# - 配置文件路径错误
# - 数据库连接失败
# - 端口被占用

Q2: NFS 挂载失败

# 检查 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: 镜像拉取失败

# 检查 Harbor 连接
docker login harbor.dev.cdlsxd.cn

# 检查镜像是否存在
docker images | grep post_bank_point_mall

八、监控和告警

8.1 服务监控

# 查看服务状态
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 快速回滚

# 回滚到上一个版本
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 配置回滚

# 恢复配置文件
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. 联系运维团队