tags: cofacts, —

20260324 會議記錄

:::info

Cofacts.ai 開發

https://github.com/orgs/cofacts/projects/12

主機遷移至 GCE


COS 下是可以在 home 底下做出大家都可讀寫的 rumors-deploy 但 home 底下的 script 不能執行 我連 docker-compose 都沒辦法好好跑,心好累 想回到 ubuntu XDDDD [name=mrorz]

新 Design document:https://docs.google.com/document/d/1sZ4jOsrZPvbJv4QjlMxgbqFsh_pTZNBRs-NbG-HU0rM/edit?pli=1&tab=t.t599bt7kwc4o#heading=h.351xoil28n2

flowchart TB
    subgraph Internet ["網際網路 (Internet)"]
        User(("👥 一般使用者<br>(瀏覽器/Cofacts.ai)"))
        LINE_Server(("📱 LINE 平台<br>(Webhooks)"))
        Admin(("🧑‍💻 系統管理員<br>(DevOps/RD)"))
    end

    subgraph CF ["Cloudflare 邊緣網路"]
        CF_Edge["☁️ Cloudflare<br>(WAF / DNS / DDoS 防禦)"]
    end

    subgraph GCP ["Google Cloud Platform (GCP)"]
        IAP["🛡️ Identity-Aware Proxy<br>(IAP)"]
        Ops_Dashboard["📊 Cloud Monitoring / Logging"]

        subgraph VPC ["VPC 網路 (Deny All Ingress / 暫時性外部 IP)"]
            subgraph GCE ["🖥️ GCE: e2-highmem-4 (Ubuntu 24.04 LTS)"]
                
                subgraph OS ["Linux OS 層"]
                    PAM["🔑 pam_group.so<br>(登入自動指派 docker 群組)"]
                    Ops_Agent["📈 Google Cloud Ops Agent<br>(收集 Metrics & Logs)"]
                end

                subgraph Docker ["🐳 Docker Compose V2 環境"]
                    Cloudflared["🚇 cloudflared<br>(Zero Trust Tunnel)"]
                    Site["🌐 Web (site-tw)<br>(SSR 前端站台)"]
                    API["⚙️ rumors-api<br>(核心 API Server)"]
                    Bot["🤖 line-bot-zh<br>(LINE 機器人)"]
                    ES["🗄️ Elasticsearch 9<br>(TF-IDF + Gemini 向量檢索)"]
                    Resolver["🔗 url-resolver<br>(記憶體限制 512m)"]
                    Cron["⏱️ cron-runner<br>(排程腳本執行)"]
                end
                
                Disk[("💾 Persistent Disk<br>(pd-balanced)<br>- /var/lib/docker<br>- /srv/rumors-deploy")]
            end
        end
    end

    %% End User Flow
    User -- "HTTPS (cofacts.tw 等)" --> CF_Edge
    LINE_Server -- "HTTPS (api.cofacts.tw)" --> CF_Edge
    
    %% Zero Trust Tunnel Flow (Outbound from GCE)
    Cloudflared -. "1. 主動建立出站連線<br>(Outbound)" .-> CF_Edge
    CF_Edge == "2. 安全路由流量至內網" ==> Cloudflared
    
    %% Internal Proxy Routing
    Cloudflared -- "HTTP 轉發" --> Site
    Cloudflared -- "HTTP 轉發" --> API
    Cloudflared -- "HTTP 轉發" --> Bot
    
    %% Internal Microservices
    Site -- "GraphQL 請求" --> API
    Bot -- "GraphQL 請求" --> API
    Cron -- "定期觸發任務" --> API
    Cron -. "自動更新 Image 並重啟" .-> Docker
    API -- "CRUD & HNSW 近似最近鄰比對" --> ES
    API -- "爬取與解析外部網頁" --> Resolver
    
    %% Admin Flow
    Admin -- "gcloud compute ssh" --> IAP
    IAP -- "經由安全通道 (Port 22)" --> PAM
    PAM -- "取得免 sudo 操作權限" --> Docker
    PAM -. "讀寫共用部署設定檔 (setgid)" .-> Disk
    Docker -. "掛載 Volume / 資料持久化" .-> Disk
    
    %% Monitoring Flow
    Docker -. "容器日誌與主機效能" .-> Ops_Agent
    Ops_Agent -- "即時監控數據" --> Ops_Dashboard
    
    %% Styling
    classDef external fill:#f9f9f9,stroke:#333,stroke-width:2px;
    classDef gcp fill:#e3f2fd,stroke:#1976d2,stroke-width:2px;
    classDef gce fill:#ffffff,stroke:#388e3c,stroke-width:2px;
    classDef container fill:#fff3e0,stroke:#f57c00,stroke-width:1px;
    
    class Internet,CF external;
    class GCP gcp;
    class GCE,VPC gce;
    class Cloudflared,Site,API,Bot,ES,Resolver,Cron container;

:::info TODO: 記得設定 swap :::

新 Devops manual https://github.com/cofacts/devops/pull/1/changes

小聚籌備