Das Prinzip
Ein Hetzner-Cloud-Server mit CloudPanel – einem kostenlosen,
WordPress-optimierten Panel mit Web-Oberfläche (nginx, PHP-FPM, MySQL, Redis, Let’s
Encrypt, Backups). Du legst die WordPress-Site per Klick an, Cloudflare
sitzt als CDN (Content Delivery Network)/Schutz davor. Verwaltet wird über
https://<IP>:8443 im Browser –
SSH (Secure Shell) brauchst du fast nur für die Installation.
WordPress liegt hier
01 Webhosting oder Cloud?
Zwei grundverschiedene Wege. Diese Anleitung nimmt den zweiten.
| Hetzner Webhosting (managed) | Cloud-Server + CloudPanel (diese Anleitung) | |
|---|---|---|
| Wer pflegt OS (Betriebssystem)/PHP/DB/Backups | Hetzner | du (CloudPanel nimmt viel ab) |
| Preis | 1,90 – 19,90 €/Mon | ~6 – 10 €/Mon |
| root / SSH / WP-CLI | eingeschränkt | voll |
| Mehrere Sites, Staging, eigene PHP-Config | begrenzt | ja |
| Leistung fürs Geld | ok (Shared, Prozess-Limits) | deutlich mehr |
| Aufwand für dich | minimal | etwas Einrichtung + Updates im Blick behalten |
Nur ein Blog / eine Firmenseite und du willst dich nicht kümmern → spring zu Hetzner Webhosting. Willst du Kontrolle, mehr Leistung, mehrere Sites oder einfach lernen → weiter hier.
02 Voraussetzung: Server-Basis
Konto, API-Token, hcloud CLI (Command-Line Interface) und SSH-Key – einmalig, in einer
eigenen Anleitung.
Server-Basis
durcharbeiten (nur hcloud + ssh nötig). Domain: bei Hetzner
registrieren (.de ~5–8 €/Jahr, .com ~10–15) oder eine vorhandene nutzen
– in Schritt 7/8 zeigen wir sie auf den Server.
Firewall für WordPress
Firewall-Prinzip: Server-Basis. Anders als bei den Wegwerf-Servern: 80 & 443 offen für alle (die Webseite), 22 und 8443 (CloudPanel) nur von deiner IP (Internet Protocol).
$ip = (Invoke-RestMethod 'https://ipv4.icanhazip.com').Trim()
hcloud firewall create --name wp-fw
hcloud firewall add-rule wp-fw --direction in --protocol tcp --port 80 --source-ips 0.0.0.0/0,::/0
hcloud firewall add-rule wp-fw --direction in --protocol tcp --port 443 --source-ips 0.0.0.0/0,::/0
hcloud firewall add-rule wp-fw --direction in --protocol tcp --port 22 --source-ips "$ip/32"
hcloud firewall add-rule wp-fw --direction in --protocol tcp --port 8443 --source-ips "$ip/32"
Sechs Zeilen, vier Regeln – der ganze Unterschied steckt in --source-ips:
| Schalter | steht bei | bewirkt |
|---|---|---|
hcloud firewall create --name … |
zuerst | Eine Hetzner-Firewall ist ein eigenständiges Objekt, kein Bestandteil des Servers: erst anlegen, dann Regeln hineinschreiben, dann an einen oder mehrere Server hängen. Sie wirkt im Netz vor dem Server – anders als ufw oder nftables, die auf dem Server selbst laufen. Deshalb kostet sie nichts an Rechenleistung und bleibt auch dann wirksam, wenn auf dem Server etwas schiefgeht. Frisch angelegt enthält sie keine Regeln und laesst damit nichts herein. |
hcloud firewall add-rule <name> … |
je Regel | Ein Aufruf je erlaubtem Port. Es gibt keine Reihenfolge und keine Priorität wie bei klassischen Firewalls: die Regeln sind eine reine Erlaubnisliste, alles Nicht-Genannte ist gesperrt. Ein Aufruf zweimal ausgeführt legt die Regel zweimal an – störend, aber harmlos. |
Invoke-RestMethod … icanhazip.com.Trim() |
Zeile 1 | Holt die eigene öffentliche IPv4-Adresse. Invoke-RestMethod statt Invoke-WebRequest, weil es direkt den Inhalt liefert statt ein Antwortobjekt. Das .Trim() ist keine Kosmetik: die Antwort endet mit einem Zeilenumbruch, und "1.2.3.4
/32" wäre für Hetzner eine ungültige Angabe. |
--direction in |
alle vier Regeln | Hetzner-Firewalls filtern nur eingehend; ausgehend bleibt grundsätzlich offen. Eine Richtung out gäbe es zwar, wird hier aber nicht gebraucht – der Server soll Updates ziehen dürfen. |
--source-ips 0.0.0.0/0,::/0 |
Port 80, 443 | Offen für alle. Beide Notationen müssen dastehen: 0.0.0.0/0 ist „jede IPv4-Adresse“, ::/0 dasselbe für IPv6. Wer nur die erste angibt, sperrt alle IPv6-Besucher aus – und merkt es lange nicht, weil der eigene Anschluss meist über IPv4 geht. |
--source-ips "$ip/32" |
Port 22, 8443 | /32 ist genau eine Adresse – die eigene. SSH und das CloudPanel-Backend sind damit für den Rest des Netzes unsichtbar, nicht nur passwortgeschützt. Die Anführungszeichen braucht PowerShell, um Variable und /32 zu einem Argument zu verbinden. |
--port 8443 |
CloudPanel | Das Verwaltungs-Backend. Es gehört aus demselben Grund wie SSH hinter die eigene IP: wer es erreicht, sieht die Anmeldemaske und kann sie beliebig oft ausprobieren. |
DSL-Anschluesse bekommen bei der nächtlichen Zwangstrennung eine neue Adresse, und aus
einem fremden Netz stimmt sie ohnehin nicht mehr. Dann sperrt die Regel dich aus.
Der Weg zurück führt nicht über SSH, sondern über die Hetzner-Konsole im Browser
(oder hcloud firewall delete-rule vom selben Rechner aus, solange der Token
noch gilt).
03 cloud-init-Datei
Nur System-Update und die nötigen Pakete – CloudPanel selbst installierst du in Schritt 6 per SSH, damit du den Installer-Hash prüfen kannst.
#cloud-config
package_update: true
package_upgrade: true
packages:
- curl
- wget
- sudo
04 Server erstellen
CPX22 (2 vCPU / 4 GB) ist die praktische Untergrenze für CloudPanel +
MySQL 8 + WordPress + Redis. CPX32 (4 / 8) für WooCommerce oder
mehrere Sites.
hcloud server create `
--name wp-host `
--type cpx22 `
--image ubuntu-24.04 `
--ssh-key laptop `
--firewall wp-fw `
--user-data-from-file cloud-init.yaml
hcloud server ip wp-host # IP notieren -> oben ins Feld "Server-IP"
CloudPanel unterstützt ubuntu-24.04 / 22.04 und
debian-12 / 11. IPv4 (Internet Protocol Version 4) ist dabei (~0,50 €/Monat).
05 CloudPanel installieren
CloudPanel bringt seinen eigenen nginx + Let's Encrypt mit und belegt Port 80/443 – ideal, wenn auf dem Server nur WordPress läuft. Sollen weitere Dienste (Vaultwarden, Nextcloud…) daneben, kann es nur einen Port-443-Besitzer geben: dann Traefik als Edge und WordPress als Compose-Stack, siehe Mehrere Dienste auf einem Server (WordPress+DB dort ausführlich).
Per SSH, mit Hash-Prüfung. Der Installer läuft ~5–10 Minuten und startet neu.
ssh root@<IP>)apt update && apt -y upgrade
curl -sS https://installer.cloudpanel.io/ce/v2/install.sh -o install.sh
# aktuellen sha256-Hash von cloudpanel.io/docs (Hetzner-Installer) einsetzen:
echo "<HASH> install.sh" | sha256sum -c
CLOUD=hetzner DB_ENGINE=MYSQL_8.4 bash install.sh
CloudPanel öffnen: https://<IP>:8443
(Browser-Warnung zum selbst-signierten Zertifikat kurz akzeptieren – wird in
Schritt 10 ersetzt). Ersteinrichtung: Admin-Benutzer + starkes Passwort + 2FA aktivieren.
06 WordPress-Site in CloudPanel anlegen
Alles per Weboberfläche – CloudPanel installiert WordPress komplett.
- CloudPanel → + Add Site → Create a WordPress Site.
- Domain:
seb4u.com, Site User + Passwort, PHP 8.3, WordPress-Admin-Benutzer/Passwort/E-Mail. - CloudPanel legt Datenbank an, lädt WordPress, richtet nginx + PHP-Pool ein.
- In den Site-Einstellungen: Redis aktivieren (für Object-Cache), Vary Cache / FastCGI-Cache nach Bedarf.
Die Site läuft, aber die Domain zeigt noch nicht auf den Server – das kommt jetzt.
Vorschau vorher: hosts-Datei lokal auf
<IP> seb4u.com zeigen lassen.
07 DNS setzen
Die Domain muss auf die Server-IP zeigen. Zwei A-Records:
| Typ | Name | Wert |
|---|---|---|
| A | @ | <IP> |
| A | www | <IP> |
Bei welchem Anbieter deine Domain liegt, dort in die DNS-Verwaltung. Bei Hetzner: DNS Console (gratis). Wenn du Cloudflare nutzt (Schritt 9), legst du die Records dort an und überspringst diesen Schritt hier.
Ausbreitung: meist Minuten, maximal ein paar Stunden. Prüfen: nslookup seb4u.com.
08 Cloudflare davor (empfohlen)
Kostenlos: CDN, Caching, DDoS-Schutz, echte IP des Servers versteckt, WAF-Grundregeln.
Liegt seb4u.com bereits als
Full-Zone bei Cloudflare (DNS + Registrar – siehe Anleitung
Domain zu Cloudflare umziehen), dann entfallen die ersten drei Punkte
(Konto, Domain hinzufügen, Nameserver). Du legst nur die A-Records in der bestehenden
Zone an und stellst SSL (Secure Sockets Layer)/TLS (Transport Layer Security).
- Nur falls noch nicht dort: Konto auf
dash.cloudflare.com
→ Add a domain →
seb4u.com→ Free. Die zwei Cloudflare-Nameserver beim Domain-Anbieter eintragen. Warten bis Zone Active. - DNS → Records:
seb4u.comundwwwals A-Record auf<IP>, Proxy (orange Wolke) an. - Cloudflare → SSL/TLS → Modus Full (strict).
Damit Besucher nur über Cloudflare kommen, in wp-fw die Ports 80/443 auf die
Cloudflare-IP-Bereiche
beschraenken (statt 0.0.0.0/0). Optional, aber sauber.
09 HTTPS
Gültiges Zertifikat für die Domain – und fürs CloudPanel selbst.
- Für die WordPress-Site: CloudPanel → Site → SSL/TLS
→ New Let’s Encrypt Certificate (
seb4u.com+www.seb4u.com). Klappt, sobald DNS auf den Server zeigt. Mit Cloudflare-Proxy: entweder Proxy kurz auf „grau“, Zertifikat holen, wieder „orange“ – oder ein Cloudflare Origin Certificate verwenden. - Fürs Panel (
:8443): CloudPanel → Admin Area → Security → SSL/TLS, eigenes Zertifikat oder LE für einepanel.seb4u.com-Subdomain. - In CloudPanel je Site „Force HTTPS“ aktivieren.
10 WordPress einrichten & absichern
https://seb4u.com/wp-admin öffnen, mit den in
Schritt 7 gesetzten Zugangsdaten anmelden.
- Permalinks → Beitragsname (Einstellungen → Permalinks).
- Admin absichern: 2FA-Plugin (z. B. WP 2FA), starkes Passwort,
Benutzername nicht
admin. Login-Limit / Cloudflare-Rate-Limit für/wp-login.php. - Auto-Updates: für Minor-Core + Sicherheits-Plugins aktivieren. Major-Updates manuell nach Backup.
- Caching: Plugin (WP Super Cache, W3 Total Cache oder LiteSpeed Cache) + Redis Object Cache-Plugin (nutzt das in Schritt 7 aktivierte Redis).
- Aufräumen: ungenutzte Themes/Plugins löschen,
XML-RPCper Plugin/Cloudflare sperren, Datei-Editor im Adminbereich abschalten (define('DISALLOW_FILE_EDIT', true);inwp-config.php).
Impressum und Datenschutzerklärung sind bei einer öffentlichen deutschen Website Pflicht (DDG + DSGVO) – sonst Abmahn-Risiko. Dazu: AVV (Auftragsverarbeitungsvertrag) mit Hetzner in der Console akzeptieren, DMARC (Domain-based Message Authentication, Reporting and Conformance)-Record setzen, Backup außer Haus. Vollständig: Grundausstattung-Checkliste.
11 Mailversand – Port 25 ist gesperrt
Ausgehende Verbindungen auf Port 25 und 465 sind gesperrt (Spam-Schutz). WordPress kann also keine Mails direkt verschicken – Passwort-Reset, Kommentar-Benachrichtigungen, WooCommerce-Bestellbestätigungen kommen sonst nicht an. Lösung: ein SMTP-Relay über Port 587.
- Kostenlosen/günstigen Versanddienst wählen: Brevo (300 Mails/Tag gratis), Mailgun, Amazon SES (Simple Email Service), Postmark. Dort die Domain verifizieren (SPF- + DKIM-Records ins DNS).
- In WordPress ein Plugin: FluentSMTP (gratis) oder WP (WordPress) Mail SMTP (Simple Mail Transfer Protocol). Host = der SMTP-Server des Dienstes, Port 587, TLS, Benutzer/Passwort aus dem Dienst.
- Testmail aus dem Plugin senden – muss ankommen und
SPF=pass,DKIM=passzeigen.
12 Backups
Drei Ebenen – je mehr, desto ruhiger schlaefst du.
- CloudPanel-Backups: Admin Area → Backups – täglich, per
rclonezu einer Hetzner Storage Box (~3,20 €/Monat für 1 TB) oder S3-kompatiblem Speicher. Sichert Dateien und Datenbanken. - Hetzner-Server-Backups: beim Server aktivieren (+20 % vom Serverpreis, pauschal) – automatische tägliche Voll-Snapshots, 7 Tage Aufbewahrung, werden beim Löschen des Servers mitgelöscht. Oder manuelle Snapshots (0,0143 €/GB/Monat, Stand Aug 2026, Verwaltung: Console → Images) vor größeren Änderungen – die bleiben, bis du sie löschst.
- WordPress-Plugin (z. B. UpdraftPlus) zusätzlich in einen dritten Speicher – unabhängig vom Server, gut für „schnell mal eine Seite zurücksetzen“.
Ein Backup ist erst eins, wenn du es einmal zurückgespielt hast – am besten auf einer Wegwerf-Site oder einem Test-Server.
+ Kosten & Betrieb
Preise sind Richtwerte. Hetzner hat 2026 zweimal erhöht (zuletzt 15. Juni: CX/CAX +30–40 %, CPX/CCX über 100 %). Aktuelle Server-Preise, alle Nebenposten, ein Rechner und Beispielrechnungen stehen zentral in Kosten & Budget.
| Posten | ~€/Tag | ca. €/Monat |
|---|---|---|
Server CPX22 (2 vCPU / 4 GB) – CX23/CAX11 ~5,5–6 falls frei | ~0,64 | ~19,5 |
| Primary-IP (IPv4) | ~0,02 | ~0,50 |
Server CPX32 (4 / 8) – statt CPX22, für WooCommerce / mehrere Sites | ~1,17 | ~35,5 |
| Hetzner-Server-Backups (+20 %) | ~0,03 | ~1 |
| Hetzner Storage Box 1 TB (für CloudPanel-Backups) | ~0,11 | ~3,20 |
| Domain (.de / .com) | ~0,02 / ~0,03 | ~0,50 / ~1 |
| Cloudflare Free / CloudPanel / SMTP-Free-Tier | 0 | 0 |
| Realistische Summe | ~0,25–0,45 | ~7 – 13 |
Eine WordPress-Site soll online bleiben – sie nachts zu löschen ergibt keinen
Sinn. „Kosten im Griff“ heißt hier: richtig dimensionieren (klein anfangen,
hcloud server change-type wenn nötig), Backups statt teurer Redundanz, und
Cloudflare-Cache, damit ein kleiner Server viel Traffic verträgt.
Nur wenn es eine Test-/Staging-Site ist, die du bloss ab und zu brauchst: dann
passt das cloud.ps1 aus den anderen Anleitungen (Snapshot + löschen + nachts
Auto-Down) auch hier.
+ Alternative: Hetzner Webhosting (der fertige Plan)
Voll gemanagt: Hetzner betreibt Server, OS, PHP, MySQL, Backups, SSL. Panel konsoleH mit Ein-Klick-WordPress-Installer. Du kümmerst dich nur um WordPress selbst.
| Tarif | €/Mon | Speicher | MySQL | PHP-Prozesse | für |
|---|---|---|---|---|---|
| S | 1,90 | 10 GB (Gigabyte) | 1 | 2 | knapp für WP |
| M | 4,90 | 50 GB | 5 | 5 | Blog / Firmenseite |
| L | 9,90 | 100 GB | 20 | 10 | + Redis, SSH – WooCommerce / plugin-lastig |
| XL | 19,90 | 300 GB | 50 | 20 | + Telefon-Support |
- Dabei: unbegrenzt Postfaecher, tägliche Backups, Let’s-Encrypt-SSL, Varnish-Cache. Ab L auch Redis & SSH.
- Nicht dabei: die Domain (separat bestellen).
- Ablauf: Tarif buchen → in konsoleH Domain hinzufügen → App-Installer → WordPress → fertig. Mailversand geht über Hetzner (kein Port-25-Problem).
- Grenzen: kein root, feste PHP-Config, Shared-CPU, Staging nur manuell.
Faustregel: Ein Blog / eine Firmenseite ohne Sonderwünsche → Webhosting M oder L. Mehrere Sites, viel Traffic, volle Kontrolle, Lernen → die CloudPanel-Anleitung oben.
+ Andere Anbieter
Der CloudPanel-Weg funktioniert auf jeder Ubuntu-/Debian-VM. Richtwerte für 2–4 vCPU / 4–8 GB:
| Anbieter | Sitz | ca. €/Mon | Bemerkung |
|---|---|---|---|
| Hetzner | DE (Deutschland) / FI (Finnland) | 4,50–7 | Diese Anleitung. 20 TB Traffic inkl. |
| netcup | DE / AT | ~5–8 | Günstig, EU (Europäische Union), wenig bekannt. |
| Contabo | DE | ~7–11 | Viel RAM (Random Access Memory)/Speicher fürs Geld, überbucht. |
| IONOS / Strato | DE | ~4–12 | Auch fertige „Managed WordPress“-Tarife. |
| Managed WordPress (Raidboxes, Kinsta, WP Engine) | DE / global | ~15–35 | Null Server-Arbeit, Staging, Experten-Support – deutlich teurer. |