Coolify 與 Claude Code:將專案部署到自己的 VPS
Markdown安裝 Coolify、連結 GitHub、部署 Next.js、設定網域與 HTTPS、MCP、VPS 需求及疑難排解。價格以美元計價,並保留原始限制。
閱讀全文
Ailoot 文件 — 使用這項服務的參考資料。
2026 年的平台限制與付款條件
重點摘要
免費方案會一直可用,直到你第一次超出限制;之後就需要國際信用卡。Heroku 在 2022 年對所有人關閉免費方案,並於 2026 年 2 月進入維護模式。使用自架 Coolify 時,伺服器由你擁有;沒有按席位計費,也不會被供應商綁定。
2026 年常見的氛圍編碼情境:你在 Cursor 或 Claude Code 花一個晚上打造 MVP,將它移到 GitHub 儲存庫,開啟 vercel.com → 連結儲存庫 → 進入訂閱畫面 → 輸入信用卡 → 收到 Transaction declined。
這不是錯誤,也不是暫時性服務中斷。
Railway、Render、Heroku——情況都一樣。Heroku 確實在 2022 年對所有人關閉免費方案,並於 2026 年 2 月進入維護模式——不再推出新功能,也不再簽訂新的 Enterprise 合約。對使用不受支援信用卡的使用者來說,這代表:「大門關上了;只能透過收取 20% 手續費的中介繞道。」
你可以透過哈薩克的虛擬 Visa 卡或企業付款服務付款。但這代表價格增加 20%、每筆交易多花 30 分鐘,而且付款處理商發現國家不符時,你的帳戶可能遭到封鎖。
原始範例包含三次嘗試——分別使用 Vercel Pro、Railway 和 Render。
Coolify 是什麼?自架平台如何運作?
重點摘要
Coolify 是開放原始碼、可自行託管的 PaaS,也是 Heroku、Vercel 和 Netlify 的直接替代方案。只要在任何執行 Ubuntu 的 VPS 上輸入一個 curl 指令即可安裝。底層使用 Docker + Traefik 做反向代理,並使用 Let's Encrypt 提供 HTTPS。它支援 GitHub 整合、自動部署的 webhook、S3 備份,以及 280 多種一鍵安裝服務(PostgreSQL、Redis、MinIO)。自架版本永遠免費且沒有任何限制。它在 GitHub 上有 55,800 顆星,採用 Apache-2.0 授權。
Coolify 是以 Laravel + Docker 建置的開放原始碼專案,可將任何空白 VPS 變成應用程式部署平台。安裝一次 Coolify,之後便可透過網頁介面完成所有操作:連結 GitHub、選擇儲存庫,然後按下 Deploy。
官方文件簡潔而精確地說明:
Coolify 是 Heroku / Netlify / Vercel 等服務的開放原始碼、自架替代方案。
Coolify 底層由四個部分組成:
- 使用 Laravel 12 + Livewire 3 + Tailwind v4 建置的網頁介面 — 管理應用程式的儀表板。
- Docker + Docker Compose — 每個應用程式都在容器中執行,彼此隔離。
- 反向代理(Traefik 或 Caddy) — 接收傳入的 HTTP/HTTPS 流量,並轉送至容器。
- Let's Encrypt 整合 — 自動為所有網域簽發並更新 SSL 憑證。
讓 Coolify 在功能上可與 Vercel 相比的主要功能:
| 功能 | Vercel | Coolify |
|---|---|---|
| git push 時自動部署 | ✅ | ✅(透過 GitHub webhook) |
| 免費 HTTPS | ✅ | ✅(Let's Encrypt) |
| PR 預覽部署 | ✅ | ✅(透過 GitHub App) |
| 環境變數 UI | ✅ | ✅ |
| 資料庫備份 | ❌(沒有自有資料庫) | ✅(備份至相容 S3 的儲存空間) |
| PostgreSQL / Redis / MongoDB | 每個 $20+/月 | ✅ 一鍵安裝,免費 |
| 排程工作(cron) | ❌ | ✅(cron 語法) |
| 按席位計費 | $20/席位/月 | 無 |
| 供應商綁定 | 高(Edge Functions、ISR) | 零(使用自己的 Docker) |
| 全球 CDN | ✅ | ❌(只有自己的 VPS) |
Coolify 開箱即用未提供的只有全球 CDN。這就是實話。如果你的專案面向全球使用者,且需要降低美國和歐洲使用者的延遲,可在前面加上 Cloudflare;靜態內容可免費使用。
價格:自架版本永遠免費,應用程式、伺服器或部署數量都不受限制。Coolify Cloud 每月 $5,可管理 2 台伺服器;每增加一台再加 $3——但伺服器仍由你擁有;Coolify Cloud 只負責託管儀表板。
最新版本是 v4.1.0,於 May 18, 2026 發布。新功能包括 Beta 版 Railpack 建置套件、稽核記錄、部署間的設定差異,以及原生 MCP 端點(唯讀)。來源:GitHub 發行版本。
2026 年該選哪一種 VPS 來執行 Coolify?
重點摘要
Coolify 最低需求為 2 vCPU、2 GB RAM、30 GB SSD,以及 Ubuntu LTS(20.04、22.04 或 24.04)。這類 VPS 足以同時舒適地執行 3–5 個氛圍編碼專案。
Coolify 的最低需求直接列於官方文件:
| 參數 | 最低需求 | 建議規格 |
|---|---|---|
| CPU | 2 核心 | 2–4 核心 |
| RAM | 2 GB | 4 GB(為建置預留餘裕) |
| 儲存空間 | 30 GB | 50–80 GB(供映像檔與資料庫使用) |
| 架構 | AMD64 或 ARM64(64-bit) | AMD64 |
| 作業系統 | Ubuntu LTS 20.04 / 22.04 / 24.04 | 22.04 LTS |
| Root | 必須 | 使用 SSH 金鑰,而非密碼 |
最低規格——2 GB RAM——是硬性下限。若只有 1 GB,安裝程式會執行到 Docker,接著遇到 OOM(記憶體不足)而卡住。不要在 RAM 上省錢。
價格來源:Timeweb Cloud、FirstVDS 和 Selectel。
如果需要更高效能(100 GB 資料庫、多個 Postgres 執行個體),可選擇 Aeza Dedicated。
不該選擇的方案:
- 512 MB–1 GB RAM 的共享 VPS — 連 Coolify 都跑不動。這適合放在 nginx 上的靜態網站,不適合 PaaS。
除了設定部署,你也想打造一套讓 Claude 更可靠的設定嗎?Coolify 是執行工具,但若沒有結構化的上下文(CLAUDE.md、第二大腦和上下文工程),Claude 在長任務中仍會產生幻覺。完整設定包含這三者:AI 分身 + 第二大腦 + 上下文工程——這個組合能讓 Claude 從「會產生幻覺的助理」變成可靠的工具。
如何在 5 分鐘內安裝 Coolify
重點摘要
安裝只需要執行文件中的一個 curl 指令。啟動後,網頁介面會出現在連接埠 8000。你可以在那裡建立第一個管理員使用者,並看到空白儀表板。從空白 Ubuntu 安裝到 Coolify 執行,實際需要 5–7 分鐘,其中 3–4 分鐘用於 apt-get install docker。安裝腳本會取得必要相依項目並自行設定 Docker;你只需等它完成。
步驟 1. 透過 SSH 連線至 VPS。
在供應商處建立 VPS 後,伺服器 IP 位址和 root 密碼會出現在電子郵件或控制台中。從本機電腦連線:
ssh root@1.2.3.4
如果供應商提供 SSH 金鑰而非密碼,請使用 -i path/to/key 連線。以下假設你使用的是全新安裝的 Ubuntu 22.04 或 24.04 LTS。
步驟 2. 執行 Coolify 安裝指令。
來自官方文件的一個指令:
curl -fsSL https://cdn.coollabs.io/coolify/install.sh | sudo bash
腳本會執行三件事:
- 檢查系統(Ubuntu LTS?root?AMD64?)
- 如果尚未安裝 Docker 和 Docker Compose,就進行安裝
- 下載 Coolify 映像檔(
coolify/coolify、coolify/realtime、traefik),並透過 docker-compose 在背景執行
這需要 3–5 分鐘。你會看到 apt-get 記錄快速捲動,接著是 docker pull。看到 Coolify v4.1.0 is now running 時,進入步驟 3。
步驟 3. 開啟網頁介面。
在瀏覽器中開啟:
http://1.2.3.4:8000
Coolify 會顯示設定精靈——建立第一位使用者的表單。輸入電子郵件和密碼並儲存。這位使用者會自動成為管理員;目前不需要其他使用者。
儲存後,你會進入空白儀表板:左側是含有 Resources / Projects / Servers / Sources / Notifications / Settings 的側邊欄,中央則提示 “Add your first resource.”
步驟 4. 在供應商的防火牆(而非 UFW)開啟連接埠。
Coolify 已經在執行,但從外部只能連到連接埠 8000(儀表板)。若要讓使用者連到你的應用程式,就必須開啟連接埠 80(HTTP)和 443(HTTPS):
| 連接埠 | 用途 |
|---|---|
| 22 | 透過 SSH 存取伺服器 |
| 80 | 接收 HTTP 流量,供 Let's Encrypt 驗證使用 |
| 443 | 接收使用者的 HTTPS 流量 |
| 8000 | Coolify 儀表板(設定自訂儀表板網域後會關閉) |
官方文件提到一個重要陷阱:
Docker 使用以 NAT 為基礎的 iptables 規則,可能會繞過 UFW 等傳統 Linux 防火牆。
也就是說,即使啟用 UFW 並關閉所有連接埠,Docker 仍會透過 iptables 對外公開容器。UFW 在這裡不起作用。解法是在供應商的控制台開啟和關閉連接埠,而不是透過 UFW。在 Timeweb / Selectel / Aeza,請前往網頁主控台的「Network → Firewall」區段操作。
步驟 5(選用)。將儀表板綁定至你的網域。
若要造訪 https://coolify.example.com 而非 http://1.2.3.4:8000,請建立 DNS A 記錄 coolify.example.com → 1.2.3.4,接著在 Coolify 前往 Settings → Instance Settings → Instance Domain,輸入子網域並儲存。Coolify 會申請 Let's Encrypt 憑證,並在一分鐘後透過 HTTPS 重新載入儀表板。
之後,你可以在防火牆中關閉連接埠 8000——儀表板會透過標準連接埠 443 上的 HTTPS 提供服務。
如何連結 GitHub:App 還是 PAT?
重點摘要
Coolify 支援兩種連結 GitHub 的方式:GitHub App(建議)和 Personal Access Token(PAT)。請使用 GitHub App:透過精靈設定只需 5 分鐘、PR 預覽功能可正常運作,而且可以精細設定存放庫層級的權限範圍。PAT 是過時的選項,適用於舊有情境;它沒有預覽部署功能,而且可能使所有儲存庫都面臨全域存取風險。官方文件明確指出:「95% 的使用者,GitHub App 都是正確選擇。」
在 Coolify 中前往 Sources → + Add → GitHub App。Coolify 會顯示三個畫面的設定精靈:
- 名稱與說明 — 為來源命名(輸入
github-main),也可選擇加入說明。 - Configure on GitHub — 按鈕會帶你前往 GitHub.com,並自動開啟權限設定正確的 GitHub App 建立表單。
- Confirm — 從 GitHub 返回後,按一下 “Save.”
在第二個步驟中,GitHub 會要求你確認 Coolify 申請的權限:
| 權限 | 層級 | 用途 |
|---|---|---|
| Contents | 唯讀 | 複製儲存庫 |
| Pull Requests | 讀寫 | 建立預覽部署並在 PR 上留言 |
| 電子郵件地址 | 唯讀 | 識別提交 |
| Metadata | 唯讀 | 列出儲存庫 |
這些是最低限度的權限——GitHub App 看不到你的私密金鑰,不能寫入 main,也無法存取你未明確連結的儲存庫。
官方文件指出:
Personal Access Token(PAT)是舊方法;我不建議使用。缺點如下:
- PAT 能全域存取你的所有儲存庫(包括私人儲存庫)
- PR 預覽無法使用——這項功能只有 GitHub App 才有
- Token 的有效期限很長(90 天、一年或永久)——若外洩,後果不堪設想
只有在你使用組織儲存庫,且安全政策禁止 GitHub Apps、又沒有替代方法時,才使用 PAT。
在 Coolify 中儲存來源後,你會在儀表板看到 GitHub App 和已連結的儲存庫清單。建立新應用程式時,只要按一下就能選取其中任一個。
使用 Claude Code 部署 Next.js 專案的 6 個步驟
重點摘要
從空白的 Claude Code 設定到上線網站的完整流程:1) 在空資料夾中執行 claude、描述專案,Claude 就會產生程式碼;2) 執行 git init && git remote add(Claude 也可以透過 slash 指令自行完成);3) 推送到 GitHub;4) 在 Coolify 中選擇「+ New Resource → Application」並選取儲存庫;5) 新增環境變數;6) 按下 Deploy。Coolify 會偵測這是 Next.js、選擇 Nixpacks 建置套件,在 3–5 分鐘內建置 Docker 映像檔,並提供暫用網域,開箱即用支援 HTTPS。
步驟 1. 在空資料夾中向 Claude Code 描述專案。
mkdir my-vibe-app
cd my-vibe-app
git init
claude
在工作階段中輸入:
建立一個 Next.js 14 app router 專案:
- 首頁列出使用者清單
- /api/users 端點從資料庫傳回陣列
- 使用 Prisma 連接 Postgres
- 使用 Tailwind 設定樣式
- 建立含有 DATABASE_URL 的 .env.example
- 建立 README.md,說明如何執行專案
Claude 會產生檔案結構、package.json、prisma/schema.prisma 和 .env.example。也可以要求:
為正式環境建置建立 Dockerfile 和 .dockerignore。
這是選用步驟——即使沒有 Dockerfile,Coolify 也會使用 Nixpacks 建置。但 Dockerfile 能讓你控制建置流程,對較大型專案而言也更快。
步驟 2. 建立 GitHub 儲存庫並推送。
你可以透過 GitHub UI 手動操作 + git remote add origin ...,但 Claude Code 也能自行處理:
/commit-push-pr 使用 Claude Code 產生的初始 Next.js 應用程式
或直接說:「將所有內容提交,並推送到我帳戶下名為 my-vibe-app 的新儲存庫。」Claude 會使用 gh CLI 建立私人(或公開)儲存庫並首次推送。來源:官方 Claude Code 指令。
步驟 3. 在 Coolify 中建立 Application。
在 Coolify 儀表板中,按一下 + New → Application。表單會開啟:
- Source — 選取
github-main(你在前一個 H2 章節中連結的 GitHub App) - Repository — 從清單選取
my-vibe-app - Branch —
main - Build Pack — Coolify 會自動偵測。若有 Dockerfile,就會使用
dockerfile;否則會使用nixpacks。你可以手動覆寫。 - Domain — 目前先保留建議值(
xxx.1-2-3-4);這是暫用網域,稍後會換成自己的 - Port — Next.js 預設為
3000
儲存。
步驟 4. 新增環境變數。
在剛建立的應用程式中,開啟 Environment Variables 分頁。逐一新增變數:
DATABASE_URL=postgresql://user:pass@db-host:5432/mydb
NODE_ENV=production
ANTHROPIC_API_KEY=sk-ant-...
如果沒有資料庫,可以直接在 Coolify 建立:+ New → Database → PostgreSQL。Coolify 會在 30 秒內啟動 Postgres 容器,並提供格式為 postgresql://postgres@postgres-xyz:5432/postgres 的內部 DATABASE_URL——將它填入應用程式。
所有變數都會在 Coolify 資料庫中加密,且不會顯示在建置記錄中。
步驟 5. 按下 Deploy。
右上角有一個藍色 Deploy 按鈕。即時記錄會顯示在 Logs 分頁:
[stage: clone] Cloning '<repository-url-from-github>'
[stage: build] Detected Next.js, using Nixpacks
[stage: build] Installing Node 20, npm 10
[stage: build] npm install (245s)
[stage: build] npm run build (87s)
[stage: deploy] Creating container my-vibe-app-xyz
[stage: deploy] Container started, health check passed
[stage: proxy] Traefik routing configured for xxx.1-2-3-4
[stage: ssl] Let's Encrypt cert issued for xxx.1-2-3-4
第一次建置需要 3–5 分鐘(會下載 Node 基礎映像檔並安裝相依項目)。之後因為 Docker 層快取,建置只需 60–90 秒。
狀態變成 Running 時,複製 Coolify Domains 欄位顯示的應用程式 URL,開啟該確切網址。下文以 <app-url-from-coolify> 表示它;尖括號標籤是佔位文字,不是真實地址。應該會看到首頁,而且已開箱即用支援 HTTPS。這是免費的暫用萬用字元 DNS 網域,可將包含 IP 位址的子網域解析至該 IP(例如 1-2-3-4 解析至 1.2.3.4)。Coolify 使用這類網域,讓你不用設定自己的 DNS 就能立即開啟網站。
步驟 6. 確認一切正常。
在上一步應用程式 URL 後加入 /api/users,例如 <app-url-from-coolify>/api/users,勿重複斜線。這是步驟 1 建立的 JSON 端點,根網址則是首頁。如果發生 500 錯誤,Logs 分頁中會顯示堆疊追蹤。首次部署最常見的問題是 DATABASE_URL 指向不存在的資料庫。請在 Coolify 建立 PostgreSQL 執行個體(參見上方步驟 4),然後替換 DATABASE_URL,即可修正。
從訂購 VPS 開始算起,15 分鐘。原始範例在全新伺服器上花了 12–18 分鐘完成這套流程。
如何設定自訂網域與 HTTPS
重點摘要
設定自訂網域只要 3 個步驟:建立指向伺服器 IP 的 DNS A 記錄,在 Coolify 設定中輸入自己的網域取代暫用網域,啟用自動 HTTPS,然後按下 Redeploy。DNS 傳播後 2–3 分鐘,Let's Encrypt 就會自動簽發 SSL 憑證(DNS 通常需要 5–30 分鐘傳播)。關鍵條件是按下 Redeploy 時 DNS 已能解析;否則 Let's Encrypt 驗證會失敗,你必須等 12 分鐘才能再試。
步驟 1. 在網域註冊商控制台建立 DNS A 記錄。
原始範例使用託管於 Reg.ru、Beget 或 Timeweb 的網域。流程相同:
| 記錄類型 | 名稱 | 值 |
|---|---|---|
| A | app(根網域使用 @) | 1.2.3.4(伺服器 IP) |
儲存後開啟主控台並檢查:
dig app.example.com +short
# 應傳回 1.2.3.4
如果沒有傳回任何內容,或 IP 不同,代表 DNS 尚未傳播。請等候 5–30 分鐘。
步驟 2. 在 Coolify 輸入你的網域。
在應用程式中開啟 Configuration → General 分頁。在 Domains 欄位中,將從 Coolify 複製的暫用應用程式 URL,換成 https://app.example.com(實際請用自己已設定網域)。啟用 Automatic HTTPS(通常預設已啟用)。
儲存並按下 Redeploy。
步驟 3. 等待 Let's Encrypt 憑證。
建置記錄會顯示:
[stage: ssl] Requesting Let's Encrypt cert for app.example.com
[stage: ssl] HTTP challenge sent to /.well-known/acme-challenge/xxx
[stage: ssl] Validation passed, cert issued
[stage: ssl] Cert installed, HTTPS enabled
2–3 分鐘後,你的網站就能透過 https://app.example.com 連線,網址列會顯示綠色鎖頭。
Let's Encrypt 可能出現的問題(見官方疑難排解指南列出的前三個問題):
- 防火牆關閉了連接埠 80。 Let's Encrypt 使用 HTTP challenge 驗證——會將請求傳送至
http://app.example.com/.well-known/acme-challenge/xxx。連接埠 80 未開啟就無法通過驗證。請在供應商的防火牆中開啟。 - Cloudflare proxy 已啟用(橘色雲朵)。 它會攔截 Let's Encrypt 請求並傳回自己的佔位頁面,導致驗證失敗。解法是切換至「DNS only」(灰色雲朵),或透過 Cloudflare API 設定 DNS-01 challenge。
- DNS 尚未傳播。 如果你在 30 秒前才建立 A 記錄,便立刻按下 Redeploy,Let's Encrypt 將無法找到網域。請等候 5–30 分鐘,讓 DNS 傳播至各伺服器。
Let's Encrypt 的速率限制:單一網域每小時最多失敗 5 次,每 12 分鐘恢復一次額度。如果達到限制,不要連續按 Redeploy 10 次;請檢查記錄、修正問題,並在 12 分鐘後再試。
Claude Code 如何透過 MCP 管理 Coolify?
重點摘要
透過 Model Context Protocol,Claude Code 可以直接存取 Coolify API——你可以說「部署這個應用程式」,啟動建置、檢查狀態、讀取記錄或更新環境變數。共有三種選項:forsonny/Coolify-MCP-Server(基本功能,7 種操作類別)、dazeb/coolify-mcp-enhanced(額外提供 15 種以上工具,包含一鍵部署資料庫),以及 ajmcclary/Coolify-Manager(以官方 CLI 為基礎的 Claude Skill)。從 v4.1.0(May 18, 2026)起,Coolify 提供原生 MCP 端點,不需第三方伺服器——但目前只能唯讀。
Model Context Protocol(MCP)是 Anthropic 制定的標準,讓 Claude Code 能與外部系統通訊(詳情請參閱MCP 伺服器指南)。連結 MCP 伺服器後,Claude 就會取得一組可呼叫的工具。Coolify 有三種現成伺服器,另有一種原生選項。
選項 1. forsonny/Coolify-MCP-Server-for-Claude-Code——基本版。
可執行的操作:
- 應用程式:建立、啟動、停止、重新啟動
- 服務:列出、建立、啟動/停止/重新啟動
- 部署:檢視執行中的部署、依 UUID 擷取
- 團隊與成員:列出、取得資訊
- SSH 金鑰:列出、建立
- 環境變數:對應用程式和服務執行完整 CRUD
- 伺服器資訊:每台伺服器的網域、健康狀態、版本
安裝:
git clone '<OFFICIAL_URL>'
cd Coolify-MCP-Server-for-Claude-Code
npm install
npm run build
# 在 .env 中:
# COOLIFY_BASE_URL=https://coolify.example.com
# COOLIFY_API_TOKEN=[來自 Coolify Settings → API Tokens]
npm run setup # 自動設定 Claude Code
接著,你可以在 Claude Code 中輸入:
顯示 Coolify 中 my-vibe-app 應用程式的狀態,以及最近 3 次部署。
Claude 會傳回一個表格。
選項 2. dazeb/coolify-mcp-enhanced——增強版(推薦)。
它在基本功能上新增了:
- 一鍵部署 PostgreSQL / Redis / MinIO——透過 AI 要求「幫我設定 Postgres」,它就會建立容器並傳回 DATABASE_URL
- 即時監控與資源使用量——即時查看各應用程式的 CPU/RAM
- 大量更新 env 設定——用一個指令更新 20 個變數
- Docker Compose 支援——部署多服務應用程式
Claude Code 的設定(專案根目錄中的 .mcp.json):
{
"mcpServers": {
"coolify-enhanced": {
"command": "node",
"args": ["/path/to/coolify-mcp-enhanced/dist/index.js"],
"env": {
"COOLIFY_ACCESS_TOKEN": "your-token-here",
"COOLIFY_BASE_URL": "https://coolify.example.com"
}
}
}
}
選項 3. ajmcclary/Coolify-Manager——以 CLI 為基礎的 Claude Skill。
它不是 MCP 伺服器,而是包裝官方 Coolify CLI 的 Claude Code Skill。包含:
- 服務和容器健康診斷
- SSL 憑證診斷
- 多執行個體支援(如果你有多台 Coolify 伺服器)
- 疑難排解操作指引
安裝:下載這項 skill,並放入 ~/.claude/skills/coolify-manager/。Claude Code 會自動載入,並在適合的任務中提供使用。
選項 4(2026 年 5 月新增)。Coolify v4.1.0 的原生 MCP。
v4.1.0 於 May 18, 2026 發布的變更紀錄提到:
新增執行個體層級的 MCP 支援,提供唯讀工具存取 Coolify 資源及 API/UI。
Coolify 現在有自己的 MCP 端點——你可以不透過第三方伺服器,直接連結 Claude Code。目前它只能唯讀(應用程式清單、狀態、設定),不支援修改操作。不過,這已足以完成「告訴我基礎架構的狀況」等多數任務。
透過 .mcp.json 連結:
{
"mcpServers": {
"coolify-native": {
"url": "https://coolify.example.com/api/v1/mcp",
"headers": {
"Authorization": "Bearer <your-api-token>"
}
}
}
}
等待原生 MCP 在 v4.2 或 v4.3 開放完整寫入權限——Coolify 團隊承諾會在 2026 年底前完成。
首次部署常見的 5 個陷阱,以及如何避免
重點摘要
首次部署最常見的錯誤包括 RAM 不足、連接埠 80 關閉、Cloudflare proxy 造成 Let's Encrypt 失敗、UFW 無法保護 Docker,以及選擇 PAT 而非 GitHub App。官方文件都涵蓋了這些問題,但沒有實際經驗時很容易遇上。以下是根據首次安裝 Coolify 的原始經驗整理的 5 點檢查清單。
陷阱 1:RAM 少於 2 GB——安裝因 OOM 而失敗。
症狀:curl install.sh 執行到 docker pull coolify/coolify,卡在 70%,接著程序因 Killed (signal 9) 而遭終止。dmesg | tail 記錄會顯示 Out of memory: Killed process。
解法:
# 暫時建立 4 GB swap 檔案以解決問題
sudo fallocate -l 4G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
長期來看,請升級至 4 GB RAM。Coolify 可使用 swap,但大型 Next.js 專案的建置可能會失敗。
陷阱 2:UFW 已啟用,但 Docker 仍會開啟連接埠。
症狀:你啟用 UFW,並關閉除了 22 之外的所有連接埠,但應用程式仍能透過網際網路從某個隨機連接埠(例如 3000)存取。
根據官方文件,原因是:
Coolify 執行於 Docker 之上,而 Docker 使用以 NAT 為基礎的 iptables 規則,可能繞過 UFW 等傳統 Linux 防火牆。
解法:使用供應商控制台中的防火牆,而非 UFW。Timeweb / Selectel / Aeza 有「Firewall」或「Network → Firewall」區段,可在虛擬網路層級設定規則——封包到達 Docker 前就會先套用這些規則。
另一種方法是使用 ufw-docker,這是一個修改 UFW 以支援 Docker 的腳本。不過,在控制台中按幾下比這個方法簡單。
陷阱 3:Cloudflare proxy(橘色雲朵)會讓 Let's Encrypt 失效。
症狀:按下 Redeploy 後,記錄顯示 Let's Encrypt validation failed - challenge returned 403。
原因:Cloudflare 代理 Let's Encrypt 的 HTTP 請求,並傳回自己的頁面,而非你的 challenge 檔案。
解法——二選一:
- 切換至「DNS only」(Cloudflare 中的灰色雲朵)。缺點:你會失去 Cloudflare CDN 和防護功能。
- 透過 Cloudflare API 設定 DNS-01 challenge。 在 Coolify 中前往 Settings → SSL Configuration,選擇 Cloudflare 供應商,並輸入具有 Zone:Read 和 DNS:Edit 權限的 API token。Let's Encrypt 會透過 TXT 記錄,而非 HTTP 進行驗證。
第二種方法設定起來較複雜,但可以保留 Cloudflare proxy。
陷阱 4:使用 PAT 而非 GitHub App——PR 預覽無法運作。
症狀:你使用 Personal Access Token 連結 GitHub;其他功能都正常,但不會為 PR 建立預覽部署。你在 GitHub 開了 PR,Coolify 卻沒有任何反應。
原因:PR 預覽是 GitHub App 專屬功能。PAT 不會透過 webhook 接收 pull_request 事件。
解法:透過 App 重新連結 GitHub。Sources → Add → GitHub App → 完成設定精靈。你可以刪除舊的 PAT 來源。
陷阱 5:「Coolify == Vercel」並不完全正確。
Coolify 開箱即用無法提供的功能:
| Vercel | Coolify | 解決方法 |
|---|---|---|
| 全球 CDN | 無 | 在前面加上 Cloudflare(靜態內容可免費使用) |
| Incremental Static Regeneration | 無 | revalidatePath 只會在自己的伺服器上運作 |
| 圖片最佳化 | 無 | 使用本機 loader 的 next/image 或 Cloudflare Images |
| 流量尖峰時自動擴充 | 無 | 手動擴充;升級 VPS |
| Edge Functions | 無 | 使用一般 API 路由 |
如果你的專案是面向全球使用者、流量很高,且全球延遲需求為 < 100 ms 的 SaaS,Coolify 就不適合;請選擇 Vercel Enterprise。如果你是氛圍編碼者,正在用每天 100–1,000 名使用者測試 MVP,Coolify 就能滿足所有需求。
來自一份坦誠的自架分析:
本指南標題中的 15 分鐘,指的是首次部署單一專案的順利流程。要完成含監控、備份和警示的完整基礎架構設定,得花上一兩個晚上。請誠實看待所需時間。
與 Vercel 相比,一年可以省下多少?
重點摘要
另有 5–10 小時的初始設定時間,以及每月 1–2 小時維護時間的「隱形時間成本」。
以下 Vercel 數字是本文 2026 年 5 月情境估算,不是目前報價,也只是比較的一邊。自架 Coolify 沒有授權費,但 VPS、備份、儲存、流量與維運仍有成本。請取得符合上述要求的報價;情境未提供 VPS 數字,因此不能宣稱固定節省。
令 C 為每月 VPS、備份儲存、額外流量、監控與付費控制台的總基礎架構帳單,各項只計一次;r 為每小時維運成本,全程用同一幣別。本文時間估算為初始 5–10 小時,加每月 1–2 小時,即首年 17–34 小時、之後每年 12–24 小時。
| 情境 | Vercel 每月估算 | Vercel 每年 | Coolify 每月基礎架構 | Coolify 首年含人力 TCO | 首年比 Vercel 節省 |
|---|---|---|---|---|---|
| 單一原型、每月 100,000 次造訪 | $20 基本費 + 約 $5 頻寬 = $25 | $300 | C | 12C + (17–34)r | $300 − 12C − (17–34)r |
| 一台 VPS、五個專案 | $20 基本費 + $30 頻寬/functions = $50 | $600 | C | 12C + (17–34)r | $600 − 12C − (17–34)r |
| 三位開發者、五個專案 | $60 席位 + $30 頻寬 = $90 | $1,080 | C | 12C + (17–34)r | $1,080 − 12C − (17–34)r |
工作量需要不同主機時,各情境用自己的 C。將首年設定時間攤到 12 個月,每月等值為 C + (17–34)r/12;之後年 TCO 為 12C + (12–24)r。Vercel 也要納入相對應維運成本;節省為負數時,代表依你的輸入自架更貴。r 已含工程師成本時,不要再重複加整份薪資。
切換前以真實報價與備份計畫填 C、選定 r,再用一個月實際用量比較;缺少這些輸入,本文只能提供成本模型,不能宣稱節省金額。
主要好處並不是省錢。改用 Coolify 後,「受制於他人的付款政策」這個類別就消失了。不再需要收取 20% 手續費的虛擬中介卡。
Coolify 不是更便宜的 Vercel,而是另一類產品:基礎架構由你擁有,責任由你承擔,並以接受其複雜度來節省成本。
如果你在 Claude Code 生成專案後,第一件事就是部署原型,那麼管理環境(env、密鑰、排程工作、備份)就是上下文工程的一部分。若沒有「所有東西放在哪裡」的架構,Claude 就會迷失方向,而你每次修改都得浪費時間。完整設定包括:AI 分身(依照你的方法論調整的 Skills 和 Subagents)+ 第二大腦(專案知識庫)+ 上下文工程(Plan Mode、/compact、執行環境)。這就是 AI 無法避免產生幻覺的三大支柱。
來源
完整上下文工作流程:AI 分身 + 第二大腦 + 上下文工程。
更多資料請參閱 Ailoot。
更多詳情
常見問題:Coolify 與 Claude Code:將專案部署到自己的 VPS
部署後,哪個 URL 應回傳 JSON?
複製 Coolify Domains 欄位中的應用程式 URL,再開啟它的 /api/users 路徑。根網址是首頁;/api/users 才是範例專案建立的 JSON 端點。
如何計算自架是否省錢?
將每月 VPS、備份、儲存、流量、監控及選用控制台費加成 C。首年自架 TCO 為 12C 加 17–34 小時乘你的時薪成本,再與情境中的 Vercel 年估價比較;兩邊都應納入可比較的維運成本。