spark-server/deploy/docker/README.md
2026-09-22 17:07:26 +08:00

69 lines
2.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# ECS 部署与回滚
## 目录(主机 `/data/spark-server`)
| 路径 | 说明 |
| --- | --- |
| `compose/docker-compose.yaml` | 服务定义 |
| `configs/config.yaml` | 运行配置(部署前会备份到 `configs/backup/`) |
| `images/spark-server-<release>.tar.gz` | 每次发布的镜像包(保留历史) |
| `images/spark-server.tar.gz` | 最近一次上传的包(兼容旧流程) |
| `releases/manifest.json` | 当前/上一版镜像 ID、release、时间 |
| `releases/previous_image_id` | 发布前 `latest` 的镜像 ID |
| Docker 标签 `spark-server:rollback` | 发布前从 `latest` 打的回滚点 |
## 发布
```bash
make deploy
# 或
bash deploy/docker/deploy.sh
```
流程概要:
1. 本地 `make image`,打标签 `spark-server:<git-sha>-<时间>` 与 `latest`
2. 上传镜像 tar、compose、config、nginx 片段
3. **在 load 新镜像前**,远端把当前 `spark-server:latest` 标为 `spark-server:rollback`,并备份 config
4. `docker load` → `compose up --force-recreate` → **migrate**
5. 轮询 `healthz` + `readyz`;失败则 **自动回滚** 到 `:rollback`(不跑 migrate)
6. 写 `releases/manifest.json`
环境变量:`SPARK_SSH_HOST`、`SPARK_SSH_KEY`、`SPARK_DATA_DIR`、`SPARK_RELEASE`(固定 release 名)、`SPARK_IMAGE_BASE`(默认 `spark-server`)、`SPARK_UPLOAD_CONFIG=1`(仅首次或刻意覆盖远端 `config.yaml`)。
生产密钥(SMTP、JWT 等)写在 ECS 上的 `/data/spark-server/configs/config.yaml`;部署默认不覆盖该文件。
## 回滚
**自动**:本次 `deploy.sh` 健康检查失败时会执行与手动回滚相同的步骤。
**手动**(上一版已成功跑过、且之后只做过一次 deploy):
```bash
make deploy-rollback
# 或
bash deploy/docker/rollback.sh
```
将 `spark-server:rollback` 重新标为 `latest` 并重建容器。**不执行 migrate**。
### 限制(必读)
- **数据库迁移不可自动回滚**。回滚只恢复旧二进制;若新版本已执行 forward-only 迁移(如 `0018_square.sql`),旧进程通常仍能跑(新表闲置),但若迁移做了破坏性变更,需要 DBA 手工处理或从备份恢复库。
- 若连续多次 deploy,`:rollback` 只保留**上一次** deploy 前的镜像。更早版本用 `images/spark-server-<release>.tar.gz`:
```bash
ssh ... 'docker load -i /data/spark-server/images/spark-server-<旧release>.tar.gz && \
docker tag spark-server:latest spark-server:latest && \
cd /data/spark-server/compose && docker compose up -d --force-recreate spark-server'
```
- 回滚 config:从 `configs/backup/config.yaml.<时间>` 拷回 `configs/config.yaml` 后再 `compose up`。
## 验证
```bash
curl -fsS http://127.0.0.1:18080/healthz # 在 ECS 上
curl -fsS http://127.0.0.1:18080/readyz
```