Files
senmesh-zc/deployment/ow/sql
KodouWZF d39b3b035d feat(部署): 新增 deployment/ 内外网两套按侧部署包
按 demo/ 的写法把交付包改成「角色由目录决定」:iw/ 拷内网机、ow/ 拷外网机,
各自含镜像 tar、SQL、配置与 install.sh,install.sh 不再收 iw/ow 参数。

前端不再打进镜像,改为静态包放在 <侧>/web/ 只读挂进 nginx:1.27-alpine,
现场临时改页面直接替换文件 + restart web 即可。数据仍全部挂宿主机,
子目录命名与 deploy/offline 一致(pgdata/redis/mq/upload/logs/gate),
默认根改为包内 ./volumes,放数据盘只改 .env 的 SFILE_DATA_ROOT。

后端镜像 sfile-app:1.0.1 含传输优化那一批(实测组包 11.4×、解包 9.9×)。
出包脚本 deployment/scripts/build-package.sh 负责 jar→镜像→前端双包→sql→tar→VERSION。
2026-11-04 21:44:56 +08:00
..

建表与初始数据脚本已随包放好,文件名前缀决定执行顺序(先建表后灌数据):

文件 来源 说明
01-init-table.sql backend/db/init-table-postgres-full.sql 全量 DDL,含 x_file_security 安全检测表与 idx_file_record_md5_code 索引
02-init-data.sql backend/db/init-data.sql admin 账号、机构、平台编码(system.code=1 要与此一致)

出包时用 deployment/scripts/build-package.sh 从仓库重新覆盖这两份,别手改副本。

只有 POSTGRES_* 指向的库为空时,PostgreSQL 官方镜像才会执行 docker-entrypoint-initdb.d; 数据目录已有数据时会跳过 —— 想重建就把 volumes/pgdata 一起清掉再 up。

upgrade/ —— 已上线老库的增量脚本(新装不用跑)

文件 作用
upgrade-20260914-upload-config.sql 新增 x_upload_config(机构上传后缀白名单/大小上限/开关)
upgrade-20260915-release.sql 与上一份同一件事(上线汇总版),两者跑其一即可
upgrade-20261101-meshsafe-file-security.sql 新增 x_file_security 文件安全检测表与字段
upgrade-20261103-transfer-perf.sql 给 xs_file_record.md5_code 补索引(解包时按 MD5 去重查询,缺索引就是每文件一次全表扫描)

客户如果从 2026-09 之前的老库升上来,本包(PostgreSQL)真正缺的只有三个对象: x_upload_config、x_file_security、idx_file_record_md5_code。 这三项在 01-init-table.sql 里都已是 PostgreSQL 写法,老库升级建议直接照它补,别整份管道进 psql:

# 先看缺不缺
docker exec -i sfile-iw-pg psql -U sfile -d s_file -c \
  "\dt x_upload_config" -c "\dt x_file_security" -c "\di idx_file_record_md5_code"

# 只补 md5 索引(这份脚本带「-- 2. PostgreSQL」分节标题,可以截出来跑)
awk '/^-- 2\. PostgreSQL/{f=1} f' sql/upgrade/upgrade-20261103-transfer-perf.sql \
  | docker exec -i sfile-iw-pg psql -U sfile -d s_file

注意:这 4 份历史增量脚本是达梦/MySQL 优先写的,upgrade-20260915-release.sql 的 PostgreSQL 段整段是注释掉的, 只有 upgrade-20261101、upgrade-20261103 两份带可执行的「第 2 节 PostgreSQL」。别照着 MySQL 段硬跑。

这两份带可执行第 2 节的脚本都是「第 1 节 MySQL/达梦、第 2 节 PostgreSQL」双库混排,只能跑第 2 节, 整份管道进去会先执行 MySQL 那节。它们不会自动执行,要人工触发(容器名内网机 sfile-iw-pg / 外网机 sfile-ow-pg)。

数据量大时建索引会锁写,放到业务低峰执行;不能停写就用脚本里注明的 CONCURRENTLY 写法。