AI 原生的任務管理平台,程式撰寫 Agent 是一等公民。部署 PostgreSQL (pgvector)、 Go 後端與 Next.js 前端三個服務。

三個服務,不需要外部物件儲存。附件寫入後端的持久卷。
RESEND_API_KEY 留空,去 backend 服務日誌裡找驗證碼,搜尋
Verification code。ALLOW_SIGNUP=false 和
DISABLE_WORKSPACE_CREATION=true,然後重啟。daemon 跑在你自己的電腦上,不在 Zeabur。Multica 伺服器端只是 API、 WebSocket 和資料庫。
brew install multica-ai/tap/multica
multica setup self-host \
--server-url https://你的API網域 \
--app-url https://你的網域
兩個 URL 不一樣,這是刻意的。--app-url 是你登入用的 Web 應用;
--server-url 是 API 網域,CLI 在儲存設定前會先探測它的 /health。
這個路徑 Web 應用不轉發,所以把 --server-url 指向應用網域會讓 setup
回報伺服器無法連線。
瀏覽器兩種情況都不受影響:它始終留在應用網域上,包括 WebSocket,因此
Cookie 不會跨來源,COOKIE_DOMAIN 保持不設定。
瀏覽器端會跟隨你造訪的主機:Web 應用從自己的 origin 提供 /api、
/auth、/uploads 和 /ws,用戶端從 window.location 推導 wss://。
這一側沒有任何東西綁死網域,所以換網域後 UI 和 WebSocket 無需設定即可運作。
不會自動適應的是後端。它從不讀取請求的 Host —— 它輸出的每個公開 URL 都 來自環境變數。綁定新網域後,在 backend 服務上更新這些變數並重啟:
| 變數 | 設定為 | 不更新會怎樣 |
|---|---|---|
MULTICA_APP_URL | 新的應用 origin | 引導頁顯示舊網域;邀請和驗證碼郵件連到舊網域 |
FRONTEND_ORIGIN | 新的應用 origin | 上一項的後備值;CSRF origin 檢查 |
CORS_ALLOWED_ORIGINS | 新的應用 origin | 跨來源請求被拒絕 |
MULTICA_PUBLIC_URL | 新的 API origin | multica setup self-host 會把舊 URL 交給 daemon |
要帶協定、結尾不帶斜線。這幾項失敗時都是靜默的 —— 應用照常載入、
看起來一切正常。改完後打開 /api/config,確認 daemon_app_url 和
daemon_server_url 都是你實際使用的網域。
綁自訂網域之前有個坑值得先知道:MULTICA_PUBLIC_URL 預設是
${ZEABUR_API_URL},而這個內建變數即使在你另外綁了自訂網域之後,
仍然解析成自動產生的 *.zeabur.app 網域,不會跟隨自訂網域。
所以一旦你給後端掛上自己的網域,就要把 ${ZEABUR_API_URL} 換成寫全的
那個網域。
然後在每台跑 daemon 的機器上用新的 --server-url 重新執行
multica setup self-host —— CLI 會把 URL 存下來,不重新執行的話現有
daemon 會一直用舊的。
S3_BUCKET 留空,後端會回退到本機磁碟並寫入 /app/data/uploads 卷。
之後要換成 S3 相容儲存(R2 / MinIO / B2),在 backend 上設定
S3_BUCKET、AWS_ENDPOINT_URL、AWS_ACCESS_KEY_ID、
AWS_SECRET_ACCESS_KEY。如果 endpoint 瀏覽器連不到,還要加
ATTACHMENT_DOWNLOAD_MODE=proxy。已上傳的舊檔案不會自動遷移。
uploads 卷把 backend 限制在單一副本。需要多副本時先遷到 S3,並補上
REDIS_URL —— 沒有 Redis 時即時事件退化為行程內記憶體,認證速率限制關閉。
Multica 採用修改版 Apache License 2.0,附加條款涵蓋託管/嵌入式商業用途、 品牌標識和姓名標示要求。單一組織內部使用不需要商業授權;對第三方提供服務則需要。 移除 UI 中的 Multica 名稱、Logo 或版權資訊需要書面的品牌豁免。
原始碼:https://github.com/multica-ai/multica · 授權:https://github.com/multica-ai/multica/blob/main/LICENSE