新增 migration 0021(background_key/url)、playlist/CRUD 返回 backgroundUrl、
POST .../music/{id}/background,并热更 popadmin 音乐列表背景上传;公读策略放行 perm/music/*。
Co-authored-by: Cursor <cursoragent@cursor.com>
|
||
|---|---|---|
| .. | ||
| config.docker.yaml | ||
| deploy.sh | ||
| docker-compose.yaml | ||
| lib.sh | ||
| README.md | ||
| rollback.sh | ||
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 打的回滚点 |
发布
make deploy
# 或
bash deploy/docker/deploy.sh
流程概要:
- 本地
make image,打标签spark-server:<git-sha>-<时间>与latest - 上传镜像 tar、compose、config、nginx 片段
- 在 load 新镜像前,远端把当前
spark-server:latest标为spark-server:rollback,并备份 config docker load→compose up --force-recreate→ migrate- 轮询
healthz+readyz;失败则 自动回滚 到:rollback(不跑 migrate) - 写
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):
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: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。
验证
curl -fsS http://127.0.0.1:18080/healthz # 在 ECS 上
curl -fsS http://127.0.0.1:18080/readyz