Skip to content

Latest commit

 

History

History
156 lines (116 loc) · 7.7 KB

deployment.md

File metadata and controls

156 lines (116 loc) · 7.7 KB

部署

用途:部署和维护当前 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 手工构建与推送 Nexus

在 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

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-metadata

docker compose --profile <name> up 只启动容器。能力是否生效还取决于 .env 中的 CF_ENABLE_*、provider、凭据和依赖配置;以配置参考为准。

TLS

CADDY_TLS=internal 使用内部 CA,适合隔离环境;客户端必须显式信任该 CA。使用公开 证书时,主机名需正确解析,且 ACME 所需端口可达。不要在生产中通过关闭证书验证掩盖 配置错误。

升级

  1. 备份数据库、deploy/compose/data/seafile/ 和所有外部对象存储配置。
  2. 阅读 release.yaml 的版本与 schema 变化,并确认三个 fork 的提交一致。
  3. 拉取或构建新镜像,先运行 docker compose config --quiet。
  4. 在维护窗口更新栈,观察 cloudfile、cf-worker 和可选服务日志。
  5. 执行 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 <能力>。门禁文件存在不等于已在当前提交运行; 功能矩阵会区分代码、自动化门禁和已知验证记录。