starraid/star-raid/DEPLOY.md
JOJO 9edc366cf9 图鉴测试模式+巡飞弹新武器+存档云同步+机库合并+默认无尽
①图鉴隐藏测试模式:连点标题'军'字10次开关,纯内存标志位全部军械可见可演示,不动SAVE.codex(persist/submitRun读它,动了会污染后端),刷新失效
②24件主武器说明文案全部替换(用户提供梗文案);演示页介绍单行显示、去掉类别前缀、删'实战模拟·自动驾驶'提示行
③新主武器'巡飞弹'(loiter):慢攻速追踪导弹(制导引擎新增maxSpd上限5保持中速),命中留火场(zones新kind:fire纯粒子火舌,无圆形区域)+分裂4枚小炸弹快爆;新精灵loms;CODEX_KEYS同步63
④存档云同步:星币/机体/选中机体/永久强化/本地纪录上服务端(player_state表+POST /api/state+vState白名单清洗);login/me/register响应带state;客户端persist()钩子防抖600ms自动上传;服务端整体替换本地防串号,登出全清;老账号首登自动上传本地存档迁移
⑤机体选择/购买从出击准备并入机库强化(buildShips);出击默认无尽模式
服务端已重启生效;/api/state全链路在独立测试库curl验证通过(合法推送/回读/非法拦截清洗/401)
2026-08-06 12:15:17 +08:00

64 lines
3.3 KiB
Markdown
Raw Permalink 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
- **反作弊仅为基础校验**(数值范围/限流):纯客户端游戏无法杜绝作弊,有志者改内存照样能伪造高分。如需严肃竞技,要加服务端回放校验(大工程)
- 星币/机体/永久强化/本地纪录已上服务端(`POST /api/state``player_state` 表2026-08-06登陆时服务端存档整体替换本地最后登录的设备覆盖云端无冲突合并音乐/音效开关等设置仍存 localStorage 不同步
- 排行榜 = 全服单榜,无分页/赛季
## 数据维护
- 数据库位置:`DATA_DIR`(默认 `~/.starraid`)下的 `starraid.db` + `-wal`/`-shm`
- **WAL 模式警告:备份/迁移前必须先合并日志**——停服后拷贝,或执行 `PRAGMA wal_checkpoint(TRUNCATE);` 再拷。直接拷主库文件会丢数据2026-08-06 已踩坑,测试数据全灭)
- 重置排行榜:停服后删除 `DATA_DIR` 下文件,重启自动重建空库