1784 字
9 分鐘

Coolify 4.2 升級要改什麼?先處理 Member 唯讀與 API GET→POST

Coolify 4.2 的升級重點不只是換 Docker image。官方 release 把兩個會直接影響維運的行為列為 breaking change:team 裡的 Member 角色改成唯讀,以及狀態變更 API 改要求使用 POST,舊的 GET 呼叫會收到 405 Method Not Allowed

直接答案是:先盤點 CI、shell script、監控和 MCP 整合,再把狀態變更路徑改成 POST;同時重新檢查 token 的 readwritedeploy 權限,不要為了快速恢復而預設使用 root

4.2 會影響哪些既有流程#

先把變更分成「角色權限」和「HTTP 方法」兩層:

變更升級後行為先檢查的地方
Member 角色可查看,但不能 create、update、delete、deploy、start、stop 或修改資源團隊成員、手動操作、共用維運帳號
狀態變更 API指定端點要求 POST,沿用 GET 會回 405CI/CD、cron、shell script、ChatOps、MCP
讀取 API讀取資源的端點仍按 API 文件使用 GET監控、清單、健康檢查和報表

這兩件事不要混成「token 失效」。Member 是團隊角色,token 則有自己的 team scope 和 permission。升級後出現 405,先修 HTTP method;出現 401 或 403,再檢查 token、角色與權限。

升級前先找出所有 API 呼叫#

不要只搜尋 coolify 這個字串,還要找出 HTTP client 的 method 和會改變資源狀態的路徑。可以在部署與自動化 repository 先做一輪盤點:

Terminal window
rg -n \
--glob '*.sh' --glob '*.yml' --glob '*.yaml' --glob '*.json' \
'curl|fetch|axios|/api/v1/(enable|disable|deploy|start|restart|stop|validate)' .

把結果分成三類:

  1. 只讀取列表或查詢狀態的呼叫,通常維持 GET。
  2. 觸發部署、啟停、重啟或啟用/停用 API 的呼叫,改成 POST。
  3. 包含自訂 URL 或 wrapper 的呼叫,沿著函式追到真正送出的 method,不要只改呼叫端名稱。

如果你原本透過 Coolify 與 Zeabur 自架部署比較 建立了自動化,這次應以實際 script 和部署版本為準重新驗證,不要把比較文章裡的概念當成目前 API 契約。

把狀態變更從 GET 改成 POST#

以 application restart 為例,升級後應明確送出 POST 和 Bearer token:

Terminal window
curl --fail-with-body -X POST \
"$COOLIFY_URL/api/v1/applications/$APP_UUID/restart" \
-H "Authorization: Bearer $COOLIFY_TOKEN"

其他 state-changing 路徑也用同一個原則處理,包括:

  • /enable/disable
  • /deploy
  • /servers/{uuid}/validate
  • /applications/{uuid}/start/restart/stop
  • /databases/{uuid}/start/restart/stop
  • /services/{uuid}/start/restart/stop
  • /services/{uuid}/applications/{app_uuid}/start/restart/stop

不要把所有 API 都機械式改成 POST。列出部署資源、查詢 logs 或取得團隊資料的讀取端點,仍應以 Coolify API reference 的 method 為準。

在 CI 裡可以先把 URL、method 和 response status 記錄下來,但不要把 token 印到 log:

Terminal window
response_file="$(mktemp)"
status="$(curl -sS -o "$response_file" -w '%{http_code}' \
-X POST "$COOLIFY_URL/api/v1/applications/$APP_UUID/deploy" \
-H "Authorization: Bearer $COOLIFY_TOKEN")"
case "$status" in
2*) cat "$response_file" ;;
405) echo "Coolify API method is still wrong" >&2; exit 1 ;;
401|403) echo "Coolify API token is not authorized" >&2; exit 1 ;;
*) cat "$response_file" >&2; exit 1 ;;
esac

正式腳本還要處理暫存檔清理、逾時和重試;上例的重點是把 405、401、403 分開,讓排錯訊息能直接指出下一步。

重新分配 token 權限,不要先給 root#

Coolify API token 的權限不是只有「能不能登入」。官方文件列出以下主要層級:

權限能做什麼常見用途
read查看伺服器、專案、應用程式、資料庫和服務監控、報表、只讀整合
read:sensitiveread 之外讀取 secrets、private keys、環境變數和 logs只有確實需要敏感資料時才加
write建立、更新、刪除資源管理平台或資源同步
deploy觸發部署與管理 deploy webhooksCI/CD pipeline
root繞過所有 permission check只留給必要的管理自動化

例如,單純部署的 pipeline 不應因為遇到 403 就直接改用 root。先確認它是否只需要 readdeploy,並確認 token 是在正確的 team 建立;Coolify 會把 token 綁定在建立時的 team。

如果 script 需要啟用或停用整個 API,官方文件說這兩個端點要求 root。這是特例,不應反過來把一般部署 token 都提升成 root。

針對 Member 唯讀行為安排回歸#

升級前把實際角色分成三組測試:

  1. Member 查看:確認可以看到被授權 team 的專案、應用程式、資料庫與服務。
  2. Member 寫入:確認不會再把建立、更新、刪除或啟停操作交給 Member 角色執行。
  3. 自動化 token:確認 pipeline 使用的是明確的 token permission,不依賴某位使用者能在 dashboard 上看到按鈕。

這個改動的目的不是讓 Member 完全看不到資源,而是讓「可查看」和「可改變 production 狀態」分離。若你的值班流程由 Member 帳號負責按下 deploy,升級後要改成由受控的 CI token 或具備適當權限的角色執行,並保留審計紀錄。

用狀態碼判斷升級後的問題#

可以用這個順序處理常見錯誤:

狀態碼優先檢查
405endpoint 的 HTTP method、版本與是否仍使用舊 GET 呼叫
401Bearer token 是否缺失、格式是否被 shell 或 CI secret 破壞
403token permission、team scope、使用者角色與該 endpoint 的需求
429API rate limit、重試間隔和是否有重複觸發
5xxCoolify service、反向代理、資料庫與 endpoint 本身的 runtime log

不要用「重新建立 token」掩蓋 405;也不要用「把權限加滿」掩蓋 403。先保存 request method、endpoint(遮蔽 token)、status code 和 response body,再做最小修改。

安全的升級順序#

如果 Coolify 管理的是 production,可以依這個順序降低風險:

  1. 匯出目前版本、token 用途、team 和自動化呼叫的清單。
  2. 在 staging 或備援環境先升級 4.2,跑讀取、部署、重啟與回滾測試。
  3. 先合併 script 的 POST 修改,再安排 Coolify instance 升級。
  4. 用最小權限建立或更新 pipeline token,並設定合理的到期與 IP allowlist。
  5. 上線後觀察 405、403、部署完成和 webhook 回呼,不要只看服務 container 是 running。

如果設定 Allowed IPs,也要先把 CI runner 的出口 IP 加入,否則 token 權限正確仍可能無法連線。token 只顯示一次,應放在 secret manager;不要寫入 repository、Docker image 或 CI 的明文輸出。

結論:先修 method,再重做最小權限#

Coolify 4.2 的相容性工作可以拆成兩個可驗證的變更:所有狀態變更 API 依官方路徑改用 POST,然後重新確認 Member 唯讀、token permission 和 team scope。遇到 405、401、403 時分層排錯,能避免把 HTTP method 問題誤判成權限問題,也能避免用 root 快速繞過升級後的安全邊界。

常見問題#

Q: Coolify 4.2 後所有 API 都要改成 POST 嗎?#

A: 不用。官方 release 針對狀態變更端點要求 POST;讀取資源的 endpoint 仍應依 API reference 使用 GET。先按 endpoint 的用途與文件 method 逐一盤點。

Q: Member 不能 deploy 後,該直接把 token 改成 root 嗎?#

A: 不建議。先確認是帳號角色限制還是 token permission 不足,CI/CD 通常應評估 readdeploy 的最小組合。只有 API enable/disable 等官方明確要求 root 的管理操作,才考慮使用 root token。

Q: 收到 405 是 token 權限不夠嗎?#

A: 通常不是。405 表示 HTTP method 不被該路徑接受;先把舊 GET 改成官方要求的 POST,再用 401 或 403 分別檢查認證與授權。

參考資料:

Coolify v4.2.0 Release:Breaking Changes

Coolify API Authorization

Coolify API:List Deployments

Coolify 4.2 升級要改什麼?先處理 Member 唯讀與 API GET→POST
https://laplusda.com/posts/coolify-4-2-upgrade-api-permissions/
作者
Zero
發佈於
2026-08-08
許可協議
CC BY-NC-SA 4.0
這篇文章有幫助嗎?

回報錯字、失效連結,或告訴我你想看的延伸主題。