Files
senmesh-zc/deploy/offline/.env.example
KodouWZF 06fb35b984 perf(传输): 摆渡目录监听周期 1 分钟改为 5 秒
端到端延迟里有一半是轮询空等:收发两侧各等一次,1 分钟周期下平均空等
60 秒、最坏 120 秒,这是「一页文件也要 2 分钟」的主因,而真正干活不到 2 秒。

改成 5 秒是安全的:空目录一轮只有两次 Files.list + 过滤,开销可忽略;
Spring 的 cron 任务要等上一轮跑完才排下一轮,同一实例内不会重叠。
副作用是损坏包被更频繁重试(失败包当前不删除也不改名,mtime 最老所以
每轮排第一),彻底解决靠方案 5.2 的 .error 改名让位。

部署说明第 10 条原来写「不要改成秒级」,与新默认值矛盾,一并纠正。
2026-11-03 22:01:25 +08:00

91 lines
4.4 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
# 跨网文件监听任务周期,默认每 5 秒扫一次摆渡目录。
# 调慢可减少空目录扫描,但端到端延迟会按周期的一半叠加(收发两侧各一次)
FILE_TRANSFER_MONITOR_CRON=0/5 * * * * ?