# 内网穿透调试

## 目标

先用调试模式验证 PWA 可以通过公网域名访问。

模式：

- VPS 运行 `frps`。
- 本机运行 Vite 开发服务。
- 本机运行 `frpc` 和 `cert` sidecar。
- `cert` 使用 Let's Encrypt 正式证书。
- `frpc` 通过 HTTPS 转发到本机 `6064`。

## 前置条件

- 有一个域名，例如 `cents.example.com`。
- 域名 A/AAAA 记录指向 VPS。
- VPS 开放 `80`、`443` 和 `7000`。
- VPS 的 `frps` 配置了 HTTP/HTTPS vhost 端口。

## 本机配置

调试模式不读取 `.env`，配置直接写在 `compose.dev.yaml`：

- `DOMAIN=dev.cents.homemade.net.cn`
- `FRPC_SERVER_HOST=119.28.12.24`
- `FRPC_SERVER_PORT=7000`
- `APP_HOST=host.docker.internal`
- `APP_PORT=6064`
- `APP_PROTOCOL=http`
- `TEST_MODE=false`

## 启动

启动 API 和前端：

```bash
npm run dev
```

再启动内网穿透：

```bash
docker compose -f compose.dev.yaml up -d
```

查看日志：

```bash
docker compose -f compose.dev.yaml logs -f frpc cert
```

## 验证

```bash
curl -I http://$DOMAIN/.well-known/
curl -vkI https://$DOMAIN
```

预期：

- `cert` 能完成 HTTP-01 校验。
- `/etc/letsencrypt/live/dev.cents.homemade.net.cn/` 中生成正式证书。
- 浏览器可以通过 `https://$DOMAIN` 访问本地 PWA。

## 生产模式

`.env` 留给生产模式使用：

```bash
cp .env.example .env
docker compose -f compose.pro.yaml up -d --build
```

不要提交真实 `.env`。

## 常见问题

- 证书申请失败：检查域名 DNS、VPS 80 端口、frps vhost HTTP 配置。
- HTTPS 访问失败：检查 frps 443 端口和 frpc 日志。
- 后端连不上：确认 `npm run dev` 已启动 API 和监听 `6064` 的 Vite 服务。
- frps 有 token：需要同步配置 frps 和 frpc，不要把真实 token 提交到仓库。
