用途:部署和维护当前 CloudFile Compose 栈 适用版本:Seafile CE 14 参考基线,镜像版本以
release.yaml为准 当前状态:有效;生产启用可选能力前须核对功能矩阵
- Linux 主机与 Docker Compose v2;镜像架构必须与主机一致。
- 双架构约定:生产 amd64,本地(Apple Silicon)测试 arm64。 构建脚本按宿主 自动选架构(见下),生产 amd64 镜像在 CI(amd64 原生)出,本地 mac 只出 arm64。
- 可解析的
SEAFILE_SERVER_HOSTNAME,以及持久化目录的备份策略。 - 生产环境不得沿用
.env.example中的示例密码、MinIO 凭据或 API key。
tools/build-platform.sh 是三个构建脚本(base-build、build-in-docker、
docker-build)共享的架构唯一来源。默认跟随宿主、原生优先:
| 宿主 | 自动平台 | 说明 |
|---|---|---|
| macOS Apple Silicon | linux/arm64 |
原生快;Rosetta 2 终端也正确判回 arm64 |
| macOS Intel / Linux x86_64 | linux/amd64 |
原生 |
| Linux aarch64 | linux/arm64 |
原生 |
| Windows(Docker Desktop) | linux/amd64 |
Linux VM 是 amd64 |
CF_PLATFORM 在任何脚本上覆盖自动检测(只收 linux/amd64/linux/arm64)。
跨架构构建(mac 上出 amd64)走 QEMU 模拟,C 编译慢 5~10 倍,仅用于验证,不用于发布。
在 dev162 的 /data/workspace/cloudfile/cloudfile-docker 运行;三个仓库需并排放置,
且工作区无未提交改动。脚本按 release.yaml 核对 Server/Hub 分支,拉取最新提交,
基础镜像缺失时从 Nexus 恢复,然后编译发行包、构建 amd64 应用镜像、验证产物,
最后推送到 Nexus。若三个仓库的相关源码、发行包及本地镜像均未变化,则复用已有
构建;若 Nexus 上该标签指向相同镜像,则跳过推送。版本由命令参数指定,不复用
latest 标签。
./tools/release-dev162.sh 14.0.0-cf.1已有同版本镜像只需推送时,可跳过拉取和编译;只编译、不推送则使用 build:
./tools/release-dev162.sh 14.0.0-cf.0 push
./tools/release-dev162.sh 14.0.0-cf.1 build默认目标是 10.12.1.138:8041/cloudfile/cloudfile:<版本>,可用
CF_NEXUS_REGISTRY 覆盖 Registry 地址。推送使用当前用户已有的 Docker 登录凭据;
缺凭据时先在终端运行 docker login 10.12.1.138:8041,不要把密码写进脚本。
如需强制重新编译,设置 CF_FORCE_REBUILD=1。脚本默认使用 dev162 已验证可访问的 Python、npm 和 Go 镜像源,分别可通过
PIP_INDEX_URL、npm_config_registry、GOPROXY 覆盖;CF_BUILD_JOBS 默认 16。
构建产物留在 build/cloudfile_14.0/,由 Git 忽略,不提交到源码仓库。
dev 镜像的产物校验按 release.yaml 当前输入解算实际 commit,并把独立的不可变源码清单与包内字节摘要写入 cloudfile-build.json;上游 annotated tag 解算到其 commit。既有 build/seafile_14.0/release.json 保留原发布证据,不限制 dev 必须复用旧源码,也不因 dev 构建而被更新。源码不符或包内字节变化仍拒绝组装;Git 校验使用工作目录参数,兼容 dev162 的 Git 1.8。容器编译完成后仅将所选发行包的属主交回调用用户,确保非 root 用户也能写入 provenance;构建缓存与其它版本发行包不受影响。
cd deploy/compose
cp .env.example .env编辑 .env,至少设置站点主机名、管理员账号以及数据库、Redis、Caddy 所需密钥,
然后验证并启动:
docker compose config --quiet
docker compose up -d
docker compose ps
docker compose logs -f cloudfile核心栈包括 cloudfile、db、cache 和 proxy。首次启动会初始化数据库与 Seafile
配置;scripts/scripts_14.0/start.py 在每次启动时重写带 CF_BEGIN/CF_END 标记的
CloudFile 配置块,并幂等应用 cloudfile.sql。
新部署在启动 Server/Hub 前使用随镜像交付的版本化 schema runner 创建并校验当前
DDL(包括资源表、统一编辑锁表及迁移记录),避免只创建旧集成表而遗漏写入屏障依赖。
初始化意图保存在共享卷 .cloudfile-schema-init-pending;失败时停止启动并保留标记,
重启后按正式 runner 的断点继续。既有数据目录且无该标记时不自动升级。
文件锁与 Checkout 仍默认关闭,建表不代表启用能力。
| profile | 服务 | 使用条件 |
|---|---|---|
s3 |
minio、minio-init |
仅本地 MinIO 集成验证;生产通常连接外部 S3 |
search |
seasearch、meilisearch |
需设置检索开关并选择实际 provider |
metadata |
cloudfile-metadata |
已进默认栈(2026-09-22 起 METADATA/TAGS 默认开);14.x 只有 -testing 镜像,tag 必须单独验收 |
office |
onlyoffice |
需启用对应协作能力和稳定 JWT 密钥 |
convert |
seadoc |
需启用转换/导出并配置 JWT |
worker |
cf-worker |
已进默认栈(2026-09-22 起):目录 ACL 迁移/同步、组织同步、索引等周期任务 |
ai |
seafile-ai |
复用官方 Seafile AI 并外接 LLM;当前为验证中,不代表全链路已验收 |
full |
多个可选服务 | 只启动服务;不会自动把所有功能标记为已验证 |
示例:
docker compose up -d # 核心栈,已含 cf-worker 与 cloudfile-metadatadocker compose --profile <name> up 只启动容器。能力是否生效还取决于 .env 中的
CF_ENABLE_*、provider、凭据和依赖配置;以配置参考为准。
CADDY_TLS=internal 使用内部 CA,适合隔离环境;客户端必须显式信任该 CA。使用公开
证书时,主机名需正确解析,且 ACME 所需端口可达。不要在生产中通过关闭证书验证掩盖
配置错误。
- 备份数据库、
deploy/compose/data/seafile/和所有外部对象存储配置。 - 阅读
release.yaml的版本与 schema 变化,并确认三个 fork 的提交一致。 - 拉取或构建新镜像,先运行
docker compose config --quiet。 - 在维护窗口更新栈,观察
cloudfile、cf-worker和可选服务日志。 - 执行 CE 冒烟和本次启用能力的 E2E;失败时保留旧镜像与源对象,不执行不可逆清理。
cloudfile.sql 使用 IF NOT EXISTS 只能创建当前缺失对象,不等于完整 schema 迁移框架。
release.yaml 中 database_schema 变化时必须按对应发布说明处理;当前文档不推断未来迁移步骤。
业务恢复至少同时覆盖:
- MariaDB 中的
ccnet_db、seafile_db、seahub_db; data/seafile/中的配置、密钥、日志和本地对象;- S3/MinIO 的 commit、FS、block 三类 bucket;
- 可选组件自己的数据目录和密钥。
警告: 只复制
data/db/与data/seafile/不能覆盖外部 S3、MinIO、 metadata-server、Meilisearch 或 OnlyOffice 的数据。文件级复制前应停写或使用各组件支持的 一致性快照;未经恢复演练的备份不能视为可恢复。
轻量检查:
./tools/run-checks.sh完整构建和容器 E2E 需要 Linux 与足够磁盘空间:
./image/cloudfile_14.0/base-build.sh # 仅在网络正常机器或基础镜像版本变化时
./build/cloudfile_14.0/cloudfile-build.sh 14.0.0-cf.0
./image/cloudfile_14.0/docker-build.sh 14.0.0-cf.0
./tools/verify-local.sh能力门禁使用 ./tools/verify-local.sh cap <能力>。门禁文件存在不等于已在当前提交运行;
功能矩阵会区分代码、自动化门禁和已知验证记录。