463 lines
11 KiB
Markdown
463 lines
11 KiB
Markdown
# 邮储银行积分商城服务部署步骤
|
||
|
||
## 前置条件
|
||
|
||
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. 联系运维团队
|