# gdcjgk.net Infrastructure

Last updated: 2026-07-10 (DNS 回迁阿里云完成)

## Architecture Overview

| | 本机（Hermes） | gdcjgk.net 主站 |
|---|---|---|
| **云厂商** | 腾讯云 Lighthouse (ap-beijing) | 阿里云 ECS |
| **公网 IP** | 120.53.228.229 | 47.120.3.199 |
| **内网 IP** | 10.2.0.15 | — |
| **运行服务** | Hermes (:8645), we-mp-rss (:8001), 文件服务 (:8088), Caddy (:80/:443) | FastAdmin CMS |
| **反向代理** | Caddy（`/etc/caddy/Caddyfile`） | — |
| **DNS 管理** | — | **阿里云云解析** (dns17/dns18.hichina.com) |

## DNS

- **2026-07-10**: NS 从 Cloudflare 迁回阿里云
- Nameservers: `dns17.hichina.com`, `dns18.hichina.com`
- 所有 DNS 记录在阿里云云解析控制台管理

### DNS Records (Current)

| 域名 | 类型 | 值 | 说明 |
|---|---|---|---|
| gdcjgk.net | A | 47.120.3.199 | 主站（阿里云 ECS） |
| www.gdcjgk.net | A | 47.120.3.199 | 同上 |
| rss.gdcjgk.net | A | 120.53.228.229 | → Caddy → :8001 (we-mp-rss) |
| callback.gdcjgk.net | A | 120.53.228.229 | → Caddy → :8645 (Hermes 企微回调) |
| bot.gdcjgk.net | A | 120.53.228.229 | → Caddy → :8645 |
| files.gdcjgk.net | A | 120.53.228.229 | → Caddy → :8088 (文件服务) |

## Caddy Reverse Proxy (Current)

Caddy 替代了 Nginx + Cloudflare Tunnel，直接提供公网反向代理。配置在 `/etc/caddy/Caddyfile`：

```caddyfile
{
    email admin@gdcjgk.net
}

http://rss.gdcjgk.net {
    reverse_proxy localhost:8001
    encode gzip
}

http://callback.gdcjgk.net, http://bot.gdcjgk.net {
    reverse_proxy localhost:8645
}

http://files.gdcjgk.net {
    reverse_proxy localhost:8088
}
```

### ⚠️ 待升级 HTTPS

当前 Caddy 跑在 HTTP 模式（`http://` 前缀）。DNS 已切直连，可以升级：

```bash
# 1. 编辑 /etc/caddy/Caddyfile，去掉所有 http:// 前缀
# 2. sudo systemctl restart caddy
# 3. Caddy 自动申请 Let's Encrypt 证书
```

## Cloudflare Tunnel (Vestigial)

- 隧道 ID: `40f60a3f-8a68-4ae3-bf7d-8d49951975ce`
- 运行方式: Docker 容器（非 systemd）
- 状态: **仍运行，但 DNS 不再指向 Cloudflare → 外部不可达**
- 操作: DNS 全面切直连后可以 `docker stop <container>` 停掉

### 历史 ingress（供参考）
```
rss.gdcjgk.net      → localhost:8001
callback.gdcjgk.net → localhost:8645
bot.gdcjgk.net      → localhost:8645
files.gdcjgk.net    → localhost:8088
```

## DNS Migration Verification Technique

迁移 DNS 后本地 `dig` 可能有缓存，验证步骤：

```bash
# 1. 用公共 DNS 查 NS（绕过本地缓存）
dig +short NS gdcjgk.net @8.8.8.8
dig +short NS gdcjgk.net @1.1.1.1

# 2. 直接查权威 NS 看记录
dig +short A rss.gdcjgk.net @dns17.hichina.com

# 3. 绕过 DNS 测试通路（--resolve 强制解析到目标 IP）
curl -s -o /dev/null -w "HTTP %{http_code}" \
  --resolve rss.gdcjgk.net:80:120.53.228.229 \
  http://rss.gdcjgk.net
```

## Lessons

- **NS 切完 ≠ 迁移完成**: DNS 记录需要在阿里云云解析手动重建，NS 只是改了「去哪查」
- **Cloudflare 代理的子域名切直连后**：clouflared tunnel 自动失效，DNS A 记录直接指向服务器 IP + Caddy 反代
- **Lighthouse 防火墙**: 控制台叫「防火墙」不叫「安全组」→ 轻量应用服务器 → 实例 → 防火墙
- **Caddy HTTPS 升级**: DNS 切直连后，去掉 `http://` 前缀 + restart → 自动获证
- **Caddy 2.6.x ZeroSSL bug**: 必须配 `acme_ca https://acme-v02.api.letsencrypt.org/directory`
