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