flowchart TD
    subgraph "🌐 DNS"
        D1["🅰️<br/>timer.red<br/>76.76.21.21<br/>▲ Vercel"]
        D2["🅰️<br/>uptime.timer.red<br/>服务器"]
        D3["🅰️<br/>backend.timer.red<br/>服务器"]
        D4["☁️<br/>static.timer.red<br/>Cloudflare R2"]
        D5["🅰️<br/>panel.timer.red<br/>76.76.21.21<br/>▲ Vercel"]
    end

    D1 -- "🌍 直接访问" --> Vercel["▲ Vercel<br/>76.76.21.21"]
    D4 -- "🌍 直接访问" --> R2["☁️ Cloudflare R2<br/>countdown-generator"]
    D5 -- "🌍 直接访问" --> Vercel["▲ Vercel<br/>76.76.21.21"]

    subgraph "🖥️ 云雨服务器"
        Caddy1["🟢 Caddy<br/>:80<br/>uptime.timer.red"]
        Caddy2["🟢 Caddy<br/>:80<br/>backend.timer.red"]
        Kuma["📈 Uptime Kuma<br/>172.17.0.5:3001"]
        PocketBase["🗄️ PocketBase<br/>172.17.0.4"]
    end

    D2 -- "➡️" --> Caddy1
    D3 -- "➡️" --> Caddy2
    Caddy1 -- "🔁 reverse_proxy" --> Kuma
    Caddy2 -- "🔁 reverse_proxy" --> PocketBase

uptime.timer.redbackend.timer.red 使用 CF 对实际 IP 🔐β MYxvLZrd4m/0zPAcFpARibLNMWoKpyIsXqckdagmDTP6GO8YX/jiiAY62vgEbxv4Ii8jIG3G3NX2392N 🔐 启用代理,然后通过 Caddy 根据域名反代到后面的具体服务上。