feat(docker): 云端部署配置 — host 网络模式 + 环境变量模板
- Dockerfile: Rust 版本升级为 latest stable, 添加 curl (healthcheck), 前端产物 VOLUME 暴露供 OpenResty 挂载 - docker-compose.cloud.yml: 仅 app 容器, host 网络直连宿主机 PG/Redis - .env.production.example: 环境变量模板含必填/可选项注释
This commit is contained in:
@@ -1,7 +1,7 @@
|
|||||||
# ==============================
|
# ==============================
|
||||||
# Stage 1: Build Rust backend
|
# Stage 1: Build Rust backend
|
||||||
# ==============================
|
# ==============================
|
||||||
FROM rust:1.85-bookworm AS rust-builder
|
FROM rust:1-bookworm AS rust-builder
|
||||||
|
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
|
|
||||||
@@ -75,6 +75,7 @@ FROM debian:bookworm-slim AS runtime
|
|||||||
|
|
||||||
RUN apt-get update && apt-get install -y --no-install-recommends \
|
RUN apt-get update && apt-get install -y --no-install-recommends \
|
||||||
ca-certificates \
|
ca-certificates \
|
||||||
|
curl \
|
||||||
&& rm -rf /var/lib/apt/lists/*
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
@@ -85,7 +86,7 @@ COPY --from=rust-builder /app/target/release/erp-server /app/erp-server
|
|||||||
# 复制配置文件
|
# 复制配置文件
|
||||||
COPY config/ /app/config/
|
COPY config/ /app/config/
|
||||||
|
|
||||||
# 复制前端构建产物
|
# 复制前端构建产物(可通过 volume 暴露给 OpenResty)
|
||||||
COPY --from=frontend-builder /app/apps/web/dist/ /app/static/
|
COPY --from=frontend-builder /app/apps/web/dist/ /app/static/
|
||||||
|
|
||||||
# 创建上传目录
|
# 创建上传目录
|
||||||
@@ -96,7 +97,7 @@ RUN useradd -r -s /bin/false appuser \
|
|||||||
&& chown -R appuser:appuser /app
|
&& chown -R appuser:appuser /app
|
||||||
USER appuser
|
USER appuser
|
||||||
|
|
||||||
# 环境变量(运行时通过 docker-compose 覆盖)
|
# 环境变量(运行时通过 docker-compose / .env 覆盖)
|
||||||
ENV ERP__SERVER__HOST=0.0.0.0
|
ENV ERP__SERVER__HOST=0.0.0.0
|
||||||
ENV ERP__SERVER__PORT=3000
|
ENV ERP__SERVER__PORT=3000
|
||||||
ENV ERP__SERVER__METRICS_PORT=9090
|
ENV ERP__SERVER__METRICS_PORT=9090
|
||||||
@@ -104,7 +105,7 @@ ENV ERP__STORAGE__UPLOAD_DIR=/app/uploads
|
|||||||
|
|
||||||
EXPOSE 3000 9090
|
EXPOSE 3000 9090
|
||||||
|
|
||||||
VOLUME ["/app/uploads"]
|
VOLUME ["/app/uploads", "/app/static"]
|
||||||
|
|
||||||
HEALTHCHECK --interval=30s --timeout=5s --start-period=60s --retries=3 \
|
HEALTHCHECK --interval=30s --timeout=5s --start-period=60s --retries=3 \
|
||||||
CMD curl -f http://localhost:3000/api/v1/health || exit 1
|
CMD curl -f http://localhost:3000/api/v1/health || exit 1
|
||||||
|
|||||||
@@ -1,51 +1,52 @@
|
|||||||
# ==============================================
|
# HMS 云端部署环境变量
|
||||||
# HMS 生产环境变量模板
|
# 复制此文件为 .env.production 并填写实际值
|
||||||
# 复制为 .env.production 并填写实际值
|
# cp .env.production.example .env.production
|
||||||
# ==============================================
|
|
||||||
|
|
||||||
# ---- 应用 ----
|
# ===== 必填 =====
|
||||||
APP_PORT=3000
|
|
||||||
METRICS_PORT=9090
|
|
||||||
|
|
||||||
# ---- 数据库(必填)----
|
# PostgreSQL 连接(host 网络模式,直连宿主机)
|
||||||
POSTGRES_USER=erp
|
ERP__DATABASE__URL=postgres://erp:YOUR_PG_PASSWORD@localhost:5432/erp
|
||||||
POSTGRES_PASSWORD=__CHANGE_ME__
|
|
||||||
POSTGRES_DB=erp
|
|
||||||
POSTGRES_PORT=5432
|
|
||||||
|
|
||||||
# ---- Redis(必填)----
|
# Redis 连接
|
||||||
REDIS_PASSWORD=__CHANGE_ME__
|
ERP__REDIS__URL=redis://:YOUR_REDIS_PASSWORD@localhost:6379
|
||||||
REDIS_PORT=6379
|
|
||||||
|
|
||||||
# ---- JWT(必填)----
|
# JWT 密钥(至少 32 字符随机字符串)
|
||||||
ERP__JWT__SECRET=__CHANGE_ME__
|
ERP__JWT__SECRET=CHANGE_ME_TO_A_RANDOM_STRING_AT_LEAST_32_CHARS
|
||||||
ERP__JWT__ACCESS_TOKEN_TTL=15m
|
|
||||||
ERP__JWT__REFRESH_TOKEN_TTL=7d
|
|
||||||
|
|
||||||
# ---- 超级管理员(必填)----
|
# 超级管理员初始密码(首次启动时创建 admin 用户)
|
||||||
ERP__AUTH__SUPER_ADMIN_PASSWORD=__CHANGE_ME__
|
ERP__AUTH__SUPER_ADMIN_PASSWORD=CHANGE_ME_ADMIN_PASSWORD
|
||||||
|
|
||||||
# ---- PII 加密密钥(必填)----
|
# PII 加密密钥(AES-256 KEK,64 位十六进制)
|
||||||
ERP__CRYPTO__KEK=__CHANGE_ME__
|
ERP__CRYPTO__KEK=CHANGE_ME_64_HEX_CHARS_FOR_AES256_KEY
|
||||||
ERP__HEALTH__AES_KEY=__CHANGE_ME__
|
|
||||||
ERP__HEALTH__HMAC_KEY=__CHANGE_ME__
|
|
||||||
|
|
||||||
# ---- CORS ----
|
# 健康数据加密密钥
|
||||||
ERP__CORS__ALLOWED_ORIGINS=["https://your-domain.com"]
|
ERP__HEALTH__AES_KEY=CHANGE_ME_64_HEX_CHARS
|
||||||
|
ERP__HEALTH__HMAC_KEY=CHANGE_ME_64_HEX_CHARS
|
||||||
|
|
||||||
# ---- 微信小程序(可选,dev_mode=true 可跳过)----
|
# ===== 可选 =====
|
||||||
ERP__WECHAT__DEV_MODE=false
|
|
||||||
ERP__WECHAT__APPID=
|
|
||||||
ERP__WECHAT__SECRET=
|
|
||||||
|
|
||||||
# ---- AI 配置(可选)----
|
# 服务端口(默认 3000)
|
||||||
ERP__AI__DEFAULT_PROVIDER=ollama
|
ERP__SERVER__PORT=3000
|
||||||
ERP__AI__OLLAMA__BASE_URL=http://ollama:11434
|
|
||||||
ERP__AI__OLLAMA__MODEL=qwen3:4b
|
|
||||||
|
|
||||||
# ---- 日志 ----
|
# Prometheus 指标端口(默认 9090)
|
||||||
|
ERP__SERVER__METRICS_PORT=9090
|
||||||
|
|
||||||
|
# CORS 允许的来源(逗号分隔)
|
||||||
|
ERP__CORS__ALLOWED_ORIGINS=https://your-domain.com,https://www.your-domain.com
|
||||||
|
|
||||||
|
# 上传目录
|
||||||
|
ERP__STORAGE__UPLOAD_DIR=/app/uploads
|
||||||
|
|
||||||
|
# 日志级别
|
||||||
ERP__LOG__LEVEL=info
|
ERP__LOG__LEVEL=info
|
||||||
|
|
||||||
# ---- 存储 ----
|
# 微信小程序配置(不需要小程序功能可留空)
|
||||||
ERP__STORAGE__UPLOAD_DIR=/app/uploads
|
ERP__WECHAT__APPID=
|
||||||
ERP__STORAGE__MAX_FILE_SIZE=10485760
|
ERP__WECHAT__SECRET=
|
||||||
|
ERP__WECHAT__DEV_MODE=false
|
||||||
|
|
||||||
|
# AI 模块配置(不需要 AI 功能可留空)
|
||||||
|
ERP__AI__DEFAULT_PROVIDER=ollama
|
||||||
|
ERP__AI__API_KEY=
|
||||||
|
ERP__AI__BASE_URL=http://localhost:11434
|
||||||
|
ERP__AI__MODEL=qwen2.5:7b
|
||||||
|
|||||||
1
docker/.gitignore
vendored
Normal file
1
docker/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
.env.production
|
||||||
40
docker/docker-compose.cloud.yml
Normal file
40
docker/docker-compose.cloud.yml
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
# 云端部署配置 — 仅启动应用容器,PG/Redis 使用宿主机已安装的服务
|
||||||
|
# 使用方式: docker compose -f docker/docker-compose.cloud.yml up -d
|
||||||
|
#
|
||||||
|
# 前置条件:
|
||||||
|
# 1. 宿主机已安装 PostgreSQL 16 + Redis 7
|
||||||
|
# 2. PostgreSQL 已创建数据库和用户
|
||||||
|
# 3. 复制 .env.production.example 为 .env.production 并填写实际值
|
||||||
|
# 4. OpenResty 反代配置:
|
||||||
|
# - /api/* → http://localhost:3000
|
||||||
|
# - /uploads/* → http://localhost:3000
|
||||||
|
# - / → 前端静态文件 (挂载 /opt/hms/static/)
|
||||||
|
|
||||||
|
services:
|
||||||
|
app:
|
||||||
|
build:
|
||||||
|
context: ..
|
||||||
|
dockerfile: Dockerfile
|
||||||
|
container_name: hms-server
|
||||||
|
restart: unless-stopped
|
||||||
|
network_mode: host
|
||||||
|
env_file:
|
||||||
|
- .env.production
|
||||||
|
volumes:
|
||||||
|
- ../uploads:/app/uploads
|
||||||
|
- ../config:/app/config:ro
|
||||||
|
- ../static:/app/static
|
||||||
|
healthcheck:
|
||||||
|
test: ["CMD", "curl", "-f", "http://localhost:3000/api/v1/health"]
|
||||||
|
interval: 30s
|
||||||
|
timeout: 5s
|
||||||
|
start_period: 60s
|
||||||
|
retries: 3
|
||||||
|
deploy:
|
||||||
|
resources:
|
||||||
|
limits:
|
||||||
|
cpus: "2"
|
||||||
|
memory: 1024M
|
||||||
|
reservations:
|
||||||
|
cpus: "0.5"
|
||||||
|
memory: 256M
|
||||||
Reference in New Issue
Block a user