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。
This commit is contained in:
111
deployment/ow/README.md
Normal file
111
deployment/ow/README.md
Normal file
@@ -0,0 +1,111 @@
|
||||
# s-file 外网机部署包(ow)
|
||||
|
||||
本目录**就是**一台外网服务器的完整部署包:镜像 tar、前端静态包、SQL、配置、安装脚本都在里面,
|
||||
整目录拷到外网机即可装机,不需要联网、不需要回仓库取任何东西。
|
||||
|
||||
内网机用同级的 `../iw/`,两份除了 `.env` 与 `web/`(前端内/外网包)之外完全一样。
|
||||
完整拓扑、两侧差异表、已知坑见仓库里的 [`../部署说明.md`](../部署说明.md)。
|
||||
|
||||
---
|
||||
|
||||
## 1. 装机(三步)
|
||||
|
||||
```bash
|
||||
# 1) 整目录拷到外网机,例如 /opt/sfile-ow
|
||||
cd /opt/sfile-ow
|
||||
|
||||
# 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` | 外网机固定 `2`(内网机是 `1`)。**写反了摆渡方向就反了** |
|
||||
| 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-ow-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) 最后一节。
|
||||
Reference in New Issue
Block a user