From 006bd84f607ae5a5663c2f94a4f3d02886255d89 Mon Sep 17 00:00:00 2001 From: Frank Agerholm Date: Thu, 12 Mar 2026 22:39:59 +0100 Subject: [PATCH] Import --- .gitignore | 5 +++ README.md | 92 ++++++++++++++++++++++++++++++++++++++++++++++++++ main.tf | 48 ++++++++++++++++++++++++++ user_data.yaml | 9 +++++ 4 files changed, 154 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 main.tf create mode 100644 user_data.yaml diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a67986b --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +secret.tfvars +.terraform +.terraform.lock.hcl +terraform.tfstate +terraform.tfstate.backup diff --git a/README.md b/README.md new file mode 100644 index 0000000..bdc7479 --- /dev/null +++ b/README.md @@ -0,0 +1,92 @@ +# Installation von VMs bei Hetzner + +## Hetzner Zugang + +Die Hetzner-Cloud ist in Projekte unterteilt. Jedes Projekt kann von einen oder +mehrere API-Token haben. Diese API-Token bekommen entweder nur lesenden +oder lesenden und schreibenden Zugriff auf das betreffende Projekt. + +Mit dem API-Token ist eine Automatisierung wie Opentofu in der Lage, die APIs +aufzurufen und sich zu identifizieren. + +Damit solche Token nicht Bestandteil der Automatisierungsdateien sind und vor +allem nicht in Git-Repositories mit eingecheckt werden, lassen sich diese +separate Dateien mit Variablen verwenden, die die Tofu-Automatisierungen +einlesen können. + +Diese Anleitung benötigt eine Datei `secrets.tfvars`, die bei den Aufrufen +mit angegeben wird. Die Datei hat folgenden Inhalt: +``` +hcloud_token="SuperSecretToken" +``` + +## Initalisierung + +Dies lädt den notwendigen Hetzner-Provider herunter, wenn er noch nicht existiert + +``` +tofu init +``` + +Die Ausgaben sehen für dieses Projekt wie folgt aus: + +``` +$ tofu init + +Initializing the backend... + +Initializing provider plugins... +- Finding hetznercloud/hcloud versions matching "~> 1.60.1"... +- Installing hetznercloud/hcloud v1.60.1... +- Installed hetznercloud/hcloud v1.60.1 (signed, key ID 5219EACB3A77198B) + +Providers are signed by their developers. +If you'd like to know more about provider signing, you can read about it here: +https://opentofu.org/docs/cli/plugins/signing/ + +OpenTofu has created a lock file .terraform.lock.hcl to record the provider +selections it made above. Include this file in your version control repository +so that OpenTofu can guarantee to make the same selections by default when +you run "tofu init" in the future. + +OpenTofu has been successfully initialized! + +You may now begin working with OpenTofu. Try running "tofu plan" to see +any changes that are required for your infrastructure. All OpenTofu commands +should now work. + +If you ever set or change modules or backend configuration for OpenTofu, +rerun this command to reinitialize your working directory. If you forget, other +commands will detect it and remind you to do so if necessary. +``` + +## Planung + +In der Planung kann man sich anzeigen lassen, was tofu bei der Anwendung der +Konfiguration ändern würde. + +Solange die VM noch nicht existiert, wird also angezeigt, dass alles neu erstellt werden muss. + +``` +tofu plan -var-file="secret.tfvars" +``` + +## Ausführung + +Wenn man alles kontrolliert hat und die Änderungen so angewendet werden sollen, +wird der Plan angewendet. + +``` +tofu apply -var-file="secret.tfvars" +``` + +## Funktionstest + +Am Ende der Ausführung zeigt tofu die IP-Adresse an, die die VM erhalten hat. +Mit einer ssh-Verbindung kann geprüft werden, ob alles funktioniert hat. + +``` +ssh -l root +``` + + diff --git a/main.tf b/main.tf new file mode 100644 index 0000000..9f3bd20 --- /dev/null +++ b/main.tf @@ -0,0 +1,48 @@ +terraform { + required_providers { + hcloud = { + source = "hetznercloud/hcloud" + version = "~> 1.60.1" + } + } +} + +# Der Token sollte NIEMALS hart im Code stehen. +# Wir nutzen eine Variable dafür. +variable "hcloud_token" { + sensitive = true +} + +provider "hcloud" { + token = var.hcloud_token +} + +# 1. SSH-Key bei Hetzner registrieren (oder einen vorhandenen nutzen) +resource "hcloud_ssh_key" "default" { + name = "treff-key" + public_key = file("~/.ssh/id_ed25519.pub") +} + +# 2. Den Server definieren +resource "hcloud_server" "web_server" { + name = "linux-treff-demo" + image = "fedora-43" + server_type = "cx23" + location = "nbg1" # Nürnberg + ssh_keys = [hcloud_ssh_key.default.id] + + # Hier binden wir das Cloud-Init Skript ein + user_data = file("${path.module}/user_data.yaml") + + # Optional: Labels für die Ordnung + labels = { + veranstaltung = "linuxtreff" + typ = "demo" + } +} + +# Output der IP, damit man sich sofort verbinden kann +output "server_ip" { + value = hcloud_server.web_server.ipv4_address +} + diff --git a/user_data.yaml b/user_data.yaml new file mode 100644 index 0000000..9cba430 --- /dev/null +++ b/user_data.yaml @@ -0,0 +1,9 @@ +#cloud-config +package_update: true +packages: + - nginx + - curl +runcmd: + - systemctl enable --now nginx + - echo "

Hallo vom Linuxtreff via OpenTofu

" > /var/www/html/index.html +