70 lines
4.4 KiB
Markdown
70 lines
4.4 KiB
Markdown
# Docker 与 ces-control 部署
|
||
|
||
这里描述仓库当前工作流和脚本行为,不代表正在运行的服务器状态。正式持久部署选择 PostgreSQL,SQLite Compose 保留为独立运行选项。配置字段见 [配置](configuration.md),CI 检查细节见 [验证](validation.md)。
|
||
|
||
## 镜像与独立运行
|
||
|
||
Dockerfile 的 source 阶段复制 Cargo 工作区及脚本;ci 阶段安装远端检查工具,build 阶段构建 aster-server 和 aster,runtime 阶段使用 Debian slim、UID 10001、/data 工作目录及 HTTP 健康检查。
|
||
|
||
指定环境的 SQLite 方案:
|
||
|
||
```sh
|
||
cp .env.example .env
|
||
docker compose up --build -d
|
||
curl --fail http://127.0.0.1:8080/health
|
||
docker compose exec aster aster metadata put project 'Aster VM'
|
||
```
|
||
|
||
默认 docker-compose.yml 只向应用提供 SQLITE_PATH,使用 aster-sqlite 命名卷;不透传 DATABASE_URL。down 保留数据,down -v 会删除卷。
|
||
|
||
指定环境的 PostgreSQL 独立替代方案:先在 .env 中将 POSTGRES_PASSWORD 改为随机十六进制字符串,例如 openssl rand -hex 24,再运行:
|
||
|
||
```sh
|
||
docker compose -f docker-compose.postgres.yml up --build -d
|
||
docker compose -f docker-compose.postgres.yml exec aster aster metadata get project
|
||
```
|
||
|
||
仅使用该 Compose 文件,不与默认 SQLite 文件叠加。此方案使用 aster-postgres 命名卷、PostgreSQL 17;数据库不发布宿主端口。两个独立方案不要同时占用相同应用端口。内部示例连接禁用 TLS,跨不可信网络使用 PostgreSQL TLS 验证。
|
||
|
||
## CI 到正式发布
|
||
|
||
[工作流](../../.gitea/workflows/README.md) 响应 main push 和 workflow_dispatch,在 ces-control 上串行运行:
|
||
|
||
1. 检出代码,调用 ci-ces-control.sh;在 Docker 中检查 workspace、SQLite/HTTP 冒烟及专用真实 PostgreSQL。
|
||
2. 检查成功后构建 endorphin-aster-vm:<sha> 生产镜像。
|
||
3. main 上调用 deploy-ces-control.sh 更新 PostgreSQL 宿主。
|
||
|
||
临时检查容器与网络退出时清理,Cargo 下载与构建缓存保留在专属远端卷。生产镜像、已有发布目录与数据库数据保留;没有自动 image prune 或数据库卷清理。工作流不改动其他项目或共享 Runner 配置。
|
||
|
||
## 生产目录与数据
|
||
|
||
| 路径 | 用途 |
|
||
| --- | --- |
|
||
| /opt/endorphin-aster-vm/releases/<sha>/ | 固定版本的 compose.yml 与 release.env |
|
||
| /opt/endorphin-aster-vm/current | 最近通过部署检查的版本符号链接 |
|
||
| /etc/endorphin-aster-vm/production.env | 首次生成的数据库密码和默认端口,权限 0600 |
|
||
| /var/lib/endorphin-aster-vm/postgres | 独立的 PostgreSQL 持久数据目录 |
|
||
| /var/lock/endorphin-aster-vm-deploy.lock | 避免并行切换生产版本的文件锁 |
|
||
|
||
生产 Compose 固定项目名 endorphin-aster-vm,默认应用入口仅绑定 127.0.0.1:18081;数据库不发布端口,两个服务使用 unless-stopped 自动重启和日志轮换。端口绑定回环地址不等于已实现应用认证。
|
||
|
||
部署脚本只接受已构建镜像。启动容器、健康检查、真实元数据 put/get 及 PostgreSQL 后端确认都成功后才切换 current。失败时保留数据并尝试恢复上一个健康版本;首次部署没有旧版本可恢复。脚本内容导航见 [scripts](../../scripts/README.md)。
|
||
|
||
## 查看、停止与恢复
|
||
|
||
以下命令在服务器上使用已有生产配置,不重新生成密码:
|
||
|
||
```sh
|
||
docker compose -p endorphin-aster-vm --env-file /etc/endorphin-aster-vm/production.env --env-file /opt/endorphin-aster-vm/current/release.env -f /opt/endorphin-aster-vm/current/compose.yml ps
|
||
curl --fail http://127.0.0.1:18081/health
|
||
curl --fail http://127.0.0.1:18081/bootstrap
|
||
```
|
||
|
||
同样的 Compose 参数接 stop 停服保留数据,接 up -d --wait 恢复。不要删除数据目录或使用删除卷的操作代替停服。
|
||
|
||
更改环境文件密码不会自动修改已有 PostgreSQL 数据库用户密码;需另行同步数据库凭据。数据库 major 升级、schema 变更需要迁移设计,恢复旧应用镜像不等于回退数据库。
|
||
|
||
Compose 配置依据 [Docker 环境变量说明](https://docs.docker.com/compose/how-tos/environment-variables/variable-interpolation/),触发方式依据 [Gitea Actions](https://docs.gitea.com/usage/actions/)。按用户约定不主动追踪运行状态;需要排障时针对具体提交核实,不能用旧成功记录推断新版本结果。
|
||
|
||
返回 [运行指南](README.md) 或 [文档索引](../README.md)。
|