# 部署说明（Docker / 本地 / 反向代理）

本文档说明如何在服务器上运行本项目（Node + Express + Vite 前端构建）。

环境变量（必需）
- WEB_PORT: 前端/HTTP 服务端口（示例 80）
- WS_PORT: 后端 WebSocket 端口（示例 4000）
- MD5_PREFIX: 项目内部使用的 MD5 前缀
- DESIV: DES IV（字符串）
- SESSION_SECRET: express-session 的 secret

快速开始（Docker Compose）

1. 在项目根（带有 docker-compose.yml 的目录）创建或修改 `.env`，填入必需变量。示例：

```
WEB_PORT=80
WS_PORT=4000
MD5_PREFIX=change_me
DESIV=change_me
SESSION_SECRET=change_me
```

2. 构建并启动

```bash
docker compose up --build -d
```

3. 检查日志

```bash
docker compose logs -f
```

本地开发

- 前端：在 `src/` 目录使用 Vite 开发服务器
  - npm run dev
- 后端（静态 + API）：
  - npm run web （启动 web.js）
  - npm run os （启动 main.js，后台游戏服务）

反向代理（使用 Nginx）

示例 Nginx 配置（简化）

```
server {
  listen 80;
  server_name example.com;

  location / {
    proxy_pass http://127.0.0.1:80;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  }
}
```

持久化与备份

- SQLite 数据文件位于 `data/` 目录（`database.db`），请确保卷挂载或定期备份。
- 日志目录在 `log/`。

K8s / CI/CD

- Dockerfile 为多阶段，已将前端构建产物输出到 `www/`。
- 在 CI 中请先运行 `npm ci` 和 `npm run build`，然后构建镜像并推送到镜像仓库。

常见问题

- 端口冲突：确认 `WEB_PORT` 与宿主机端口映射一致
- 权限问题：确保 `data/`、`log/` 可由容器写入（host 的 umask/owner）
