starraid/star-raid/DEPLOY.md

64 lines
3.1 KiB
Markdown
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.

# Star Raid 部署指南
## 运行要求
- **Node.js ≥ 22.5**(使用内置 `node:sqlite`,零 npm 依赖,无需 `npm install`
- 配置:`star-raid/.env`**不进 git**,模板见 `.env.example`,复制后按机器修改);启动时自动加载,真实环境变量优先于 .env
- 数据库文件默认在 **`~/.starraid/starraid.db`(源码目录之外)**,由 `DATA_DIR` 配置
## 启动
```bash
cd star-raid
npm start # = node server/server.js自动读取 .env
# 或环境变量临时覆盖(优先级高于 .env
PORT=9000 node server/server.js
```
| 配置项(.env / 环境变量) | 默认 | 说明 |
|---|---|---|
| `PORT` | `8643` | 监听端口 |
| `HOST` | `0.0.0.0` | 监听地址 |
| `DATA_DIR` | `~/.starraid` | **数据库目录(勿放源码树内)**,支持 `~` 开头 |
| `COOKIE_SECURE` | 空 | **HTTPS 部署时必须设为 `1`**Cookie 加 Secure |
## 公网部署nginx + HTTPS 推荐)
```nginx
server {
listen 443 ssl;
server_name your-domain.com;
# ssl_certificate / certbot 申请
location / {
proxy_pass http://127.0.0.1:8643;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr; # 限流按真实 IP
}
}
```
启动时 `COOKIE_SECURE=1 PORT=8643 node server/server.js`,用 systemd/supervisor 守护进程。
## 已实现的安全措施
- 密码scrypt + 每用户随机盐 + 时序安全比较;登陆失败统一报错(不泄露账号是否存在),不存在账号也跑一次哈希防时序探测
- 会话32 字节随机 token 存服务端 SQLiteHttpOnly + SameSite=Lax7 天滑动续期,可吊销
- SQL 注入:全部 prepared statement图鉴 key 服务端白名单(`server/api.js` 的 `CODEX_KEYS`**新增装备时必须同步**
- 输入:用户名/邮箱/密码白名单校验;请求体 ≤16KBPOST 强制 `application/json`(配合 SameSite 防 CSRF
- 限流:注册 10 次/5 分钟/IP登陆 20 次/5 分钟/IP成绩上报 20 次/5 分钟/账号
- 静态资源白名单:只放行 `/`、`/css/`、`/js/``server/`、`data/`、`demo/` 不可访问),防目录穿越
- 安全头CSP / X-Frame-Options / X-Content-Type-Options / Referrer-Policy
## v1 边界(明确不做)
- 邮箱仅作唯一标识,**无验证邮件、无找回密码**(需 SMTP 服务,留 v2
- **反作弊仅为基础校验**(数值范围/限流):纯客户端游戏无法杜绝作弊,有志者改内存照样能伪造高分。如需严肃竞技,要加服务端回放校验(大工程)
- 星币/机库强化/机体解锁仍存浏览器 localStorage**不随账号同步**(跨设备冲突解决复杂,留 v2
- 排行榜 = 全服单榜,无分页/赛季
## 数据维护
- 数据库位置:`DATA_DIR`(默认 `~/.starraid`)下的 `starraid.db` + `-wal`/`-shm`
- **WAL 模式警告:备份/迁移前必须先合并日志**——停服后拷贝,或执行 `PRAGMA wal_checkpoint(TRUNCATE);` 再拷。直接拷主库文件会丢数据2026-08-06 已踩坑,测试数据全灭)
- 重置排行榜:停服后删除 `DATA_DIR` 下文件,重启自动重建空库