Перейти к содержимому
Настройка собственного хостинга

Настройка собственного хостинга

Открыть в Markdown

Провайдер работает с вашим собственным Status200 так же, как с Status200 Cloud: те же ресурсы, те же атрибуты и те же API-ключи проекта. Что задаёте вы: адрес вашего Status200, подходящую ему версию провайдера и, там, где они нужны, зеркало для машин без доступа к интернету и доверие к частному центру сертификации.

flowchart TB R["Terraform Registry,<br/>OpenTofu Registry<br/>или ваше зеркало"] -->|"terraform init"| T["Terraform или OpenTofu"] T --> P["Провайдер Status200,<br/>не новее<br/>вашего Status200"] P -->|"HTTPS, с API-ключом<br/>вашего проекта"| O["Ваш Status200:<br/>его адрес, затем /api"]

Terraform и ваш собственный Status200

Направьте провайдер на ваш Status200

Задайте в status200_url адрес, по которому вы открываете панель управления: схему и хост, без пути. Провайдер добавляет https://, когда у адреса нет схемы, и /api в конце, поэтому https://status200.example.com отправляет каждый запрос на https://status200.example.com/api.

main.tfHCL
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, чтобы одна конфигурация могла указывать на несколько установок:

Bash
export STATUS200_URL="https://status200.example.com"
export STATUS200_API_KEY="<your-api-key>"

Адрес – это хост, на котором обслуживается ваша установка: HOST и HTTP_PROTOCOL в config.env с Docker Compose и host и httpProtocol в values чарта Helm.

Ключ – это API-ключ проекта, которым вы управляете, созданный в панели управления вашего Status200 в Настройки проекта → Расширенный → Ключи API, как в Status200 Cloud. Мастер-ключ API Status200 с собственным хостингом не принадлежит ни одному проекту, поэтому создание с ним завершается ошибкой ProjectId required.

Совет

Ваш Status200 пишет этот блок за вас. Откройте любой ресурс или список в панели управления, затем Для разработчиков и Terraform в его боковом меню: показанный там блок провайдера содержит адрес вашего Status200 и подходящий ему диапазон версий.

Выберите версию провайдера

Используйте самый новый опубликованный провайдер, который не новее вашего Status200. Версии провайдера следуют версиям Status200: релиз Status200, который меняет провайдер, публикует его под собственным номером версии, а провайдер новее вашего Status200 может отправлять настройки, которых у вашего Status200 ещё нет.

Поэтому пишите диапазон, который заканчивается версией вашего Status200, как это делает панель управления. Блок выше использует >= 14.0, <= 14.0.88, диапазон для того Status200, с которого взята эта документация: когда вы читаете её на своём Status200, этот диапазон – ваш. Иначе впишите свою версию:

  1. Узнайте версию вашего Status200

    Спросите её у вашего Status200:

    Bash
    curl https://status200.example.com/version

    Ответ – JSON вида {"version":"14.0.40","commit":"..."}. Как главный администратор вы также можете открыть метку редакции в заголовке панели администратора: см. Узнайте свою текущую версию.

  2. Впишите её в диапазон

    Диапазон начинается с основной версии и заканчивается вашей. Для Status200 14.0.40:

    main.tfHCL
    terraform {
      required_providers {
        oneuptime = {
          source  = "oneuptime/status200"
          version = ">= 14.0, <= 14.0.40"
        }
      }
    }

    Terraform берёт самый новый провайдер из диапазона. Релиз Status200, который не менял провайдер, его не публикует, и диапазон пропускает версии, которых не существует.

  3. Скачайте провайдер

    Выполните terraform init. Он выводит установленную версию и записывает её в .terraform.lock.hcl.

При обновлении сначала обновите Status200. Затем поднимите конец диапазона до его новой версии и выполните terraform init -upgrade.

Без доступа к интернету

Когда машины, на которых работает Terraform, не могут достучаться до реестра, один раз скопируйте провайдер в свою сеть и направьте Terraform на копию.

  1. Сделайте зеркало провайдера

    На машине с доступом к интернету, в папке с вашей конфигурацией, скачайте провайдер для каждой платформы, на которой работают ваши машины. Без -platform команда скачивает провайдер только для своей платформы:

    Terraform

    Bash
    terraform providers mirror -platform=linux_amd64 -platform=darwin_arm64 /srv/terraform-mirror

    OpenTofu

    Bash
    tofu providers mirror -platform=linux_amd64 -platform=darwin_arm64 /srv/terraform-mirror

    Папка содержит провайдер под адресом реестра, например registry.terraform.io/status200/status200/. Скопируйте её в свою сеть.

  2. Направьте Terraform на зеркало

    Напишите файл конфигурации CLI, который устанавливает провайдер Status200 из папки, а всё остальное как обычно:

    Terraform

    mirror.tfrcHCL
    provider_installation {
      filesystem_mirror {
        path    = "/srv/terraform-mirror"
        include = ["registry.terraform.io/status200/status200"]
      }
      direct {
        exclude = ["registry.terraform.io/status200/status200"]
      }
    }

    OpenTofu

    mirror.tfrcHCL
    provider_installation {
      filesystem_mirror {
        path    = "/srv/terraform-mirror"
        include = ["registry.opentofu.org/status200/status200"]
      }
      direct {
        exclude = ["registry.opentofu.org/status200/status200"]
      }
    }

    Укажите его в TF_CLI_CONFIG_FILE, которую читают и Terraform, и OpenTofu: export TF_CLI_CONFIG_FILE=/etc/terraform/mirror.tfrc.

  3. Инициализируйте

    Выполните terraform init: он устанавливает провайдер из зеркала. Он предупреждает, что в файле блокировки теперь есть контрольные суммы только для этой платформы. Чтобы записать их для всех платформ, выполните terraform providers lock с теми же параметрами -platform на машине с доступом к интернету и закоммитьте .terraform.lock.hcl вместе с конфигурацией.

Обновляйте зеркало каждый раз, когда поднимаете диапазон версий.

TLS и сертификаты

Провайдер проверяет сертификат вашего Status200 по хранилищу доверенных сертификатов машины, на которой работает Terraform, и настройки, позволяющей пропустить проверку, нет. Если сертификат выдан частным центром сертификации, добавьте этот центр в хранилище доверенных сертификатов каждой машины и каждого CI-раннера, где работает Terraform:

Debian / Ubuntu

Bash
sudo cp my-ca.crt /usr/local/share/ca-certificates/
sudo update-ca-certificates

RHEL / Fedora

Bash
sudo cp my-ca.crt /etc/pki/ca-trust/source/anchors/
sudo update-ca-trust

В Linux, где менять хранилище доверенных сертификатов нельзя, например в CI-контейнере, задайте SSL_CERT_FILE с файлом, в котором есть ваш центр сертификации и публичные центры. В macOS и Windows добавьте центр сертификации в системное хранилище сертификатов.

  • Прокси. Провайдер отправляет запросы через прокси из HTTPS_PROXY, кроме запросов к хостам из NO_PROXY. Обратный прокси перед Status200 должен пропускать без изменений каждый путь /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 есть путь, или ответил прокси. Задайте в нём только адрес вашего Status200.

Сообщение «no available releases match the given constraints»

Ни один опубликованный провайдер не подходит под ограничение версии, например ограничение, которое называет одну версию, так и не опубликованную Status200. Напишите диапазон, как показано в Выберите версию провайдера.

Сообщение «ProjectId required»

Ключ – это мастер-ключ API, который не принадлежит ни одному проекту. Создайте API-ключ проекта в Настройки проекта → Расширенный → Ключи API.

В Устранение неполадок собраны остальные ошибки и то, что означает каждая.

Дальнейшие шаги