Import
This commit is contained in:
commit
006bd84f60
4 changed files with 154 additions and 0 deletions
5
.gitignore
vendored
Normal file
5
.gitignore
vendored
Normal file
|
|
@ -0,0 +1,5 @@
|
||||||
|
secret.tfvars
|
||||||
|
.terraform
|
||||||
|
.terraform.lock.hcl
|
||||||
|
terraform.tfstate
|
||||||
|
terraform.tfstate.backup
|
||||||
92
README.md
Normal file
92
README.md
Normal file
|
|
@ -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 <die-ausgegebene-ip>
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
48
main.tf
Normal file
48
main.tf
Normal file
|
|
@ -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
|
||||||
|
}
|
||||||
|
|
||||||
9
user_data.yaml
Normal file
9
user_data.yaml
Normal file
|
|
@ -0,0 +1,9 @@
|
||||||
|
#cloud-config
|
||||||
|
package_update: true
|
||||||
|
packages:
|
||||||
|
- nginx
|
||||||
|
- curl
|
||||||
|
runcmd:
|
||||||
|
- systemctl enable --now nginx
|
||||||
|
- echo "<h1>Hallo vom Linuxtreff via OpenTofu</h1>" > /var/www/html/index.html
|
||||||
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue