# IMPRINT · 印记 — Cloud Build

> 可直接搬到 Linux 云服务器的多人隔离发布包。
> 游戏内容继承 First Contact Refined Build，正典、规则与结局保持不变。

2049 年。你是测试员 TST-0491。你有七天，和 Ada 系列最后一台未测试的仿生人
ADA-7714 对话。你说的每一句话都会在她的可塑神经形态基质上留下不可逆的痕迹。

## 云服务器部署（推荐）

服务器需要安装 Docker Engine 与 Docker Compose 插件。上传整个目录后执行：

```bash
chmod +x setup.sh
./setup.sh
```

首次运行会安全询问 DeepSeek API Key，并将它写入仅当前服务器可读的 `.env`。
随后访问：

```text
http://<服务器公网 IP>
```

若云厂商有安全组，请开放 `.env` 中 `PUBLIC_PORT` 对应的 TCP 端口（默认 80）。
玩家数据持久化在 `data/`，更新容器不会删除存档。

常用命令：

```bash
docker compose ps
docker compose logs -f app
docker compose restart
docker compose down
./backup.sh
```

## 本机或无 Docker 运行

在本目录创建 `.env`：

```env
LLM_PROVIDER=deepseek
LLM_MODEL=deepseek-chat
DEEPSEEK_API_KEY=sk-...
HOST=127.0.0.1
PORT=8791
```

然后执行：

```bash
./run.sh
```

打开 `http://127.0.0.1:8791`。后端与前端均为标准库/原生实现，无需 pip 或 npm。

## 云端特性

- 每个浏览器获得匿名 HttpOnly 玩家标识。
- 每位玩家的进行中周期、结局图库和跨周目残留独立保存。
- 同一玩家的请求串行，不同玩家可并发调用模型。
- 应用层与 Nginx 双层限流，避免恶意消耗模型额度。
- 64KB 请求体上限、路径校验、CSP 与常用安全响应头。
- `GET /api/health` 健康检查。
- `data/` 持久化与 `backup.sh` 备份。

## 存档

Docker 模式下，玩家数据位于：

```text
data/<anonymous_player_id>/
  profile.json
  run_<id>.json
```

不同玩家不会共享结局、残留信号或进行中的测试周期。浏览器删除 Cookie 后会被视为
新玩家，因此正式运营时应备份 `data/`。

## HTTPS

默认容器配置提供 HTTP，适合先通过公网 IP 验证。HTTPS 可由云厂商负载均衡、CDN，
或宿主机 Nginx + Certbot 提供。

HTTPS 启用后，将 `.env` 中以下两项改为 `1`，再运行
`docker compose up -d`：

```env
COOKIE_SECURE=1
ENABLE_HSTS=1
```

## 结构

```text
imprint_cloud/
  server.py        玩家隔离、限流、健康检查与静态服务
  engine/          MI、审查、阶段、幽灵回声、揭示与结局
  canon/           正典 prompt
  public/          游戏前端与媒体素材
  data/            Docker 持久化玩家数据
  deploy/          Nginx / systemd 配置样例
  compose.yaml     App + Nginx
  setup.sh         云服务器首次部署
  backup.sh        玩家数据备份
```

首局体验审计见 `ADVERSARIAL_AUDIT.md`。
