Files
senmesh-zc/deploy/docker-compose.yml
KodouWZF 47273ae3fd init: 信创文件安全传输系统内外网本地 Docker 部署
包含 s-file 后端、React 前端、MeshSafe 安全检测对接,以及内外网两套
compose/nginx/配置(仅前端 28180/28280 对外发布,其余端口不暴露)。

说明:deploy/config/application-iw.yml 与 application-ow.yml 按维护者
明确要求原样入库,其中含本机 Docker 用的库口令、RabbitMQ 口令与 JWT
密钥;上生产前需替换。
2026-11-02 10:59:03 +08:00

253 lines
7.4 KiB
YAML
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 信创文件安全传输系统 —— 本机 docker 部署(内网侧 + 外网侧两套)
#
# 启动:
# docker build -f deploy/docker/Dockerfile.app -t sfile-app:local backend/target
# docker build -f deploy/docker/Dockerfile.web -t sfile-web:local frontend
# cd deploy && docker compose up -d
#
# 端口:
# 内网前端 http://<本机IP>:28180 外网前端 http://<本机IP>:28280
# 其余(后端/postgres/redis/rabbitmq)只在容器网络内通信,不映射宿主机端口
# MeshSafe 复用本机已运行的 meshsafe-nginx:44380(两套后端都经 host.docker.internal 调用)
#
# 摆渡目录(模拟光闸):
# gate/iw2ow = 内网 send + 外网 receive gate/ow2iw = 外网 send + 内网 receive
# =============================================================================
name: sfile
services:
# ===================== 内网侧 =====================
web-iw:
image: sfile-web:local
container_name: sfile-iw-web
restart: unless-stopped
networks: [iw_net]
ports:
- "0.0.0.0:28180:80"
volumes:
- ./nginx/web-iw.conf:/etc/nginx/conf.d/default.conf:ro
depends_on:
app-iw:
condition: service_healthy
healthcheck:
test: ["CMD-SHELL", "curl -sf -o /dev/null http://127.0.0.1:80/ || exit 1"]
interval: 30s
timeout: 5s
retries: 3
app-iw:
image: sfile-app:local
container_name: sfile-iw-app
restart: unless-stopped
networks:
iw_net:
ipv4_address: 172.25.18.10
environment:
TZ: Asia/Shanghai
SPRING_CONFIG_ADDITIONAL_LOCATION: file:/config/application.yml
CODE_SNOWFLAKE_WORKID_172_25_18_10: "1"
volumes:
- ./config/application-iw.yml:/config/application.yml:ro
- ${SFILE_DATA:-D:/zcodedata/sfile}/iw/upload:/data/upload
- ${SFILE_DATA:-D:/zcodedata/sfile}/iw/logs:/app/logs
- ${SFILE_DATA:-D:/zcodedata/sfile}/gate/iw2ow:/data/transfer/send
- ${SFILE_DATA:-D:/zcodedata/sfile}/gate/ow2iw:/data/transfer/receive
extra_hosts:
- "host.docker.internal:host-gateway"
depends_on:
pg-iw:
condition: service_healthy
redis-iw:
condition: service_healthy
mq-iw:
condition: service_healthy
healthcheck:
test: ["CMD-SHELL", "curl -s --max-time 5 -o /dev/null http://127.0.0.1:8080/ || exit 1"]
interval: 30s
timeout: 8s
retries: 5
start_period: 150s
pg-iw:
image: postgres:latest
container_name: sfile-iw-pg
restart: unless-stopped
networks: [iw_net]
environment:
TZ: Asia/Shanghai
POSTGRES_DB: s_file
POSTGRES_USER: sfile
POSTGRES_PASSWORD: sfile_iw_2026
volumes:
# postgres:latest 为 18.x,数据目录挂载点已改为 /var/lib/postgresql
- sfile-pgdata-iw:/var/lib/postgresql
- ../backend/db/init-table-postgres-full.sql:/docker-entrypoint-initdb.d/01-init-table.sql:ro
- ../backend/db/init-data.sql:/docker-entrypoint-initdb.d/02-init-data.sql:ro
healthcheck:
test: ["CMD-SHELL", "pg_isready -U sfile -d s_file"]
interval: 10s
timeout: 5s
retries: 10
start_period: 40s
redis-iw:
image: redis:latest
container_name: sfile-iw-redis
restart: unless-stopped
networks: [iw_net]
command: ["redis-server", "--appendonly", "yes", "--maxmemory", "256mb", "--maxmemory-policy", "allkeys-lru"]
volumes:
- sfile-redis-iw:/data
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 10s
timeout: 3s
retries: 5
mq-iw:
image: rabbitmq:3-management-alpine
container_name: sfile-iw-mq
restart: unless-stopped
networks: [iw_net]
environment:
TZ: Asia/Shanghai
RABBITMQ_DEFAULT_USER: sfile
RABBITMQ_DEFAULT_PASS: sfile_mq_iw_2026
volumes:
- sfile-mq-iw:/var/lib/rabbitmq
healthcheck:
test: ["CMD-SHELL", "rabbitmq-diagnostics -q ping"]
interval: 20s
timeout: 10s
retries: 10
start_period: 40s
# ===================== 外网侧 =====================
web-ow:
image: sfile-web:local
container_name: sfile-ow-web
restart: unless-stopped
networks: [ow_net]
ports:
- "0.0.0.0:28280:80"
volumes:
- ./nginx/web-ow.conf:/etc/nginx/conf.d/default.conf:ro
depends_on:
app-ow:
condition: service_healthy
healthcheck:
test: ["CMD-SHELL", "curl -sf -o /dev/null http://127.0.0.1:80/ || exit 1"]
interval: 30s
timeout: 5s
retries: 3
app-ow:
image: sfile-app:local
container_name: sfile-ow-app
restart: unless-stopped
networks:
ow_net:
ipv4_address: 172.25.28.10
environment:
TZ: Asia/Shanghai
SPRING_CONFIG_ADDITIONAL_LOCATION: file:/config/application.yml
CODE_SNOWFLAKE_WORKID_172_25_28_10: "2"
volumes:
- ./config/application-ow.yml:/config/application.yml:ro
- ${SFILE_DATA:-D:/zcodedata/sfile}/ow/upload:/data/upload
- ${SFILE_DATA:-D:/zcodedata/sfile}/ow/logs:/app/logs
- ${SFILE_DATA:-D:/zcodedata/sfile}/gate/ow2iw:/data/transfer/send
- ${SFILE_DATA:-D:/zcodedata/sfile}/gate/iw2ow:/data/transfer/receive
extra_hosts:
- "host.docker.internal:host-gateway"
depends_on:
pg-ow:
condition: service_healthy
redis-ow:
condition: service_healthy
mq-ow:
condition: service_healthy
healthcheck:
test: ["CMD-SHELL", "curl -s --max-time 5 -o /dev/null http://127.0.0.1:8080/ || exit 1"]
interval: 30s
timeout: 8s
retries: 5
start_period: 150s
pg-ow:
image: postgres:latest
container_name: sfile-ow-pg
restart: unless-stopped
networks: [ow_net]
environment:
TZ: Asia/Shanghai
POSTGRES_DB: s_file
POSTGRES_USER: sfile
POSTGRES_PASSWORD: sfile_ow_2026
volumes:
- sfile-pgdata-ow:/var/lib/postgresql
- ../backend/db/init-table-postgres-full.sql:/docker-entrypoint-initdb.d/01-init-table.sql:ro
- ../backend/db/init-data.sql:/docker-entrypoint-initdb.d/02-init-data.sql:ro
healthcheck:
test: ["CMD-SHELL", "pg_isready -U sfile -d s_file"]
interval: 10s
timeout: 5s
retries: 10
start_period: 40s
redis-ow:
image: redis:latest
container_name: sfile-ow-redis
restart: unless-stopped
networks: [ow_net]
command: ["redis-server", "--appendonly", "yes", "--maxmemory", "256mb", "--maxmemory-policy", "allkeys-lru"]
volumes:
- sfile-redis-ow:/data
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 10s
timeout: 3s
retries: 5
mq-ow:
image: rabbitmq:3-management-alpine
container_name: sfile-ow-mq
restart: unless-stopped
networks: [ow_net]
environment:
TZ: Asia/Shanghai
RABBITMQ_DEFAULT_USER: sfile
RABBITMQ_DEFAULT_PASS: sfile_mq_ow_2026
volumes:
- sfile-mq-ow:/var/lib/rabbitmq
healthcheck:
test: ["CMD-SHELL", "rabbitmq-diagnostics -q ping"]
interval: 20s
timeout: 10s
retries: 10
start_period: 40s
networks:
iw_net:
driver: bridge
ipam:
config:
- subnet: 172.25.18.0/24
gateway: 172.25.18.1
ow_net:
driver: bridge
ipam:
config:
- subnet: 172.25.28.0/24
gateway: 172.25.28.1
volumes:
sfile-pgdata-iw:
sfile-redis-iw:
sfile-mq-iw:
sfile-pgdata-ow:
sfile-redis-ow:
sfile-mq-ow: