Files
senmesh-zc/deployment/iw/README.md
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

112 lines
5.6 KiB
Markdown
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 内网机部署包(iw)
本目录**就是**一台内网服务器的完整部署包:镜像 tar、前端静态包、SQL、配置、安装脚本都在里面,
整目录拷到内网机即可装机,不需要联网、不需要回仓库取任何东西。
外网机用同级的 `../ow/`,两份除了 `.env` 与 `web/`(前端内/外网包)之外完全一样。
完整拓扑、两侧差异表、已知坑见仓库里的 [`../部署说明.md`](../部署说明.md)。
---
## 1. 装机(三步)
```bash
# 1) 整目录拷到内网机,例如 /opt/sfile-iw
cd /opt/sfile-iw
# 2) 改配置:至少确认 MeshSafe(没接检测就把 MESHSAFE_ENABLED 改成 false)
vi .env
# 3) 一键装:自检 -> 校验并载入镜像 -> 建数据目录 -> 起栈 -> 等健康
./scripts/install.sh
```
装完会打印访问地址 `http://<本机IP>:<WEB_PORT>`。**首次登录后立刻改掉 admin 的初始口令。**
重复执行 `install.sh` 是安全的:只重建有差异的容器,不动已初始化好的数据库。
---
## 2. 目录说明
```
├── docker-compose.yml 5 个服务(web/app/pg/redis/mq),现场不改
├── .env 本机全部可变项:角色/端口/口令/目录/MeshSafe ← 只改这个
├── config/application.yml 后端静态默认配置,不放任何口令(口令走 .env 注入)
├── nginx/web.conf 前端站点 + /api 反代,改端口/上传上限时看这里
├── web/ 前端静态包(内网包),挂进 nginx 当站点根
├── sql/01-init-table.sql 全量建表 02-init-data.sql 初始数据(admin、机构、平台编码)
├── sql/upgrade/ 已上线老库的增量脚本,新装不用跑(见 sql/README.md)
├── images/*.tar 5 个镜像 + SHA256SUMS.txt
├── scripts/install.sh 一键安装
└── volumes/ 运行时数据,install.sh 自动创建
├── pgdata/ redis/ mq/ 三个中间件的数据
├── upload/ 用户上传的文件本体
├── logs/ 后端日志(logs/nginx 是前端访问日志)
└── gate/out/ gate/in/ 光闸摆渡:本机发出 / 本机收到
```
数据全在宿主机 `volumes/` 下,容器删了数据还在。要放到独立数据盘就改 `.env` 的
`SFILE_DATA_ROOT`(以及 `GATE_SEND_DIR`/`GATE_RECV_DIR`)为绝对路径,重跑 `install.sh`。
---
## 3. 现场要确认的 6 件事(都在 `.env`)
| 项 | 变量 | 内网机出厂值 / 建议 |
|---|---|---|
| 前端对外端口 | `WEB_PORT` | `80`;被占用就改 8080/9080,同步改访问地址 |
| 数据盘根目录 | `SFILE_DATA_ROOT` | `./volumes`;正式环境建议改绝对路径指到独立数据盘(≥200G) |
| 光闸摆渡目录 | `GATE_SEND_DIR` / `GATE_RECV_DIR` | `./volumes/gate/out` / `in`;**与光闸厂商确认挂载点**,发出与收到必须是两个不同目录 |
| 传输方向 | `SFILE_TRANSFER_LOCATION` | 内网机固定 `1`(外网机是 `2`)。**写反了摆渡方向就反了** |
| MeshSafe | `MESHSAFE_ENABLED` / `_BASE_URL` / `_CLIENT_ID` / `_SECRET` | 没接检测 → `MESHSAFE_ENABLED=false`;接了 → secret 必须与 MeshSafe 侧 `MESHSAFE_API_CLIENTS` 白名单里的 `client_id:secret` 逐字一致 |
| 口令 | `POSTGRES_PASSWORD` / `MQ_PASSWORD` / `JWT_SECRET` / `USER_DEFAULT_PASSWORD` | 出厂已给随机值可直接跑;`USER_DEFAULT_PASSWORD` 是新建用户的初始密码,**必须改并告知业务员** |
---
## 4. 改前端页面(不用重建镜像)
前端是解压好的静态包,`web/` 就是站点根:
```bash
# 替换整个前端包
rm -rf web && cp -r /path/to/new/dist web
docker compose restart web
# 只改单个文件(例如临时改个文案)
vi web/assets/xxx.js # 或替换 index.html
docker compose restart web # 浏览器再强刷一次(Ctrl+F5)
```
`web/` 是只读挂载,容器不会写它;改坏了从仓库 `frontend/` 重新构建一份覆盖即可。
构建产物的文件名自带 hash,`index.html` 不做缓存,所以换包后用户浏览器会自动取到新文件。
---
## 5. 运维
```bash
docker compose ps # 状态(5 个都该是 healthy)
docker logs -f sfile-iw-app # 后端日志(含送检/摆渡全过程)
docker compose restart app # 改完 .env / config 后重启后端
docker compose restart web # 替换 web/ 里的前端文件后刷新站点
docker compose down # 停止(不动数据)
```
**备份只需三样**:`volumes/pgdata`(库)、`volumes/upload`(文件本体)、`.env`(口令)。
恢复:换机器后按原路径放回 + `docker load` + `./scripts/install.sh`。
改了 `.env` 里的口令/网段这类**建容器时固化**的值,光 `restart` 不生效,要
`docker compose up -d`(重建容器)。数据库口令属于建库时写入,改它要连 `volumes/pgdata` 一起处理。
---
## 6. 装不上时先看这三条
1. `images/` 少 tar 或 sha256 不对 → 交付盘拷坏了,重拷(`install.sh` 会明确报哪一条)。
2. 架构不符(信创 ARM 机装了 amd64 包)→ `install.sh` 会拦;回构建机用 `TARGET_PLATFORM=linux/arm64` 重新出包。
3. 端口/网段与机器上已有容器冲突 → 改 `.env` 的 `WEB_PORT`,或整段换 `APP_SUBNET`/`APP_GATEWAY`/`APP_NODE_IP`(三个值必须同网段)。
其余坑(发号器 workerId、nginx 透传 Host、PostgreSQL 18 数据目录挂载点、监听周期与传输快慢)
见 [`../部署说明.md`](../部署说明.md) 最后一节。