Files
senmesh-zc/deploy/offline/.env.example
KodouWZF 4eb67e246e feat(交付): 客户侧两台服务器离线部署包
内网机/外网机各起一套栈,两台之间不开任何端口,文件只经光闸在
gate/out 与对端 gate/in 之间单向摆渡。一份 compose + 一份 config +
一份 nginx 模板,全部差异收在 .env 里。

- docker-compose.yml:5 服务只发布前端端口;app 容器 IP 锁死并由
  compose 注入 -Dcode.snowflake.workid.<IP>=<WORK_ID>,绕开兜底 99
  超雪花 5 位上限导致启动即崩的问题
- .env.iw / .env.ow:出厂配置与随机口令已填好,仅 MESHSAFE_SECRET
  故意留占位(以 MeshSafe 侧白名单为准);按 maintainer 决定原样入库
- install.sh iw|ow:按角色建 .env -> 自检 -> sha256 校验 tar -> 架构
  核对 -> docker load 后校验 tag -> 建目录/属主/SELinux 标签 -> 起栈
  并逐个等健康。修掉 pipefail 下 `grep | head -1` 静默中断、架构字段
  误读 manifest.json(实际在 Config blob)、die() 未定义先被调用
- export-images.sh:就地刷新 images/*.tar、sql、.env 的 tag 与
  SHA256SUMS,再打 dist 交付盘;tar 与 SHA256SUMS 由 .gitignore 排除
- sql/01+02:从 backend/db 的 PG 全量与初始数据覆盖拷贝。三个
  upgrade-*.sql 的 PG 段(x_upload_config、x_file_security)已在
  init-table-postgres-full.sql 内,空库跑 01->02 即完整现状
- smoke_test.py:18 条断言的现场验收,凭证全部走环境变量
- 部署说明.md:拓扑、交付清单、出厂口令表、iw/ow 差异、验收清单、
  13 条已知坑

镜像 tar 不进 git,装机包由 export-images.sh 出盘。
2026-11-02 20:40:16 +08:00

90 lines
4.3 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# =============================================================================
# s-file 客户侧离线部署 —— 唯一需要现场修改的文件
#
# 用法:cp .env.example .env 然后按本机角色填写,两台服务器各填一份
# 内网机:SFILE_ROLE=iw SFILE_TRANSFER_LOCATION=1 SFILE_SITE_ROOT=/usr/share/nginx/inside
# 外网机:SFILE_ROLE=ow SFILE_TRANSFER_LOCATION=2 SFILE_SITE_ROOT=/usr/share/nginx/outside
#
# 凡是写着「必须改」的值,不改起不来或者起来即安全隐患
# =============================================================================
# ---------- 本机角色(必须改) ----------
# iw=内网机 / ow=外网机,只影响容器名前缀与 MQ 交换机命名,两侧不能填同一个
SFILE_ROLE=iw
# 传输方向标记:内网机 1,外网机 2。写反了跨网摆渡直接不工作
SFILE_TRANSFER_LOCATION=1
# 前端站点根:内网机 inside,外网机 outside(同一个 web 镜像内含两套前端包)
SFILE_SITE_ROOT=/usr/share/nginx/inside
# ---------- 镜像(来自交付 tar,现场 docker load,不会联网拉取) ----------
APP_IMAGE=sfile-app:1.0.0
WEB_IMAGE=sfile-web:1.0.0
PG_IMAGE=postgres:18
REDIS_IMAGE=redis:8
MQ_IMAGE=rabbitmq:3.13-management-alpine
# postgres 数据目录挂载点:18 及以后是 /var/lib/postgresql,15 及以前是 /var/lib/postgresql/data
# 用交付的 PG_IMAGE 就不用动;自行换库版本时按上面规则改这一行
PG_DATA_DIR=/var/lib/postgresql
# ---------- 对外访问 ----------
# 只暴露前端一个端口;后端/数据库/Redis/MQ 全部只在容器网络内,不映射宿主机
WEB_HOST=0.0.0.0
WEB_PORT=80
# ---------- 口令与密钥(必须改) ----------
POSTGRES_DB=s_file
POSTGRES_USER=sfile
POSTGRES_PASSWORD=CHANGE_ME_pg_password
MQ_USER=sfile
MQ_PASSWORD=CHANGE_ME_mq_password
# JWT 签名密钥,至少 32 字符,两侧不要相同,丢失即所有登录态失效
JWT_SECRET=CHANGE_ME_jwt_secret_at_least_32_chars
# 新建用户的初始密码
USER_DEFAULT_PASSWORD=CHANGE_ME_user_init_pwd
# ---------- 发号器(workerId)与容器网段 ----------
# 后端雪花 ID 的 workerId 按「app 容器 IP」取键;取不到会回退 99,而 99 超过 5 位上限,
# 应用会直接启动失败(worker Id can't be greater than 31)。所以这里必须锁 IP。
# 下面三个值必须同一网段,一般不用改;只有和客户机器上已有 docker 网段冲突时才整段换掉
APP_SUBNET=172.30.88.0/24
APP_GATEWAY=172.30.88.1
APP_NODE_IP=172.30.88.10
# 发号器机器号,0-31。两台独立服务器各跑一套,取同一个值也没问题;
# 若同一台机器上并跑内网+外网两套栈,必须给不同值,否则生成的 ID 会撞
APP_WORK_ID=1
# ---------- 主机数据目录 ----------
# 应用上传文件、日志、数据库/Redis/MQ 持久化的根目录,需独立数据盘且预留足够空间
SFILE_DATA_ROOT=/data/sfile
# 光闸摆渡目录:本机的「发出去」目录,由光闸设备单向搬运到对端
GATE_SEND_DIR=/data/sfile/gate/out
# 光闸摆渡目录:对端经光闸投递进来的目录
GATE_RECV_DIR=/data/sfile/gate/in
# ---------- MeshSafe 文件安全检测 ----------
# 没有部署 MeshSafe 时置 false,前端自动隐藏「安全检测」列,跨网摆渡不受影响
MESHSAFE_ENABLED=true
# 同机部署:http://host.docker.internal:44380(需 Docker >= 20.10)
# 独立服务器/集群:http://<MeshSafe地址>:<端口>
MESHSAFE_BASE_URL=http://host.docker.internal:44380
# 必须与 MeshSafe 侧 MESHSAFE_API_CLIENTS 白名单里的凭证一致(必须改)
MESHSAFE_CLIENT_ID=CHANGE_ME_client_id
MESHSAFE_SECRET=CHANGE_ME_client_secret
# 送检来源标识,两侧区分开便于审计追溯
MESHSAFE_CHANNEL=sfile-iw
# 检测服务不可用时:true=放行并记录,false=阻断(等保从严建议 false)
MESHSAFE_FAIL_OPEN=true
MESHSAFE_TIMEOUT_SECONDS=120
MESHSAFE_POLL_TIMEOUT_MINUTES=60
# 拉取检测结论的轮询周期,默认每 10 秒
MESHSAFE_POLL_CRON=0/10 * * * * ?
# ---------- 资源与运行时 ----------
TZ=Asia/Shanghai
# 按机器内存调整,堆外还需预留 1G 左右
APP_JAVA_OPTS=-Xms1g -Xmx3g -Dfile.encoding=UTF-8
REDIS_MAXMEMORY=512mb
# 跨网文件监听任务周期,默认每分钟扫一次摆渡目录
FILE_TRANSFER_MONITOR_CRON=0 */1 * * * ?