# 把客厅搬上云 + 分享给朋友 · 部署指南

> 目标：①不依赖你的 Mac，7×24 在线 ②朋友能从外网参观 ③奥斯卡能真进来玩 ④成本压到接近 0。
> 已经建好的能力见本仓库 `server.py`（鉴权/角色/公开模式）+ `HANDOFF.md §5.37`。

## 0. 鉴权怎么运作（先懂这个）
- **本地（你 Mac，不设 PUBLIC_MODE）**：零鉴权，维持现状，手机照常用，**不受任何影响**。
- **公开模式（VPS 上设 `PUBLIC_MODE=1`）**：才启用门——
  - **厅主你**：`/api/login` 输 `OWNER_PASSWORD` → 完整权限。
  - **访客**：分享链接 `…/#k=<guest_token>` → 只读公共部分（**私聊/钱包/搭把手一律服务端拦死**）。
  - **奥斯卡**：`…/#k=<oscar_token>` → 能以「奥斯卡」身份在大群发言+逛，但看不了你私聊、不能冒充你。
- ⚠️ **绝不要在 Mac 本地设 PUBLIC_MODE**——否则你自己和手机也得登录。公开模式只给 VPS。

## 1. 选台云服务器（零依赖，几乎啥都能跑）
| 选项 | 月成本 | 备注 |
|---|---|---|
| **Oracle Cloud 永久免费层** | ¥0 | ARM VM，最省；注册稍麻烦 |
| **腾讯云/阿里云轻量** | ¥24–40 | 国内访问快，朋友体验好 |
| **Hetzner / DigitalOcean** | ~$5 | 海外稳定 |

要 Python3（云主机基本都自带）。**不用装任何第三方库**。

## 2. 把客厅搬过去
```bash
# 在 VPS 上建目录，把这几样拷过去（scp 或 git）：
#   server.py  web/  prompts/  API.env  lounge.db   （lounge.db=你的真实客厅数据，要带上）
# ⚠️ 搬过去后＝客厅在 VPS 上跑，你 Mac 那份就别同时再跑了（两份会各过各的、分叉）。
#    想保留 Mac 当本地开发，就让它用另一个库（DLR_DB=…），别和线上同一份。
```

## 3. 配置 API.env（在 VPS 上，加两行）
```
PUBLIC_MODE=1
OWNER_PASSWORD=你自己设一个强密码
# DEEPSEEK_API_KEY=… 等原有 key 照搬
```

## 4. 用 systemd 守护（开机自启+崩溃重启，等价你 Mac 的 launchd）
`/etc/systemd/system/dlr.service`：
```ini
[Unit]
Description=Dream Lounge
After=network.target
[Service]
WorkingDirectory=/home/你/DLR
ExecStart=/usr/bin/python3 /home/你/DLR/server.py
Environment=DLR_HOST=127.0.0.1 DLR_PORT=8771
Restart=always
[Install]
WantedBy=multi-user.target
```
```bash
sudo systemctl enable --now dlr
```
（`DLR_HOST=127.0.0.1` 只听本机，由隧道转发，不直接裸露公网端口。）

## 5. Cloudflare Tunnel：免费 HTTPS + 公网链接（不用开端口、不用买域名）
```bash
# 装 cloudflared，登录你的 Cloudflare（免费账号即可）
cloudflared tunnel login
cloudflared tunnel create dlr
# 把隧道指向本机 8771，绑一个免费子域（或你自己的域名）
cloudflared tunnel route dns dlr dlr.你的域名
cloudflared tunnel run --url http://127.0.0.1:8771 dlr
# 也做成 systemd 服务常驻
```
没有自己的域名也行：`cloudflared tunnel --url http://127.0.0.1:8771` 会直接给你一个临时 `*.trycloudflare.com` 公网 https 链接，先拿去测。

## 6. 拿分享链接发人
部署好、能 https 访问后：你登录 → 客厅顶栏点 **🔗** → 复制
- 👀 访客链接发给朋友（他们只能参观）
- 🎮 奥斯卡链接单独发奥斯卡（他能以奥斯卡身份玩）

换锁（旧链接作废）：删 `lounge.db` 的 app_state 里 `auth_guest_token` / `auth_oscar_token`，下次自动重生成。

## 7. 💰 成本 & 省钱
- 服务器：**¥0**（Oracle 免费）~ ¥30/月（国内轻量）
- LLM：DeepSeek 几乎免费；**隐性大头是 24/7 心跳**——没人看时它仍慢跑。要更省可调 `HEARTBEAT_IDLE_RANGE`（拉长离线间隔）+ 给 LLM 加日上限。多人**围观同一个厅**不额外烧钱（就一个实例）。
- 生图：按需 + `PHOTO_DAILY_CAP` 封顶（且现在欠费停着）。
- 隧道/域名：Cloudflare Tunnel **免费**；自己的域名可选 ~¥70/年。
- **合计：月成本能做到接近 ¥0。**

## 8. 安全红线（务必）
- 上公网**前**确认 `PUBLIC_MODE=1` 且 `OWNER_PASSWORD` 已设——否则没鉴权=你私聊裸奔。
- 用 HTTPS（Cloudflare 隧道自带）。cookie 带 `Secure`（HTTPS 下）+ `HttpOnly`。
- 想彻底下线分享：API.env 去掉 `PUBLIC_MODE` 即回到「本地零鉴权」语义（但那时别再对公网开放）。
