1 line
7.4 KiB
JSON
1 line
7.4 KiB
JSON
{"repo": "aishangwuji/lingxi", "files": {"docker-compose.yml": {"ea5eb9dbc6527dd592cee7605b9fa3b67ecace1e": {"t": 1785745242.3000634, "n": 1728, "h": "3ca92d61c80fb3c8", "c": "version: \"3.9\"\n\nservices:\n # ── 游戏后端 (Python WebSocket Server) ────────────────────\n game-server:\n build:\n context: .\n dockerfile: Dockerfile\n image: spirit-game-server:latest\n container_name: spirit-game-server\n ports:\n - \"127.0.0.1:8765:8765\" # WebSocket (仅本机 → nginx 反代)\n - \"127.0.0.1:9090:9090\" # Admin HTTP (仅本机访问)\n environment:\n # 监听配置\n - GAME_HOST=0.0.0.0\n - GAME_PORT=8765\n - ADMIN_HTTP_PORT=9090\n\n # LLM / DeepSeek — 必须设置!\n - DEEPSEEK_API_KEY=${DEEPSEEK_API_KEY:?请设置 DEEPSEEK_API_KEY 环境变量}\n - DEEPSEEK_BASE_URL=https://api.deepseek.com\n - NPC_MODEL=deepseek-v4-flash\n\n # 数据目录 (挂载卷持久化)\n - GAME_DATA_DIR=/app/game_data\n\n # 生产安全 — 管理令牌, 必须设置!\n - WS_ADMIN_TOKEN=${WS_ADMIN_TOKEN:?请设置 WS_ADMIN_TOKEN 环境变量}\n\n # 幕间间隔 (秒)\n - INTERMISSION_IDLE_THRESHOLD=300\n - INTERMISSION_IDLE_INTERVAL=120\n volumes:\n - game_data:/app/game_data\n restart: unless-stopped\n healthcheck:\n test: [\"CMD\", \"python\", \"-c\", \"import socket; s=socket.socket(); s.connect(('127.0.0.1', 8765)); s.close()\"]\n interval: 30s\n timeout: 10s\n retries: 3\n start_period: 15s\n\n # ── Nginx (静态文件 + WebSocket 反代) ────────────────────\n nginx:\n image: nginx:alpine\n container_name: spirit-game-nginx\n ports:\n - \"80:80\"\n # HTTPS 如需开启, 取消下面注释并配置 ssl 证书\n # - \"443:443\"\n volumes:\n - ./nginx.conf:/etc/nginx/conf.d/default.conf:ro\n # 前端构建产物 (从 builder 阶段复制出来, 或用 bind mount)\n - ./dist:/usr/share/nginx/html:ro\n # SSL 证书 (如需 HTTPS)\n # - ./ssl:/etc/nginx/ssl:ro\n depends_on:\n - game-server\n restart: unless-stopped\n\nvolumes:\n game_data:\n driver: local\n"}, "8713b434acc83c0e3c8be76c02de4ce2777d44dd": {"t": 1785749142.6223907, "n": 1728, "h": "3ca92d61c80fb3c8", "c": "version: \"3.9\"\n\nservices:\n # ── 游戏后端 (Python WebSocket Server) ────────────────────\n game-server:\n build:\n context: .\n dockerfile: Dockerfile\n image: spirit-game-server:latest\n container_name: spirit-game-server\n ports:\n - \"127.0.0.1:8765:8765\" # WebSocket (仅本机 → nginx 反代)\n - \"127.0.0.1:9090:9090\" # Admin HTTP (仅本机访问)\n environment:\n # 监听配置\n - GAME_HOST=0.0.0.0\n - GAME_PORT=8765\n - ADMIN_HTTP_PORT=9090\n\n # LLM / DeepSeek — 必须设置!\n - DEEPSEEK_API_KEY=${DEEPSEEK_API_KEY:?请设置 DEEPSEEK_API_KEY 环境变量}\n - DEEPSEEK_BASE_URL=https://api.deepseek.com\n - NPC_MODEL=deepseek-v4-flash\n\n # 数据目录 (挂载卷持久化)\n - GAME_DATA_DIR=/app/game_data\n\n # 生产安全 — 管理令牌, 必须设置!\n - WS_ADMIN_TOKEN=${WS_ADMIN_TOKEN:?请设置 WS_ADMIN_TOKEN 环境变量}\n\n # 幕间间隔 (秒)\n - INTERMISSION_IDLE_THRESHOLD=300\n - INTERMISSION_IDLE_INTERVAL=120\n volumes:\n - game_data:/app/game_data\n restart: unless-stopped\n healthcheck:\n test: [\"CMD\", \"python\", \"-c\", \"import socket; s=socket.socket(); s.connect(('127.0.0.1', 8765)); s.close()\"]\n interval: 30s\n timeout: 10s\n retries: 3\n start_period: 15s\n\n # ── Nginx (静态文件 + WebSocket 反代) ────────────────────\n nginx:\n image: nginx:alpine\n container_name: spirit-game-nginx\n ports:\n - \"80:80\"\n # HTTPS 如需开启, 取消下面注释并配置 ssl 证书\n # - \"443:443\"\n volumes:\n - ./nginx.conf:/etc/nginx/conf.d/default.conf:ro\n # 前端构建产物 (从 builder 阶段复制出来, 或用 bind mount)\n - ./dist:/usr/share/nginx/html:ro\n # SSL 证书 (如需 HTTPS)\n # - ./ssl:/etc/nginx/ssl:ro\n depends_on:\n - game-server\n restart: unless-stopped\n\nvolumes:\n game_data:\n driver: local\n"}}, "Dockerfile": {"ea5eb9dbc6527dd592cee7605b9fa3b67ecace1e": {"t": 1785747004.2259028, "n": 1172, "h": "1cbd41bfba164e3f", "c": "# ============================================================\n# Stage 1 — 构建前端 (TypeScript + Vite + Three.js)\n# ============================================================\nFROM node:22-alpine AS builder\n\nWORKDIR /app\n\n# 先装依赖 (利用 Docker 层缓存)\nCOPY package.json package-lock.json ./\nRUN npm ci\n\n# 构建\nCOPY tsconfig.json ./\nCOPY index.html ./\nCOPY src/ src/\nCOPY public/ public/\nRUN npm run build\n\n# ============================================================\n# Stage 2 — 运行后端 (Python + KuzuDB + WebSocket Server)\n# ============================================================\nFROM python:3.12-slim\n\nWORKDIR /app\n\n# 安装 Python 依赖\nCOPY server/requirements.txt .\nRUN pip install --no-cache-dir -r requirements.txt\n\n# 复制前端构建产物 (给 nginx 容器用, 也可用于自测)\nCOPY --from=builder /app/dist ./dist\n\n# 复制后端代码\nCOPY server/ ./server/\nCOPY run_server.py .\n\n# 确保 server/ 作为 Python 包可导入\nCOPY server/__init__.py ./server/__init__.py\n\n# 端口\n# 8765 — WebSocket (玩家连接)\n# 9090 — Admin HTTP (指标 / 管理)\nEXPOSE 8765 9090\n\n# 环境变量 (运行时可通过 docker-compose / docker run -e 覆盖)\nENV PYTHONUNBUFFERED=1\n\n# 启动命令\n# run_server.py 会读取 GAME_HOST / GAME_PORT / DEEPSEEK_API_KEY 等环境变量\nCMD [\"python\", \"run_server.py\"]\n"}, "8713b434acc83c0e3c8be76c02de4ce2777d44dd": {"t": 1785749142.8671432, "n": 1172, "h": "1cbd41bfba164e3f", "c": "# ============================================================\n# Stage 1 — 构建前端 (TypeScript + Vite + Three.js)\n# ============================================================\nFROM node:22-alpine AS builder\n\nWORKDIR /app\n\n# 先装依赖 (利用 Docker 层缓存)\nCOPY package.json package-lock.json ./\nRUN npm ci\n\n# 构建\nCOPY tsconfig.json ./\nCOPY index.html ./\nCOPY src/ src/\nCOPY public/ public/\nRUN npm run build\n\n# ============================================================\n# Stage 2 — 运行后端 (Python + KuzuDB + WebSocket Server)\n# ============================================================\nFROM python:3.12-slim\n\nWORKDIR /app\n\n# 安装 Python 依赖\nCOPY server/requirements.txt .\nRUN pip install --no-cache-dir -r requirements.txt\n\n# 复制前端构建产物 (给 nginx 容器用, 也可用于自测)\nCOPY --from=builder /app/dist ./dist\n\n# 复制后端代码\nCOPY server/ ./server/\nCOPY run_server.py .\n\n# 确保 server/ 作为 Python 包可导入\nCOPY server/__init__.py ./server/__init__.py\n\n# 端口\n# 8765 — WebSocket (玩家连接)\n# 9090 — Admin HTTP (指标 / 管理)\nEXPOSE 8765 9090\n\n# 环境变量 (运行时可通过 docker-compose / docker run -e 覆盖)\nENV PYTHONUNBUFFERED=1\n\n# 启动命令\n# run_server.py 会读取 GAME_HOST / GAME_PORT / DEEPSEEK_API_KEY 等环境变量\nCMD [\"python\", \"run_server.py\"]\n"}}}} |