30c17f01e9
- Align deployment guidance with the current three-node Compose topology - Document the current frontend architecture and development workflow - Replace the stale API list with a controller-based route index
85 lines
3.7 KiB
Markdown
85 lines
3.7 KiB
Markdown
# Debian 12 多节点部署手册
|
||
|
||
本文档描述仓库当前的三节点 Compose 部署。实际参数以 `backend/docker-compose-node-01.yml`、`docker-compose-node-02.yml`、`docker-compose-node-03.yml` 和 `backend/config` 为准。
|
||
|
||
## 节点职责
|
||
|
||
默认拓扑为三台 Debian 12 主机:
|
||
|
||
| 节点 | 主要职责 |
|
||
| --- | --- |
|
||
| Node-01 | MySQL 主库、Redis 主节点、Nacos、RocketMQ NameServer/Broker、MinIO 业务写入点、网关和业务服务 |
|
||
| Node-02 | MySQL/Redis 从节点、Nacos、RocketMQ、MinIO 同步副本及业务服务副本 |
|
||
| Node-03 | MySQL/Redis 从节点、Nacos、RocketMQ Broker-B、MinIO 备用实例与监控 exporter |
|
||
|
||
节点 IP、网卡名和资源规格不是代码常量,部署前通过各节点环境文件设置。不要直接照抄旧文档中的密码或 IP。
|
||
|
||
## 前置条件
|
||
|
||
- 三节点安装 Docker Engine 和 Compose v2,时钟同步,节点间放行 Docker 网络所需端口。
|
||
- 三节点使用相同代码版本、Nacos 认证参数、数据库密码、Redis 密码和 JWT secret。
|
||
- Node-01 先准备 MySQL 主库和 Nacos schema;从节点不重复执行初始化 SQL。
|
||
|
||
## 配置
|
||
|
||
从 `backend/.env.example` 复制一份部署环境文件,至少设置:
|
||
|
||
```text
|
||
MYSQL_ROOT_PASSWORD
|
||
MYSQL_APP_USER
|
||
MYSQL_APP_PASSWORD
|
||
REDIS_PASSWORD
|
||
MINIO_ACCESS_KEY
|
||
MINIO_SECRET_KEY
|
||
MINIO_BUCKET
|
||
USER_JWT_SECRET
|
||
ADMIN_JWT_SECRET
|
||
SERVICE_AUTH_TOKEN
|
||
NACOS_USERNAME
|
||
NACOS_PASSWORD
|
||
NACOS_AUTH_TOKEN
|
||
```
|
||
|
||
同时为每个节点设置 `HOST_IP`、`NACOS_SERVERS`、`REDIS_SENTINEL_NODES`;Node-02/03 的业务服务将数据库和 MinIO 写入目标指向 Node-01。仓库提供的 `backend/scripts/minio-sync-node01-to-node02.sh` 只负责 Node-01 到 Node-02 的对象镜像,Node-03 实例不应被描述为已自动同步。所有 secret 必须是部署方自行生成的值。
|
||
|
||
## 启动顺序
|
||
|
||
在 Node-01:
|
||
|
||
```bash
|
||
cd backend
|
||
docker compose --env-file .env -f docker-compose-node-01.yml up -d
|
||
```
|
||
|
||
在 Node-02 和 Node-03 使用各自环境文件和 compose 文件启动。先观察 MySQL、Redis、Nacos、NameServer、Broker、MinIO 健康,再启动或重建业务服务:
|
||
|
||
```bash
|
||
docker compose --env-file .env -f docker-compose-node-02.yml up -d
|
||
docker compose --env-file .env -f docker-compose-node-03.yml up -d
|
||
docker compose -f docker-compose-node-01.yml ps
|
||
```
|
||
|
||
业务服务统一使用 `SPRING_PROFILES_ACTIVE=ha`,端口为网关 `9000`、认证 `9001`、用户 `9002`、内容 `9003`、评论 `9004`、推荐 `9005`、管理 `9006`。
|
||
|
||
## 验证
|
||
|
||
```bash
|
||
docker compose -f docker-compose-node-01.yml ps
|
||
curl http://<gateway-host>:9000/actuator/health
|
||
curl http://<nacos-host>:8848/nacos/v1/console/health/liveness
|
||
```
|
||
|
||
在 Nacos 控制台确认每个业务服务注册了正确的宿主机 IP,而不是 Docker 内网地址;在 Redis Sentinel 中确认主节点;在 MySQL 中确认从库复制状态。停止 Node-01 后,先验证 Sentinel 提升与业务读写,再恢复节点。
|
||
|
||
## 存储与高可用边界
|
||
|
||
- MySQL 使用主从复制,业务写入仍以主库为准。
|
||
- Redis 使用主从 + Sentinel,业务服务通过 `common-redis-ha.yaml` 连接 Sentinel。
|
||
- Nacos 使用三节点集群和共享 `nacos_config` 数据库。
|
||
- MinIO 当前采用 Node-01 单写入点、Node-02 定时镜像副本的方案;Node-03 是备用实例,不是原生 MinIO 分布式纠删码集群。
|
||
- RocketMQ 部署 NameServer 与 Broker-A/B;消息主题和 broker 配置以 `backend/config/rocketmq` 为准。
|
||
|
||
## 安全与备份
|
||
|
||
生产环境不要公开 MySQL、Redis、Nacos、RocketMQ 和 MinIO Console;仅暴露网关及前端站点。定期备份 MySQL 逻辑数据、Nacos 配置和 MinIO 对象,并在恢复演练后再进行版本升级。
|