2026-05-21-10-38-49 新增Docker部署与FRPC映射

This commit is contained in:
2026-05-21 10:50:24 +08:00
parent e4a403f015
commit b027f50118
12 changed files with 554 additions and 2 deletions

34
Docker部署/Dockerfile Normal file
View File

@@ -0,0 +1,34 @@
# syntax=docker/dockerfile:1
FROM node:22-bookworm-slim
WORKDIR /app
ENV PORT=4000
ENV HOST=0.0.0.0
ARG HTTP_PROXY
ARG HTTPS_PROXY
ARG NO_PROXY
COPY WebSite/package*.json ./WebSite/
WORKDIR /app/WebSite
RUN npm ci
WORKDIR /app
COPY WebSite ./WebSite
COPY Head_CT_DICOM ./Head_CT_DICOM
COPY Head_CT_ReConstruct ./Head_CT_ReConstruct
WORKDIR /app/WebSite
RUN npm run build && mkdir -p data exports
ENV NODE_ENV=production
EXPOSE 4000
HEALTHCHECK --interval=10s --timeout=5s --retries=12 --start-period=20s \
CMD node -e "fetch('http://127.0.0.1:4000/api/health').then(r=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))"
CMD ["npm", "run", "serve", "--", "--host", "0.0.0.0", "--port", "4000"]

128
Docker部署/README.md Normal file
View File

@@ -0,0 +1,128 @@
# ReVoxelSeg DICOM Docker 部署说明
本目录提供两套 Docker Compose 部署方式:
- `本机/docker_compose.yaml`:适合当前开发机或普通 Linux 主机。
- `威联通NAS/docker_compose.yaml`:适合 QNAP QTS Container Station使用 `/share/Container/revoxelseg_dicom` 绝对路径。
两套 Compose 都包含:
- `revoxelseg_web`ReVoxelSeg DICOM 前后端一体服务,容器端口 `4000`
- `revoxelseg_frpc`FRPC 客户端,将 `revoxelseg_web:4000` 映射到 `82.157.255.195` 的远程端口 `10008`
## 一、本机部署
在项目根目录执行:
```bash
docker compose -f Docker部署/本机/docker_compose.yaml up -d --build
```
查看状态:
```bash
docker compose -f Docker部署/本机/docker_compose.yaml ps
docker compose -f Docker部署/本机/docker_compose.yaml logs -f revoxelseg_web
docker compose -f Docker部署/本机/docker_compose.yaml logs -f revoxelseg_frpc
```
访问地址:
```text
http://192.168.3.11:4000/
http://127.0.0.1:4000/
```
公网访问需等待 FRPC 在线,并确认 NPM 反向代理已将 `revoxel.huijutec.cn` 转发到 FRP 服务端 `10008`
```text
https://revoxel.huijutec.cn/
```
停止:
```bash
docker compose -f Docker部署/本机/docker_compose.yaml down
```
## 二、威联通 NAS / QTS Container Station 部署
建议把完整项目放到:
```text
/share/Container/revoxelseg_dicom
```
然后在 QTS Container Station 中创建应用,选择或粘贴:
```text
/share/Container/revoxelseg_dicom/Docker部署/威联通NAS/docker_compose.yaml
```
也可通过 SSH 执行:
```bash
cd /share/Container/revoxelseg_dicom
docker compose -f Docker部署/威联通NAS/docker_compose.yaml up -d --build
```
如果项目目录不是 `/share/Container/revoxelseg_dicom`,需要同步修改 NAS Compose 中:
- `build.context`
- `/share/Container/revoxelseg_dicom/data`
- `/share/Container/revoxelseg_dicom/exports`
## 三、数据持久化
容器内路径:
- `/app/WebSite/data`:项目状态、上传数据和导入缓存。
- `/app/WebSite/exports`:导出的 NII/NII.GZ/TAR.GZ 文件。
本机部署会挂载到:
- `Docker部署/本机/data`
- `Docker部署/本机/exports`
NAS 部署会挂载到:
- `/share/Container/revoxelseg_dicom/data`
- `/share/Container/revoxelseg_dicom/exports`
默认演示数据 `Head_CT_DICOM/``Head_CT_ReConstruct/` 会复制进镜像,用于新环境首次启动后的默认项目。
## 四、FRPC 映射
Compose 中内置的 FRPC 配置为:
```toml
serverAddr = "82.157.255.195"
serverPort = 7000
auth.method = "token"
auth.token = "en.xjtu.edu.cn"
transport.poolCount = 5
transport.heartbeatTimeout = -1
[[proxies]]
name = "ReVoxelSeg_DICOM"
type = "tcp"
localIP = "revoxelseg_web"
localPort = 4000
remotePort = 10008
```
如果远端端口或代理名称调整,只需修改两份 `docker_compose.yaml``revoxelseg_frpc` 的内嵌配置。
## 五、旧 tmux 部署回退
若需要临时回退到旧部署方式:
```bash
docker compose -f Docker部署/本机/docker_compose.yaml down
cd WebSite
npm run build
npm run serve -- --host 0.0.0.0 --port 4000
```

View File

@@ -0,0 +1,70 @@
# ReVoxelSeg DICOM / QNAP QTS Container Station 直接部署版。
# 建议把完整项目放到:/share/Container/revoxelseg_dicom
# Container Station 不一定从项目根目录执行 Compose因此 build.context 与 volumes 使用绝对路径。
# 局域网访问http://NAS_IP:4000/ 或 http://192.168.3.11:4000/
# 公网访问NPM 反向代理将 revoxel.huijutec.cn 转发到 FRP 服务端 10008 后生效。
name: revoxelseg-dicom-qnap
services:
revoxelseg_web:
image: revoxelseg-dicom:web-qnap-20260521
build:
context: /share/Container/revoxelseg_dicom
dockerfile: Docker部署/Dockerfile
args:
HTTP_PROXY: http://192.168.31.7:7893
HTTPS_PROXY: http://192.168.31.7:7893
NO_PROXY: localhost,127.0.0.1,192.168.31.0/24,192.168.3.0/24,revoxelseg_web,revoxelseg_frpc
restart: unless-stopped
ports:
- "4000:4000"
environment:
NODE_ENV: production
PORT: 4000
APP_URL: https://revoxel.huijutec.cn
TRUST_PROXY: "true"
HTTP_PROXY: http://192.168.31.7:7893
HTTPS_PROXY: http://192.168.31.7:7893
http_proxy: http://192.168.31.7:7893
https_proxy: http://192.168.31.7:7893
NO_PROXY: localhost,127.0.0.1,192.168.31.0/24,192.168.3.0/24,revoxelseg_web,revoxelseg_frpc
volumes:
- /share/Container/revoxelseg_dicom/data:/app/WebSite/data
- /share/Container/revoxelseg_dicom/exports:/app/WebSite/exports
healthcheck:
test: ["CMD-SHELL", "node -e \"fetch('http://127.0.0.1:4000/api/health').then(r=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))\""]
interval: 10s
timeout: 5s
retries: 12
start_period: 20s
revoxelseg_frpc:
image: snowdreamtech/frpc:latest
restart: unless-stopped
entrypoint: ["/bin/sh"]
command:
- -c
- |
cat > /tmp/frpc.toml <<'EOF'
serverAddr = "82.157.255.195"
serverPort = 7000
auth.method = "token"
auth.token = "en.xjtu.edu.cn"
transport.poolCount = 5
transport.heartbeatTimeout = -1
[[proxies]]
name = "ReVoxelSeg_DICOM"
type = "tcp"
localIP = "revoxelseg_web"
localPort = 4000
remotePort = 10008
EOF
exec frpc -c /tmp/frpc.toml
depends_on:
revoxelseg_web:
condition: service_healthy

View File

@@ -0,0 +1,60 @@
# ReVoxelSeg DICOM 本机 Docker 部署版。
# 运行位置:项目根目录下执行 `docker compose -f Docker部署/本机/docker_compose.yaml up -d --build`
# 局域网访问http://192.168.3.11:4000/
# 公网访问NPM 反向代理将 revoxel.huijutec.cn 转发到 FRP 服务端 10008 后生效。
name: revoxelseg-dicom-local
services:
revoxelseg_web:
image: revoxelseg-dicom:web-local-20260521
build:
context: ../..
dockerfile: Docker部署/Dockerfile
restart: unless-stopped
ports:
- "4000:4000"
environment:
NODE_ENV: production
PORT: 4000
APP_URL: http://192.168.3.11:4000
TRUST_PROXY: "true"
volumes:
- ./data:/app/WebSite/data
- ./exports:/app/WebSite/exports
healthcheck:
test: ["CMD-SHELL", "node -e \"fetch('http://127.0.0.1:4000/api/health').then(r=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))\""]
interval: 10s
timeout: 5s
retries: 12
start_period: 20s
revoxelseg_frpc:
image: snowdreamtech/frpc:latest
restart: unless-stopped
entrypoint: ["/bin/sh"]
command:
- -c
- |
cat > /tmp/frpc.toml <<'EOF'
serverAddr = "82.157.255.195"
serverPort = 7000
auth.method = "token"
auth.token = "en.xjtu.edu.cn"
transport.poolCount = 5
transport.heartbeatTimeout = -1
[[proxies]]
name = "ReVoxelSeg_DICOM"
type = "tcp"
localIP = "revoxelseg_web"
localPort = 4000
remotePort = 10008
EOF
exec frpc -c /tmp/frpc.toml
depends_on:
revoxelseg_web:
condition: service_healthy