# Selv-hostet oppsett

Provideren virker med din egen Status200 slik den virker med Status200 Cloud: de samme ressursene, de samme attributtene og de samme API-nøklene for prosjektet. Det du selv må angi: adressen til Status200-installasjonen din, providerversjonen som passer til den, og, der du trenger dem, et speil for maskiner uten internettilgang og tillit til en privat sertifikatutsteder.

:::cards
- [Pek provideren mot Status200-installasjonen din](#pek-provideren-mot-oneuptime-installasjonen-din): Adressen, og en API-nøkkel for prosjektet ditt.
- [Velg providerversjonen](#velg-providerversjonen): Den nyeste provideren som ikke er nyere enn Status200-installasjonen din.
- [Uten internettilgang](#uten-internettilgang): Speil provideren inn i nettverket ditt.
- [TLS og sertifikater](#tls-og-sertifikater): En privat sertifikatutsteder, proxyer og vanlig HTTP.
:::

```mermaid title="Terraform og din egen Status200"
flowchart TB
    R["Terraform Registry,<br/>OpenTofu Registry<br/>eller speilet ditt"] -->|"terraform init"| T["Terraform eller OpenTofu"]
    T --> P["Status200-provideren,<br/>ikke nyere enn<br/>installasjonen din"]
    P -->|"HTTPS, med en<br/>API-nøkkel for<br/>prosjektet ditt"| O["Status200-installasjonen:<br/>adressen, så /api"]
```

## Pek provideren mot Status200-installasjonen din

Sett `status200_url` til adressen du åpner dashbordet på: skjemaet og verten, uten sti. Provideren legger til `https://` når adressen ikke har et skjema, og `/api` på slutten, så `https://status200.example.com` sender hver forespørsel til `https://status200.example.com/api`.

```hcl title="main.tf"
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.
}
```

Adressen kan i stedet komme fra miljøvariabelen `STATUS200_URL`, slik at én konfigurasjon kan peke mot flere installasjoner:

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

Adressen er verten installasjonen din serveres på: `HOST` og `HTTP_PROTOCOL` i `config.env` med Docker Compose, og `host` og `httpProtocol` i values for Helm-chartet.

Nøkkelen er en API-nøkkel for prosjektet du styrer, opprettet i dashbordet til Status200-installasjonen din under **Prosjektinnstillinger → Avansert → API-nøkler**, som på Status200 Cloud. Master-API-nøkkelen til en selv-hostet Status200 hører ikke til noe prosjekt, så en opprettelse med den feiler med `ProjectId required`.

> [!TIP]
> Status200-installasjonen din skriver denne blokken for deg. Åpne en hvilken som helst ressurs eller liste i dashbordet, og deretter **Utvikler** og **Terraform** i sidemenyen: provider-blokken den viser, har adressen til installasjonen din, og et versjonsintervall som passer til den.

## Velg providerversjonen

Bruk den nyeste publiserte provideren som ikke er nyere enn Status200-installasjonen din. Providerversjoner følger Status200s: en Status200-release som endrer provideren, publiserer den under releasens eget versjonsnummer, og en provider som er nyere enn installasjonen din, kan sende innstillinger installasjonen din ikke har ennå.

Skriv derfor et intervall som slutter ved versjonen til installasjonen din, slik dashbordet gjør. Blokken ovenfor tar `>= 14.0, <= 14.0.88`, intervallet for den Status200-installasjonen denne dokumentasjonen kommer fra: når du leser den på din egen installasjon, er det intervallet ditt. Ellers skriver du inn din egen versjon:

:::steps
### Finn versjonen til installasjonen din

Spør Status200-installasjonen din om den:

```bash
curl https://status200.example.com/version
```

Svaret er JSON, som `{"version":"14.0.40","commit":"..."}`. Som hovedadministrator kan du også åpne utgavemerket i toppfeltet i Admin-dashbordet: se [Finn den nåværende versjonen din](/docs/installation/upgrading#finn-den-nåværende-versjonen-din).

### Skriv den inn i intervallet

Intervallet starter ved hovedversjonen og slutter ved din. For en Status200 14.0.40:

```hcl title="main.tf"
terraform {
  required_providers {
    oneuptime = {
      source  = "oneuptime/status200"
      version = ">= 14.0, <= 14.0.40"
    }
  }
}
```

Terraform tar den nyeste provideren i intervallet. En Status200-release som ikke endret provideren, publiserer ingen, og intervallet hopper over versjonene som ikke finnes.

### Last ned provideren

Kjør `terraform init`. Den viser versjonen den installerte, og registrerer den i `.terraform.lock.hcl`.
:::

Når du oppgraderer, oppgraderer du Status200 først. Hev deretter slutten av intervallet til den nye versjonen, og kjør `terraform init -upgrade`.

## Uten internettilgang

Når maskinene som kjører Terraform, ikke kan nå registeret, kopierer du provideren inn i nettverket ditt én gang og lar Terraform peke mot kopien.

:::steps
### Speil provideren

Last ned provideren for hver plattform maskinene dine kjører, på en maskin med internettilgang, i en mappe med konfigurasjonen din. Uten `-platform` laster kommandoen bare ned provideren for sin egen plattform:

:::tabs
@tab Terraform
```bash
terraform providers mirror -platform=linux_amd64 -platform=darwin_arm64 /srv/terraform-mirror
```
@tab OpenTofu
```bash
tofu providers mirror -platform=linux_amd64 -platform=darwin_arm64 /srv/terraform-mirror
```
:::

Mappen inneholder provideren under registerets adresse, som `registry.terraform.io/status200/status200/`. Kopier den inn i nettverket ditt.

### La Terraform peke mot speilet

Skriv en CLI-konfigurasjonsfil som installerer Status200-provideren fra mappen, og alt annet som vanlig:

:::tabs
@tab Terraform
```hcl title="mirror.tfrc"
provider_installation {
  filesystem_mirror {
    path    = "/srv/terraform-mirror"
    include = ["registry.terraform.io/status200/status200"]
  }
  direct {
    exclude = ["registry.terraform.io/status200/status200"]
  }
}
```
@tab OpenTofu
```hcl title="mirror.tfrc"
provider_installation {
  filesystem_mirror {
    path    = "/srv/terraform-mirror"
    include = ["registry.opentofu.org/status200/status200"]
  }
  direct {
    exclude = ["registry.opentofu.org/status200/status200"]
  }
}
```
:::

Oppgi den i `TF_CLI_CONFIG_FILE`, som både Terraform og OpenTofu leser: `export TF_CLI_CONFIG_FILE=/etc/terraform/mirror.tfrc`.

### Initialiser

Kjør `terraform init`: den installerer provideren fra speilet. Den advarer om at låsefilen nå bare har sjekksummer for denne plattformen. For å registrere dem for alle plattformer kjører du `terraform providers lock` med de samme `-platform`-valgene på maskinen med internettilgang, og committer `.terraform.lock.hcl` sammen med konfigurasjonen din.
:::

Speil på nytt hver gang du hever versjonsintervallet.

## TLS og sertifikater

Provideren kontrollerer sertifikatet til Status200-installasjonen din mot tillitslageret på maskinen som kjører Terraform, og det finnes ingen innstilling for å hoppe over kontrollen. Når sertifikatet kommer fra en privat sertifikatutsteder, legger du til den utstederen i tillitslageret på hver maskin og CI-runner som kjører Terraform:

:::tabs
@tab Debian / Ubuntu
```bash
sudo cp my-ca.crt /usr/local/share/ca-certificates/
sudo update-ca-certificates
```
@tab RHEL / Fedora
```bash
sudo cp my-ca.crt /etc/pki/ca-trust/source/anchors/
sudo update-ca-trust
```
:::

På Linux, der du ikke kan endre tillitslageret, som i en CI-container, setter du `SSL_CERT_FILE` til en fil som inneholder utstederen din og de offentlige utstederne. På macOS og Windows legger du til utstederen i systemets sertifikatlager.

- **Proxyer.** Provideren sender forespørslene sine gjennom proxyen i `HTTPS_PROXY`, unntatt til vertene i `NO_PROXY`. En omvendt proxy foran Status200 må sende hver `/api`-sti og headeren `APIKey` uendret gjennom.
- **Vanlig HTTP.** En `http://`-adresse virker, for en testinstallasjon. API-nøkkelen sendes med hver forespørsel, så bruk HTTPS til alt annet.

## Feilsøking

:::details Meldingen «x509: certificate signed by unknown authority»
Maskinen som kjører Terraform, stoler ikke på sertifikatet til Status200-installasjonen din: legg til sertifikatutstederen din slik [TLS og sertifikater](#tls-og-sertifikater) viser.
:::

:::details Meldingen «invalid character '<' looking for beginning of value»
En nettside svarte i stedet for API-et: `status200_url` inneholder en sti, eller en proxy svarte. Sett den til bare adressen til Status200-installasjonen din.
:::

:::details Meldingen «no available releases match the given constraints»
Ingen publisert provider passer til versjonsbegrensningen, for eksempel en begrensning som nevner én versjon Status200 aldri har publisert. Skriv et intervall, slik [Velg providerversjonen](#velg-providerversjonen) viser.
:::

:::details Meldingen «ProjectId required»
Nøkkelen er master-API-nøkkelen, som ikke hører til noe prosjekt. Opprett en API-nøkkel for prosjektet, under **Prosjektinnstillinger → Avansert → API-nøkler**.
:::

[Feilsøking](/docs/terraform/troubleshooting) har de andre feilene, og hva hver av dem betyr.

## Neste steg

:::cards
- [Hurtigstart](/docs/terraform/quick-start): Opprett en API-nøkkel, og ta i bruk de første ressursene dine.
- [Registerbruk](/docs/terraform/registry): Hvor provideren publiseres, og hvordan versjoner nummereres.
- [Feilsøking](/docs/terraform/troubleshooting): Vanlige feil og hvordan du retter dem.
- [Oppgradering](/docs/installation/upgrading): Oppgrader Status200-installasjonen din før du hever providerens intervall.
:::
