Files
endorphin-aster-vm/docs/operations/deployment.md
T
codex-bot 51cd64e688
Verify databases and deploy Aster VM / verify-and-deploy (push) Successful in 7m49s
ci: publish actual Endor example outputs as artifacts
2026-10-19 15:16:28 +08:00

6.0 KiB
Raw Blame History

Docker 与 ces-control 部署

这里描述仓库当前工作流和脚本行为,不代表正在运行的服务器状态。生产保留预置 PostgreSQL 与既有数据。当前 VM 宿主不消费数据库,数据库连接仅为未来特殊类保留。配置字段见 配置,CI 检查细节见 验证。

镜像与独立运行

Dockerfile 的 source 阶段复制 Cargo 工作区及脚本;ci 阶段安装远端检查工具,build 阶段构建 server 和 cli,runtime 阶段使用 Debian slim、UID 10001、/data 工作目录及 HTTP 健康检查。

指定环境的独立宿主方案(沿用原 SQLite 卷,基础信息写入其中的 host 目录):

cp .env.example .env
docker compose up --build -d
curl --fail http://127.0.0.1:8080/health
docker compose exec aster cli bootstrap

默认 docker-compose.yml 提供监听地址和 ASTER_STATE_DIR,保留 aster-sqlite 卷挂载;只写基础信息 JSON,不自动打开卷中的数据库。down 保留数据,down -v 会删除卷。

指定环境中同时预置 PostgreSQL 的独立方案:先在 .env 中将 POSTGRES_PASSWORD 改为随机十六进制字符串,例如 openssl rand -hex 24,再运行:

docker compose -f docker-compose.postgres.yml up --build -d
docker compose -f docker-compose.postgres.yml exec aster cli bootstrap

仅使用该 Compose 文件,不与默认文件叠加。此方案使用 aster-postgres 命名卷、PostgreSQL 17,以及独立的 aster-host 文件信息卷;数据库不发布宿主端口。两个独立方案不要同时占用相同应用端口。未来特殊类跨不可信网络连接数据库时,需要明确配置 PostgreSQL TLS 验证。

CI 到正式发布

工作流 响应 main push 和 workflow_dispatch,在 ces-control 上串行运行:

  1. 检出代码,调用 ci-ces-control.sh;在 Docker 中检查 workspace(含 SQLite 适配)、Endor 示例实际输出、独立 HTTP 冒烟及专用真实 PostgreSQL。清理检查容器前复制报告到宿主 ci-output,工作流无论验证成功或失败均展示并上传 endor-execution-output- artifact;字段与位置见 验证报告。
  2. 检查成功后构建 endorphin-aster-vm: 生产镜像。
  3. main 上调用 deploy-ces-control.sh 更新 VM 宿主并保留预置 PostgreSQL。

临时检查容器与网络退出时清理,Cargo 下载与构建缓存保留在专属远端卷。生产镜像、已有发布目录与数据库数据保留;没有自动 image prune 或数据库卷清理。工作流不改动其他项目或共享 Runner 配置。

生产目录与数据

Cargo 包名为 core/objects/frontend/compiler/storage/host/cli/server,core 的 Rust 库名为 endor_core,可执行文件为 cli/server。Compose 应用服务名 aster、数据库名、卷和生产路径是已有部署资源标识,运行命令为该服务中的 cli。应用不接收 DATABASE_URL、不依赖数据库健康才能启动;Compose 的整体 --wait 仍检查所预置 PostgreSQL 的就绪状态。

路径 用途
/opt/endorphin-aster-vm/releases// 固定版本的 compose.yml 与 release.env
/opt/endorphin-aster-vm/current 最近通过部署检查的版本符号链接
/etc/endorphin-aster-vm/production.env 首次生成的数据库密码和默认端口,权限 0600
/var/lib/endorphin-aster-vm/host 文件基础信息,挂载到 /data/host,目录由部署准备并交给 UID 10001
/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 自动重启和日志轮换。端口绑定回环地址不等于已实现应用认证。

部署脚本只接受已构建镜像。容器就绪、HTTP status=ok 和 CLI 对象引导/释放检查都成功后才切换 current;发布记录改写到 deployment.release.json;首次发布一次性只读导入旧基础信息,再保留完成标记,不删除数据库原记录。详情见 宿主信息。镜像 SHA、release.env 与 current 链接负责标识版本。失败时保留数据并尝试恢复上一个健康版本;首次部署没有旧版本可恢复。脚本内容导航见 scripts。

这里的镜像 SHA、host.version 与 deployment.release 标识 Rust 实现/宿主发布,不是 Endor 用户资源的源码修订。平台方向是统一升级解释器,保留用户源码修订及明确的依赖选择;当前没有资源存储、依赖锁、持久化字节码缓存或执行帧热切换机制。两类版本的边界见 执行与版本模型。

查看、停止与恢复

以下命令在服务器上使用已有生产配置,不重新生成密码:

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 环境变量说明,触发方式依据 Gitea Actions。按用户约定不主动追踪运行状态;需要排障时针对具体提交核实,不能用旧成功记录推断新版本结果。

返回 运行指南 或 文档索引。