Compare commits
1 Commits
revoxelseg
...
revoxelseg
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3ad83a64a9 |
28
.env.example
Normal file
28
.env.example
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
# ReVoxelSeg DICOM 通用部署配置示例
|
||||||
|
|
||||||
|
# Web 服务
|
||||||
|
HOST_PORT=4000
|
||||||
|
APP_URL=http://localhost:4000
|
||||||
|
TRUST_PROXY=true
|
||||||
|
REVOXELSEG_IMAGE=revoxelseg-dicom:generic
|
||||||
|
REVOXELSEG_DATA_DIR=./data
|
||||||
|
REVOXELSEG_EXPORTS_DIR=./exports
|
||||||
|
|
||||||
|
# 如需在 NAS 或受限网络环境构建,可按需填写代理;不需要时留空。
|
||||||
|
HTTP_PROXY=
|
||||||
|
HTTPS_PROXY=
|
||||||
|
NO_PROXY=localhost,127.0.0.1,revoxelseg_web,revoxelseg_frpc
|
||||||
|
|
||||||
|
# FRPC 可选配置。
|
||||||
|
# 默认 docker compose up 不会启动 frpc。
|
||||||
|
# 需要公网映射时,填写以下变量后执行:
|
||||||
|
# docker compose --profile frpc up -d --build
|
||||||
|
FRPC_IMAGE=snowdreamtech/frpc:latest
|
||||||
|
FRP_SERVER_ADDR=your-frp-server.example.com
|
||||||
|
FRP_SERVER_PORT=7000
|
||||||
|
FRP_AUTH_METHOD=token
|
||||||
|
FRP_AUTH_TOKEN=replace-with-your-token
|
||||||
|
FRP_POOL_COUNT=5
|
||||||
|
FRP_HEARTBEAT_TIMEOUT=-1
|
||||||
|
FRP_PROXY_NAME=ReVoxelSeg_DICOM
|
||||||
|
FRP_REMOTE_PORT=10000
|
||||||
2
.gitignore
vendored
2
.gitignore
vendored
@@ -15,6 +15,7 @@ WebSite/exports/
|
|||||||
# Local env
|
# Local env
|
||||||
.env
|
.env
|
||||||
.env.*
|
.env.*
|
||||||
|
!.env.example
|
||||||
WebSite/.env
|
WebSite/.env
|
||||||
WebSite/.env.*
|
WebSite/.env.*
|
||||||
|
|
||||||
@@ -28,4 +29,3 @@ pnpm-debug.log*
|
|||||||
Thumbs.db
|
Thumbs.db
|
||||||
.vscode/
|
.vscode/
|
||||||
.idea/
|
.idea/
|
||||||
|
|
||||||
|
|||||||
111
README.md
111
README.md
@@ -1,6 +1,6 @@
|
|||||||
# ReVoxelSeg DICOM Docker 独立运行包
|
# ReVoxelSeg DICOM Docker 通用运行包
|
||||||
|
|
||||||
这是“基于模型逆向体素化及 DICOM 分割标注系统”的独立 Docker 程序目录。目录内已经包含运行所需源码、默认 DICOM 演示数据和默认 STL 模型数据,因此即使没有原始 `ReVoxelSeg_DICOM` 工程目录,也可以直接在本目录构建和运行。
|
这是“基于模型逆向体素化及 DICOM 分割标注系统”的通用 Docker 程序目录。目录内包含运行所需源码、默认 DICOM 演示数据和默认 STL 模型数据,因此可以脱离原始工程目录独立构建和运行。
|
||||||
|
|
||||||
## 目录内容
|
## 目录内容
|
||||||
|
|
||||||
@@ -8,14 +8,14 @@
|
|||||||
- `Head_CT_DICOM/`:默认 DICOM 影像序列。
|
- `Head_CT_DICOM/`:默认 DICOM 影像序列。
|
||||||
- `Head_CT_ReConstruct/`:默认 STL 模型。
|
- `Head_CT_ReConstruct/`:默认 STL 模型。
|
||||||
- `Dockerfile`:Docker 镜像构建文件。
|
- `Dockerfile`:Docker 镜像构建文件。
|
||||||
- `docker_compose.yaml`:本机 Docker Compose 部署文件。
|
- `docker_compose.yaml`:通用 Docker Compose 部署文件。
|
||||||
- `docker_compose.nas.yaml`:威联通 NAS / QTS Container Station 部署文件。
|
- `.env.example`:通用环境变量示例。
|
||||||
- `data/`:运行后自动生成,保存项目状态和上传资产。
|
- `data/`:运行后自动生成,保存项目状态和上传资产。
|
||||||
- `exports/`:运行后自动生成,保存导出结果。
|
- `exports/`:运行后自动生成,保存导出结果。
|
||||||
|
|
||||||
本目录不包含工程分析、软著撰写材料、参考模板、旧运行产物和开发依赖缓存。
|
本通用版本不包含任何固定公网域名、固定 FRP 服务地址、固定鉴权 token 或固定远端端口。需要公网映射时,请按实际环境填写 `.env`。
|
||||||
|
|
||||||
## 本机部署
|
## 本机直接部署
|
||||||
|
|
||||||
在本目录执行:
|
在本目录执行:
|
||||||
|
|
||||||
@@ -23,76 +23,54 @@
|
|||||||
docker compose -f docker_compose.yaml up -d --build
|
docker compose -f docker_compose.yaml up -d --build
|
||||||
```
|
```
|
||||||
|
|
||||||
访问:
|
默认访问:
|
||||||
|
|
||||||
```text
|
```text
|
||||||
http://192.168.3.11:4000/
|
http://localhost:4000/
|
||||||
http://127.0.0.1:4000/
|
|
||||||
```
|
```
|
||||||
|
|
||||||
查看状态和日志:
|
如需改端口,复制环境变量文件后修改 `HOST_PORT`:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cp .env.example .env
|
||||||
|
docker compose --env-file .env -f docker_compose.yaml up -d --build
|
||||||
|
```
|
||||||
|
|
||||||
|
## 启用 FRPC 公网映射
|
||||||
|
|
||||||
|
复制配置模板:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cp .env.example .env
|
||||||
|
```
|
||||||
|
|
||||||
|
编辑 `.env`,填写:
|
||||||
|
|
||||||
|
- `FRP_SERVER_ADDR`
|
||||||
|
- `FRP_SERVER_PORT`
|
||||||
|
- `FRP_AUTH_METHOD`
|
||||||
|
- `FRP_AUTH_TOKEN`
|
||||||
|
- `FRP_PROXY_NAME`
|
||||||
|
- `FRP_REMOTE_PORT`
|
||||||
|
- `APP_URL`
|
||||||
|
|
||||||
|
启动 Web 与 FRPC:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker compose --env-file .env --profile frpc -f docker_compose.yaml up -d --build
|
||||||
|
```
|
||||||
|
|
||||||
|
## 查看状态
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
docker compose -f docker_compose.yaml ps
|
docker compose -f docker_compose.yaml ps
|
||||||
docker compose -f docker_compose.yaml logs -f revoxelseg_web
|
docker compose -f docker_compose.yaml logs -f revoxelseg_web
|
||||||
docker compose -f docker_compose.yaml logs -f revoxelseg_frpc
|
|
||||||
```
|
```
|
||||||
|
|
||||||
停止:
|
启用 FRPC 后查看:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
docker compose -f docker_compose.yaml down
|
docker compose --profile frpc -f docker_compose.yaml logs -f revoxelseg_frpc
|
||||||
```
|
|
||||||
|
|
||||||
## 威联通 NAS / QTS 部署
|
|
||||||
|
|
||||||
建议将完整目录放到:
|
|
||||||
|
|
||||||
```text
|
|
||||||
/share/Container/revoxelseg_dicom
|
|
||||||
```
|
|
||||||
|
|
||||||
然后在 QTS Container Station 中导入或粘贴:
|
|
||||||
|
|
||||||
```text
|
|
||||||
docker_compose.nas.yaml
|
|
||||||
```
|
|
||||||
|
|
||||||
SSH 部署命令:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
cd /share/Container/revoxelseg_dicom
|
|
||||||
docker compose -f docker_compose.nas.yaml up -d --build
|
|
||||||
```
|
|
||||||
|
|
||||||
如果目录不是 `/share/Container/revoxelseg_dicom`,请修改 `docker_compose.nas.yaml` 中的 `build.context`、`data` 和 `exports` 挂载路径。
|
|
||||||
|
|
||||||
## 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
|
|
||||||
```
|
|
||||||
|
|
||||||
FRPC 在线且 NPM 反向代理配置生效后,可通过:
|
|
||||||
|
|
||||||
```text
|
|
||||||
https://revoxel.huijutec.cn/
|
|
||||||
```
|
```
|
||||||
|
|
||||||
## 健康检查
|
## 健康检查
|
||||||
@@ -107,3 +85,8 @@ curl http://127.0.0.1:4000/api/health
|
|||||||
{"ok":true,"service":"revoxelseg-dicom"}
|
{"ok":true,"service":"revoxelseg-dicom"}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## 停止服务
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker compose -f docker_compose.yaml down
|
||||||
|
```
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ npm run serve -- --host 0.0.0.0 --port 4000
|
|||||||
访问:
|
访问:
|
||||||
|
|
||||||
```text
|
```text
|
||||||
http://192.168.3.11:4000/
|
http://localhost:4000/
|
||||||
```
|
```
|
||||||
|
|
||||||
## 构建检查
|
## 构建检查
|
||||||
|
|||||||
@@ -1,68 +0,0 @@
|
|||||||
# ReVoxelSeg DICOM / QNAP QTS Container Station 独立部署版。
|
|
||||||
# 建议完整目录放到:/share/Container/revoxelseg_dicom
|
|
||||||
# Container Station 可能不在项目根目录执行 Compose,因此这里使用绝对路径。
|
|
||||||
|
|
||||||
name: revoxelseg-dicom-qnap-standalone
|
|
||||||
|
|
||||||
services:
|
|
||||||
revoxelseg_web:
|
|
||||||
image: revoxelseg-dicom:standalone-qnap-20260521
|
|
||||||
build:
|
|
||||||
context: /share/Container/revoxelseg_dicom
|
|
||||||
dockerfile: 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
|
|
||||||
|
|
||||||
@@ -1,27 +1,35 @@
|
|||||||
# ReVoxelSeg DICOM 独立 Docker 本机部署版。
|
# ReVoxelSeg DICOM 通用 Docker 部署版。
|
||||||
# 在本目录执行:docker compose -f docker_compose.yaml up -d --build
|
# 默认只启动 Web 服务;如需 FRPC,先复制 .env.example 为 .env 并填写参数,
|
||||||
# 局域网访问:http://192.168.3.11:4000/
|
# 再执行:docker compose --profile frpc up -d --build
|
||||||
# 公网访问:https://revoxel.huijutec.cn/
|
|
||||||
|
|
||||||
name: revoxelseg-dicom-standalone
|
name: revoxelseg-dicom-generic
|
||||||
|
|
||||||
services:
|
services:
|
||||||
revoxelseg_web:
|
revoxelseg_web:
|
||||||
image: revoxelseg-dicom:standalone-20260521
|
image: ${REVOXELSEG_IMAGE:-revoxelseg-dicom:generic}
|
||||||
build:
|
build:
|
||||||
context: .
|
context: .
|
||||||
dockerfile: Dockerfile
|
dockerfile: Dockerfile
|
||||||
|
args:
|
||||||
|
HTTP_PROXY: ${HTTP_PROXY:-}
|
||||||
|
HTTPS_PROXY: ${HTTPS_PROXY:-}
|
||||||
|
NO_PROXY: ${NO_PROXY:-localhost,127.0.0.1,revoxelseg_web,revoxelseg_frpc}
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
ports:
|
ports:
|
||||||
- "4000:4000"
|
- "${HOST_PORT:-4000}:4000"
|
||||||
environment:
|
environment:
|
||||||
NODE_ENV: production
|
NODE_ENV: production
|
||||||
PORT: 4000
|
PORT: 4000
|
||||||
APP_URL: http://192.168.3.11:4000
|
APP_URL: ${APP_URL:-http://localhost:4000}
|
||||||
TRUST_PROXY: "true"
|
TRUST_PROXY: ${TRUST_PROXY:-true}
|
||||||
|
HTTP_PROXY: ${HTTP_PROXY:-}
|
||||||
|
HTTPS_PROXY: ${HTTPS_PROXY:-}
|
||||||
|
http_proxy: ${HTTP_PROXY:-}
|
||||||
|
https_proxy: ${HTTPS_PROXY:-}
|
||||||
|
NO_PROXY: ${NO_PROXY:-localhost,127.0.0.1,revoxelseg_web,revoxelseg_frpc}
|
||||||
volumes:
|
volumes:
|
||||||
- ./data:/app/WebSite/data
|
- ${REVOXELSEG_DATA_DIR:-./data}:/app/WebSite/data
|
||||||
- ./exports:/app/WebSite/exports
|
- ${REVOXELSEG_EXPORTS_DIR:-./exports}:/app/WebSite/exports
|
||||||
healthcheck:
|
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))\""]
|
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
|
interval: 10s
|
||||||
@@ -30,31 +38,32 @@ services:
|
|||||||
start_period: 20s
|
start_period: 20s
|
||||||
|
|
||||||
revoxelseg_frpc:
|
revoxelseg_frpc:
|
||||||
image: snowdreamtech/frpc:latest
|
image: ${FRPC_IMAGE:-snowdreamtech/frpc:latest}
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
|
profiles:
|
||||||
|
- frpc
|
||||||
entrypoint: ["/bin/sh"]
|
entrypoint: ["/bin/sh"]
|
||||||
command:
|
command:
|
||||||
- -c
|
- -c
|
||||||
- |
|
- |
|
||||||
cat > /tmp/frpc.toml <<'EOF'
|
cat > /tmp/frpc.toml <<EOF
|
||||||
serverAddr = "82.157.255.195"
|
serverAddr = "${FRP_SERVER_ADDR}"
|
||||||
serverPort = 7000
|
serverPort = ${FRP_SERVER_PORT}
|
||||||
|
|
||||||
auth.method = "token"
|
auth.method = "${FRP_AUTH_METHOD}"
|
||||||
auth.token = "en.xjtu.edu.cn"
|
auth.token = "${FRP_AUTH_TOKEN}"
|
||||||
|
|
||||||
transport.poolCount = 5
|
transport.poolCount = ${FRP_POOL_COUNT}
|
||||||
transport.heartbeatTimeout = -1
|
transport.heartbeatTimeout = ${FRP_HEARTBEAT_TIMEOUT}
|
||||||
|
|
||||||
[[proxies]]
|
[[proxies]]
|
||||||
name = "ReVoxelSeg_DICOM"
|
name = "${FRP_PROXY_NAME}"
|
||||||
type = "tcp"
|
type = "tcp"
|
||||||
localIP = "revoxelseg_web"
|
localIP = "revoxelseg_web"
|
||||||
localPort = 4000
|
localPort = 4000
|
||||||
remotePort = 10008
|
remotePort = ${FRP_REMOTE_PORT}
|
||||||
EOF
|
EOF
|
||||||
exec frpc -c /tmp/frpc.toml
|
exec frpc -c /tmp/frpc.toml
|
||||||
depends_on:
|
depends_on:
|
||||||
revoxelseg_web:
|
revoxelseg_web:
|
||||||
condition: service_healthy
|
condition: service_healthy
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user