diff --git a/DEPLOY.md b/DEPLOY.md new file mode 100644 index 0000000..abcec00 --- /dev/null +++ b/DEPLOY.md @@ -0,0 +1,425 @@ +# 邮储银行积分商城服务部署步骤 + +## 前置条件 + +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. 联系运维团队 diff --git a/devops b/devops new file mode 160000 index 0000000..8016927 --- /dev/null +++ b/devops @@ -0,0 +1 @@ +Subproject commit 8016927b9ddb29b2efab3a8ba1d6fc419236417a diff --git a/trans_hub b/trans_hub index ec49330..ce48507 160000 --- a/trans_hub +++ b/trans_hub @@ -1 +1 @@ -Subproject commit ec4933005c29aa6f647e7729d5bba8a03a066563 +Subproject commit ce4850724c2a3d9685488f6bfaf3fdd05cf6ae1f