自架設定
提供者在你自己的 Status200 上的運作方式與在 Status200 Cloud 上相同:同樣的資源、同樣的屬性和同樣的專案 API 金鑰。需要你自己設定的是:你的 Status200 的位址、與之相符的提供者版本,以及在需要時,為無法連上網際網路的機器準備的鏡像和對私人憑證授權單位的信任。
Terraform 與你自己的 Status200
讓提供者指向你的 Status200
把 status200_url 設為你開啟儀表板時使用的位址:通訊協定和主機,不含路徑。位址沒有通訊協定時,提供者會加上 https://,並在結尾加上 /api,所以 https://status200.example.com 會把每個請求傳送到 https://status200.example.com/api。
terraform {
required_providers {
oneuptime = {
source = "oneuptime/status200"
version = ">= 14.0, <= 14.0.88"
}
}
}
provider "oneuptime" {
status200_url = "https://status200.example.com"
# The API key comes from the STATUS200_API_KEY environment variable.
}位址也可以改為來自環境變數 STATUS200_URL,這樣同一份設定可以指向多個安裝:
export STATUS200_URL="https://status200.example.com"
export STATUS200_API_KEY="<your-api-key>"位址就是你的安裝對外提供服務的主機:使用 Docker Compose 時是 HOST 和 HTTP_PROTOCOL(位於 config.env 中),使用 Helm 時是 host 和 httpProtocol(位於 chart 的 values 中)。
金鑰是你所管理專案的 API 金鑰,與 Status200 Cloud 上一樣,在你的 Status200 儀表板中的 專案設定 → 進階 → API 金鑰 下建立。自架 Status200 的主 API 金鑰不屬於任何專案,所以用它進行的建立會失敗並顯示 ProjectId required。
你的 Status200 會替你寫出這個區塊。在儀表板中開啟任一資源或清單,然後在它的側邊選單中依序開啟 開發者 和 Terraform:它顯示的提供者區塊包含你的 Status200 的位址,以及與之相符的版本範圍。
選擇提供者版本
使用不比你的 Status200 更新的最新已發佈提供者。提供者的版本跟隨 Status200 的版本:變更了提供者的 Status200 發行版本,會以該發行版本自己的版本號發佈提供者,而比你的 Status200 更新的提供者,可能會傳送你的 Status200 尚未具備的設定。
所以,請像儀表板那樣寫一個以你的 Status200 版本為終點的範圍。上面的區塊使用 >= 14.0, <= 14.0.88,也就是與提供本文件的 Status200 相符的範圍:當你在自己的 Status200 上閱讀本文件時,這個範圍就是你的範圍。否則,請寫入你自己的版本:
查看你的 Status200 版本
向你的 Status200 查詢:
curl https://status200.example.com/version回應是 JSON,例如
{"version":"14.0.40","commit":"..."}。身為主管理員,你也可以開啟管理員儀表板頁首中的版本標籤:請參閱查看目前的版本。把它寫進範圍
範圍從主要版本開始,到你的版本結束。以 Status200 14.0.40 為例:
terraform { required_providers { oneuptime = { source = "oneuptime/status200" version = ">= 14.0, <= 14.0.40" } } }Terraform 會選用範圍內最新的提供者。沒有變更提供者的 Status200 發行版本不會發佈提供者,範圍會略過不存在的版本。
下載提供者
執行
terraform init。它會顯示安裝的版本,並將其記錄在.terraform.lock.hcl中。
升級時,請先升級 Status200。然後把範圍的終點提高到它的新版本,並執行 terraform init -upgrade。
無法連上網際網路時
當執行 Terraform 的機器無法連到登錄檔時,請把提供者複製到你的網路中一次,再讓 Terraform 指向這份副本。
鏡像提供者
在一台可以連上網際網路的機器上,在包含你設定的資料夾中,為你的機器所執行的每個平台下載提供者。不加
-platform時,這個命令只會下載它自身平台的提供者:Terraform
terraform providers mirror -platform=linux_amd64 -platform=darwin_arm64 /srv/terraform-mirrorOpenTofu
tofu providers mirror -platform=linux_amd64 -platform=darwin_arm64 /srv/terraform-mirror該資料夾會在登錄檔位址下存放提供者,例如
registry.terraform.io/status200/status200/。把它複製到你的網路中。讓 Terraform 指向鏡像
撰寫一個 CLI 設定檔,從該資料夾安裝 Status200 提供者,其他一切照常安裝:
Terraform
provider_installation { filesystem_mirror { path = "/srv/terraform-mirror" include = ["registry.terraform.io/status200/status200"] } direct { exclude = ["registry.terraform.io/status200/status200"] } }OpenTofu
provider_installation { filesystem_mirror { path = "/srv/terraform-mirror" include = ["registry.opentofu.org/status200/status200"] } direct { exclude = ["registry.opentofu.org/status200/status200"] } }在 Terraform 和 OpenTofu 都會讀取的
TF_CLI_CONFIG_FILE中指定它:export TF_CLI_CONFIG_FILE=/etc/terraform/mirror.tfrc。初始化
執行
terraform init:它會從鏡像安裝提供者。它會警告鎖定檔現在只有這個平台的總和檢查碼。若要記錄所有平台的總和檢查碼,請在可以連上網際網路的機器上執行terraform providers lock,並加上相同的-platform選項,然後把.terraform.lock.hcl與設定一起提交。
每次提高版本範圍時,都要重新鏡像。
TLS 和憑證
提供者會用執行 Terraform 的機器的信任存放區來驗證你的 Status200 的憑證,沒有可以略過驗證的設定。如果憑證來自私人憑證授權單位,請把該單位加入每台執行 Terraform 的機器和 CI 執行器的信任存放區:
Debian / Ubuntu
sudo cp my-ca.crt /usr/local/share/ca-certificates/
sudo update-ca-certificatesRHEL / Fedora
sudo cp my-ca.crt /etc/pki/ca-trust/source/anchors/
sudo update-ca-trust在 Linux 上無法變更信任存放區的地方,例如 CI 容器中,請把 SSL_CERT_FILE 設為一個同時包含你的憑證授權單位和公用憑證授權單位的檔案。在 macOS 和 Windows 上,請把憑證授權單位加入系統的憑證存放區。
- Proxy。 提供者會透過
HTTPS_PROXY中的 Proxy 傳送請求,但傳送到NO_PROXY中主機的請求除外。Status200 前面的反向 Proxy 必須原封不動地轉送每個/api路徑和APIKey標頭。 - 一般 HTTP。
http://位址可用於測試安裝。API 金鑰會隨每個請求傳送,所以其他情況請使用 HTTPS。
疑難排解
訊息「x509: certificate signed by unknown authority」
執行 Terraform 的機器不信任你的 Status200 的憑證:請依照 TLS 和憑證中的說明加入你的憑證授權單位。
訊息「invalid character '<' looking for beginning of value」
回應的是網頁而不是 API:status200_url 帶有路徑,或者是 Proxy 作出了回應。請把它設為僅包含你的 Status200 位址。
訊息「no available releases match the given constraints」
沒有已發佈的提供者符合版本限制,例如限制只指定了一個 Status200 從未發佈過的版本。請依照選擇提供者版本中的說明寫一個範圍。
訊息「ProjectId required」
該金鑰是主 API 金鑰,不屬於任何專案。請在 專案設定 → 進階 → API 金鑰 下建立專案的 API 金鑰。
疑難排解中列出了其他錯誤及每個錯誤的含義。