# 邮储银行积分商城服务部署步骤 ## 前置条件 1. Docker Swarm 集群已搭建 2. NFS 服务器已配置(172.29.104.45) 3. Harbor 镜像仓库可访问 4. Goploy 部署平台已配置 --- ## 一、准备工作 ### 1.1 创建配置文件 #### 1.1.1 复制配置模板 ```bash cd /Users/zhouyonggao/Project/post-bank-point-mall cp trans_hub/app/ymt/post_bank_point_mall/service/configs/config.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 # 如果 NFS 服务器是独立服务器(172.29.104.45) 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 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 # 查看健康检查状态 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) ``` ### 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. 联系运维团队