Files
ChuBlog/docs/decisions/0006-container-builds.md
T

23 lines
1.8 KiB
Markdown
Raw Normal View History

2026-10-17 13:13:26 +08:00
# ADR-006:在 Docker 内编译部署产物
## 状态与日期
已接受,2026-10-17。
## 背景
旧部署流程要求宿主机安装 Rust、C 编译工具和 Haskell Stack,先生成 `deploy/bin/`,再复制到镜像。只有 Docker 的服务器会在调用 Cargo 时失败,也容易因宿主机与运行镜像的系统库不同而产生兼容问题。
## 决定
Rust API、ChuSQL 的 Rust 存储库、Haskell 服务端与 bootstrap 均改为 Docker 多阶段构建,使用 Debian 13 系列构建和运行镜像。Astro 保持容器内构建。运行阶段只复制必要的二进制与共享库,不包含构建工具、源码和凭据。ChuSQL 不构建 Web 管理端。
依赖仍由宿主机 Git 与 Python 初始化,保留固定版本、HTTPS 回退和服务器已有 Git 配置。Docker 构建只消费已取得的源码,不挂载 SSH 私钥,也不复制 Git 元数据、宿主机编译产物或环境密码文件。
部署准备脚本调用 Compose 构建全部镜像。管理员密码哈希在不启动依赖服务的临时 API 容器中生成。宿主机不需要执行博客或数据库二进制。
## 影响
宿主机只需 Docker Engine、Compose 插件、Python 3 和 Git。首次构建仍需要足够的内存、磁盘和网络,Rust 与 GHC 编译器来自预装工具链的容器镜像,优先通过腾讯云内网注册表拉取;Cargo 与 Haskell 包仍从各自软件包源下载。Debian 与 npm 默认使用腾讯云内网源。腾讯云未列出的 Cargo/Hackage 不伪造镜像地址,Cargo 源可配置;公开验证源单独存放,不覆盖生产秘密配置。构建缓存留在 BuildKit 内;运行容器的权限、网络和持久卷规则保持原有配置。
旧 `--build-database` 参数兼容保留;默认已构建数据库。移除依赖宿主机产物的 `--no-build`、`--chusql-source` 用法。