4fccfad4ca
- docker-compose.yml vnpy 服务加 init:true(供未来 compose 部署) - three-env-code-promote.md 新增 §9:NAS 容器必须 --init 创建, 手动重建命令+image(pre-init-rebuild勿用with-sqlite)+复发风险(手动rm+run) 根因:无init时docker exec nohup后台进程会话结束后被清(02 day0 4min被清) ci-cd只restart不重建,--init保留;唯一丢--init路径=手动rm+run
264 lines
6.3 KiB
YAML
264 lines
6.3 KiB
YAML
version: '3.8'
|
||
|
||
# Sanguo VeighNa Docker 编排配置
|
||
# 用于 NAS 部署和开发环境
|
||
# 支持环境变量配置和绑定挂载
|
||
|
||
# 加载环境变量
|
||
# 使用前请复制 .env.example 为 .env 并修改配置
|
||
|
||
services:
|
||
# ============================================
|
||
# VeighNa 核心服务
|
||
# ============================================
|
||
vnpy:
|
||
build:
|
||
context: ..
|
||
dockerfile: docker/Dockerfile
|
||
container_name: sanguo-vnpy
|
||
restart: unless-stopped
|
||
init: true # tini 作 PID1, 防 docker exec nohup 后台进程被清(见 docs/three-env-code-promote.md §9)
|
||
|
||
# 容器名称
|
||
hostname: vnpy-server
|
||
|
||
# 环境变量
|
||
environment:
|
||
# Python 配置
|
||
- PYTHONUNBUFFERED=1
|
||
- PYTHONDONTWRITEBYTECODE=1
|
||
- TZ=${TZ:-Asia/Shanghai}
|
||
|
||
# VeighNa 配置
|
||
- VNPY_LOG_LEVEL=${VNPY_LOG_LEVEL:-INFO}
|
||
- VNPY_LOG_FILE=${VNPY_LOG_FILE:-/app/logs/vnpy.log}
|
||
|
||
# 数据库配置
|
||
- DB_TYPE=${DB_TYPE:-sqlite}
|
||
- DB_PATH=${DB_PATH:-/app/data/vnpy.db}
|
||
|
||
# Web 服务配置
|
||
- WEB_HOST=${WEB_HOST:-0.0.0.0}
|
||
- WEB_PORT=${WEB_PORT:-8000}
|
||
- WEB_WORKERS=${WEB_WORKERS:-2}
|
||
|
||
# 安全配置
|
||
- JWT_SECRET_KEY=${JWT_SECRET_KEY:-change-this-to-a-random-secret-key}
|
||
- SESSION_TIMEOUT=${SESSION_TIMEOUT:-3600}
|
||
|
||
# Redis 配置
|
||
- REDIS_HOST=${REDIS_HOST:-redis}
|
||
- REDIS_PORT=${REDIS_PORT:-6379}
|
||
- REDIS_PASSWORD=${REDIS_PASSWORD:-}
|
||
|
||
# PostgreSQL 配置
|
||
- POSTGRES_DB=${POSTGRES_DB:-vnpy}
|
||
- POSTGRES_USER=${POSTGRES_USER:-vnpy}
|
||
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD:-vnpy_password_change_me}
|
||
- POSTGRES_HOST=${POSTGRES_HOST:-postgres}
|
||
- POSTGRES_PORT=${POSTGRES_PORT:-5432}
|
||
|
||
# 开发选项
|
||
- SKIP_REDIS_CHECK=${SKIP_REDIS_CHECK:-0}
|
||
- USE_POSTGRES=${USE_POSTGRES:-0}
|
||
- DEBUG=${DEBUG:-0}
|
||
|
||
# 端口映射
|
||
ports:
|
||
- "${HTTP_PORT:-8000}:8000" # HTTP API
|
||
- "${WS_PORT:-8080}:8080" # WebSocket
|
||
|
||
# 数据卷 - 使用绑定挂载到 NAS stock 目录
|
||
volumes:
|
||
# 数据持久化目录 - 挂载到 NAS stock 目录
|
||
- ${DATA_DIR}/data:/app/data
|
||
- ${DATA_DIR}/logs:/app/logs
|
||
- ${DATA_DIR}/config:/app/config
|
||
- ${DATA_DIR}/temp:/app/temp
|
||
|
||
# 配置文件(只读)- 如果有外部配置
|
||
- ../config:/app/config:ro
|
||
|
||
# 网络
|
||
networks:
|
||
- vnpy-network
|
||
|
||
# 依赖项
|
||
depends_on:
|
||
- redis
|
||
|
||
# 资源限制
|
||
deploy:
|
||
resources:
|
||
limits:
|
||
cpus: '${VNPY_CPU_LIMIT:-2.0}'
|
||
memory: ${VNPY_MEMORY_LIMIT:-2G}
|
||
reservations:
|
||
cpus: '${VNPY_CPU_RESERVATION:-0.5}'
|
||
memory: ${VNPY_MEMORY_RESERVATION:-512M}
|
||
|
||
# ============================================
|
||
# Redis 服务(缓存和消息队列)
|
||
# ============================================
|
||
redis:
|
||
image: redis:7-alpine
|
||
container_name: sanguo-redis
|
||
restart: unless-stopped
|
||
|
||
# 命令参数
|
||
command: >
|
||
sh -c '
|
||
if [ -n "${REDIS_PASSWORD}" ]; then
|
||
redis-server --appendonly yes --requirepass ${REDIS_PASSWORD}
|
||
else
|
||
redis-server --appendonly yes
|
||
fi
|
||
'
|
||
|
||
# 环境变量
|
||
environment:
|
||
- TZ=${TZ:-Asia/Shanghai}
|
||
|
||
# 数据卷 - 挂载到 NAS stock 目录
|
||
volumes:
|
||
- ${DATA_DIR}/redis:/data
|
||
|
||
# 网络
|
||
networks:
|
||
- vnpy-network
|
||
|
||
# 资源限制
|
||
deploy:
|
||
resources:
|
||
limits:
|
||
cpus: '${REDIS_CPU_LIMIT:-0.5}'
|
||
memory: ${REDIS_MEMORY_LIMIT:-256M}
|
||
|
||
# ============================================
|
||
# Nginx 反向代理(可选)
|
||
# ============================================
|
||
nginx:
|
||
image: nginx:alpine
|
||
container_name: sanguo-nginx
|
||
restart: unless-stopped
|
||
profiles:
|
||
- nginx
|
||
- ${ENABLE_NGINX:+nginx}
|
||
|
||
# 环境变量
|
||
environment:
|
||
- TZ=${TZ:-Asia/Shanghai}
|
||
|
||
# 端口映射
|
||
ports:
|
||
- "${NGINX_HTTP_PORT:-80}:80"
|
||
- "${NGINX_HTTPS_PORT:-443}:443"
|
||
|
||
# 配置文件
|
||
volumes:
|
||
- ../docker/nginx/nginx.conf:/etc/nginx/nginx.conf:ro
|
||
- ${DATA_DIR}/nginx/ssl:/etc/nginx/ssl:ro
|
||
- ${DATA_DIR}/nginx/cache:/var/cache/nginx
|
||
- ${DATA_DIR}/logs/nginx:/var/log/nginx
|
||
|
||
# 依赖项
|
||
depends_on:
|
||
- vnpy
|
||
|
||
# 网络
|
||
networks:
|
||
- vnpy-network
|
||
|
||
# 资源限制
|
||
deploy:
|
||
resources:
|
||
limits:
|
||
cpus: '${NGINX_CPU_LIMIT:-0.5}'
|
||
memory: ${NGINX_MEMORY_LIMIT:-256M}
|
||
|
||
# ============================================
|
||
# PostgreSQL 数据库(可选,升级用)
|
||
# ============================================
|
||
postgres:
|
||
image: postgres:15-alpine
|
||
container_name: sanguo-postgres
|
||
restart: unless-stopped
|
||
profiles:
|
||
- postgres
|
||
- ${USE_POSTGRES:+postgres}
|
||
|
||
# 环境变量
|
||
environment:
|
||
- POSTGRES_DB=${POSTGRES_DB:-vnpy}
|
||
- POSTGRES_USER=${POSTGRES_USER:-vnpy}
|
||
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD:-vnpy_password_change_me}
|
||
- TZ=${TZ:-Asia/Shanghai}
|
||
- PGDATA=/var/lib/postgresql/data/pgdata
|
||
|
||
# 数据卷 - 挂载到 NAS stock 目录
|
||
volumes:
|
||
- ${DATA_DIR}/postgres:/var/lib/postgresql/data
|
||
|
||
# 网络
|
||
networks:
|
||
- vnpy-network
|
||
|
||
# 资源限制
|
||
deploy:
|
||
resources:
|
||
limits:
|
||
cpus: '1.0'
|
||
memory: 512M
|
||
|
||
# ============================================
|
||
# 网络定义
|
||
# ============================================
|
||
networks:
|
||
vnpy-network:
|
||
name: sanguo_vnpy_network
|
||
driver: bridge
|
||
|
||
# ============================================
|
||
# 使用说明
|
||
# ============================================
|
||
#
|
||
# 基本使用:
|
||
#
|
||
# 1. 首次使用前,配置环境变量:
|
||
# cp .env.example .env
|
||
# vi .env # 修改 DATA_DIR 等配置
|
||
#
|
||
# 2. 创建数据目录:
|
||
# mkdir -p ${DATA_DIR}/{data,logs,config,temp,redis,nginx}
|
||
#
|
||
# 3. 启动核心服务:
|
||
# docker-compose up -d
|
||
#
|
||
# 4. 启动所有服务(含 Nginx):
|
||
# docker-compose --profile nginx up -d
|
||
#
|
||
# 5. 启动所有服务(含 PostgreSQL):
|
||
# docker-compose --profile postgres up -d
|
||
#
|
||
# 管理命令:
|
||
#
|
||
# 查看日志:
|
||
# docker-compose logs -f vnpy
|
||
#
|
||
# 停止服务:
|
||
# docker-compose down
|
||
#
|
||
# 重启服务:
|
||
# docker-compose restart vnpy
|
||
#
|
||
# 进入容器:
|
||
# docker-compose exec vnpy bash
|
||
#
|
||
# 更新并重启:
|
||
# docker-compose up -d --build
|
||
#
|
||
# 数据备份:
|
||
# tar czf vnpy_backup_$(date +%Y%m%d).tar.gz ${DATA_DIR}
|
||
#
|
||
# ============================================
|