1. Anforderungen an den Server-Anbieter beim Self-Hosting
Wer eigene Dienste produktiv betreibt, benötigt Funktionen, die bei vielen Cloud-Anbietern standardmäßig gesperrt sind — insbesondere ausgehenden TCP-Port 25, frei konfigurierbare IPv4- und IPv6-Reverse-DNS-Einträge (PTR), konstante I/O-Leistung ohne Steal-Time sowie herunterladbare Komplett-Backups:
| Infrastruktur-Anforderung | netcup Root-Server G12.5 | netcup VPS G12.5 | Hetzner Cloud (CX / CCX) | OVHcloud VPS | Contabo Cloud VPS |
|---|---|---|---|---|---|
| Dauerhafte 100-%-CPU-Last Datenbanken, CI/CD, Docker-Hosts | Uneingeschränkt (dedizierte physische EPYC 9645 Kerne) | Shared vCores (Fair-Use bei Dauerlast) | CX: Shared vCPU CCX: dedizierte vCPU | Shared vCores | Shared vCPU |
| Ausgehender TCP-Port 25 (SMTP) Eigener Mailserver (Postfix / Mailcow) | Sofort selbst freischaltbar in der SCP-Firewall (Regel „Mail block“ entfernen) | Sofort selbst freischaltbar in der SCP-Firewall | Bei Neukunden bis zur 1. bezahlten Monatsrechnung gesperrt + manueller Antrag | Je nach Region eingeschränkt / Support-Ticket | Nach Verifizierung offen |
| IPv4- & IPv6-Reverse-DNS (PTR) | Sofort im SCP einstellbar (1× IPv4 + /64 IPv6) | Sofort im SCP einstellbar | Sofort in Cloud Console / API | Im OVH Manager einstellbar | Im Kundenpanel einstellbar |
| Eigene ISO-Uploads & Rescue | Eigener ISO-Upload im SCP + Grml-Rescue-System | Eigener ISO-Upload im SCP + Grml-Rescue-System | ISO-Bibliothek + Linux-Rescue (eigene ISOs per Support-Ticket) | Vorgefertigte OS-Templates + Netboot | Add-on oder Cloud-Init |
| Lokaler Snapshot-Export Offsite-Backup | 1 kostenloser .raw.zst-Download im gestoppten Zustand | 1 kostenloser .raw.zst-Download im gestoppten Zustand | Cloud-Snapshots (0,011 €/GB/Mon. bei 0 % MwSt.); kein Raw-Image-Download | Kostenpflichtiges Snapshot-Add-on | Nur Cloud-Snapshots |
| Preisstabilität bei Verlängerung | Verlängerung zum selben Grundpreis | Verlängerung zum selben Grundpreis | Fester Stunden-/Monatspreis | Regulärer Verlängerungspreis | 24-Monats-Aktionsrabatt entfällt nach der Erstlaufzeit |
2. Eigenen Mailserver einrichten (Port 25, FCrDNS, DNS-Zone & Postfix IPv6-Bindung)
Für eine zuverlässige Zustellung an Gmail, Microsoft 365 und deutsche Provider (T-Online, GMX/Web.de) sind drei überprüfbare Konfigurationsschritte erforderlich:
- Ausgehenden TCP-Port 25 im SCP freischalten & per CLI testen: Öffne auf netcup-Servern SCP → Server wählen → Firewall, entferne die voreingestellte Policy
netcup Mail block, klicke auf Speichern und prüfe die Verbindung sowie das Reverse-DNS (FCrDNS) in der Shell:# 1. Ausgehende TCP-Verbindung auf Port 25 zum Gmail-MX prüfen nc -zv -w 5 gmail-smtp-in.l.google.com 25 # 2. Prüfen, ob IPv4- und IPv6-PTR exakt auf deinen Mail-Hostnamen auflösen dig +short -x 203.0.113.45 dig +short -x 2a03:4000:60:1234::1 - Pflicht-Einträge in der DNS-Zone & im SCP Reverse-DNS (PTR): Hinterlege unter SCP → Network sowohl für deine IPv4-Adresse als auch für deine gewählte IPv6-Adresse (
::1) den PTR-Recordmail.example.deund lege die passenden DNS-Records an:Typ Host / Name Wert / Beispiel-Ziel Funktion Amail.example.de203.0.113.45Verweist den Mail-Hostnamen auf deine IPv4 (muss exakt zum SCP IPv4-PTR passen) AAAAmail.example.de2a03:4000:60:1234::1Verweist den Mail-Hostnamen auf die IPv6 (muss exakt zum SCP IPv6-PTR passen) MXexample.de10 mail.example.de.Leitet eingehende E-Mails deiner Domain an deinen Mail-Host weiter TXT(SPF)example.de"v=spf1 mx -all"Erlaubt ausschließlich den im MX-Record genannten Hosts den Mailversand TXT(DKIM)dkim._domainkey"v=DKIM1; k=rsa; p=MIIBIjANBg..."Öffentlicher Schlüssel für die kryptografische DKIM-Signatur (Rspamd / OpenDKIM / Stalwart) TXT(DMARC)_dmarc.example.de"v=DMARC1; p=quarantine; rua=mailto:postmaster@example.de"Weist empfangende Server an, Mails ohne gültiges SPF/DKIM in Quarantäne zu schieben - Postfix fest an die PTR-IPv6-Adresse binden (
/etc/postfix/main.cf): Damit der Linux-Kernel beim ausgehenden Versand über ein/64-Subnetz keine zufällige Nebenadresse ohne PTR-Eintrag wählt (was bei Gmail sofort zu IPv6-Ablehnungen führt), binde Postfix explizit an die Hauptadressen:# /etc/postfix/main.cf — feste Quell-IP-Bindung für FCrDNS-Konformität myhostname = mail.example.de inet_protocols = all smtp_bind_address = 203.0.113.45 smtp_bind_address6 = 2a03:4000:60:1234::1 smtp_helo_name = mail.example.de smtp_tls_security_level = may
3. Docker Compose, daemon.json & die SCP-Firewall-Regelmatrix
Ein mit -p 5432:5432 veröffentlichter Container-Port wird von Docker direkt in die nat- / FORWARD-Chains des Linux-Kernels geschrieben und umgeht damit lokale UFW- / iptables INPUT-Regeln. So sicherst du den Host zweistufig ab:
- Interne Container an
127.0.0.1binden und Log-Rotation in/etc/docker/daemon.jsonbegrenzen:{ "log-driver": "json-file", "log-opts": { "max-size": "20m", "max-file": "3" }, "live-restore": true } - Eingehenden Traffic vor der VM in der SCP Stateful Firewall filtern: Da die SCP-Firewall auf dem Host-Hypervisor vor dem Netzwerkinterface der VM sitzt, kann Docker sie nicht umgehen:
Nr. Richtung Protokoll Port(s) Quelle / Ziel Aktion & Zweck 1 INGRESS TCP 22Eigene Admin-IP / VPN-Subnetz (oder 0.0.0.0/0)ACCEPT — SSH-Zugang 2 INGRESS TCP 80, 4430.0.0.0/0, ::/0ACCEPT — Reverse-Proxy (Caddy / Traefik / Nginx) 3 INGRESS UDP 4430.0.0.0/0, ::/0ACCEPT — HTTP/3 (QUIC) 4 INGRESS TCP 25, 465, 587, 9930.0.0.0/0, ::/0ACCEPT — Mailserver (SMTP + IMAPS) 5 INGRESS ICMP / ICMPv6 Alle 0.0.0.0/0, ::/0ACCEPT — Pflicht für Path-MTU-Discovery & IPv6 Neighbor Discovery 6 INGRESS ALL Alle übrigen Ports 0.0.0.0/0, ::/0DROP — Blockiert direkten Zugriff auf Docker-Ports (5432, 6379 usw.)
4. PostgreSQL NVMe-Tuning für einen 8-GB-Root-Server (RS 1000 G12.5)
Die Standardwerte von PostgreSQL sind für Magnetfestplatten und 128 MB Shared Memory ausgelegt. Auf einem Server mit 4 dedizierten EPYC-Kernen, 8 GB DDR5 RAM und NVMe-Storage wie dem netcup RS 1000 G12.5 empfiehlt sich folgende postgresql.conf:
# postgresql.conf — optimiert für 4 dedizierte EPYC-Kerne, 8 GB RAM, NVMe-SSD
shared_buffers = 2GB # 25 % des Gesamtspeichers
effective_cache_size = 6GB # 75 % des Gesamtspeichers (OS Page Cache + shared_buffers)
maintenance_work_mem = 512MB # Beschleunigt VACUUM und CREATE INDEX
work_mem = 16MB # Pro Sort-/Hash-Operation
max_worker_processes = 4 # Entspricht den 4 dedizierten EPYC-Kernen
max_parallel_workers_per_gather = 2
max_parallel_workers = 4
random_page_cost = 1.1 # Signalisiert dem Query-Planner schnellen NVMe-Speicher (Standard: 4.0)
effective_io_concurrency = 200 # Parallele asynchrone NVMe-I/O-Anfragen
wal_compression = zstd # Reduziert WAL-Schreiblast auf der NVMe
checkpoint_completion_target = 0.9
5. Empfohlene Tarife & aktuelle Gutscheincodes
netcup Neukunden-Gutschein (4,20 € Netto / 5 € Brutto)
- Erste Bestellung eines neuen Kontos
- 4,20 € Netto-Abzug bei 0 % MwSt. (5 € Brutto)
- Nicht für Domains, VPS ARM, VPS Lite
4,20 € Netto-Rabatt (0 % MwSt.)
Wert 4,20 €(einmaliger Abzug mit 0 % MwSt. (Netto); Nennwert 5,00 € inkl. 19 % MwSt.)
36nc178336462704 Ersatzcodes
36nc1783364627436nc1783364627236nc1783364627136nc17833646273
Produktgutscheine sind Einmalcodes. Meldet netcup „bereits eingelöst“, nimm den nächsten.
2 Monate gratis
Wert 36,52 €(2 × 18,26 € · 12-Monats-Preis, 0 % MwSt. (Netto))
6874nc179403917804 Ersatzcodes
6874nc179401292806874nc179421966206874nc179421525106874nc17943134860
Produktgutscheine sind Einmalcodes. Meldet netcup „bereits eingelöst“, nimm den nächsten.
1 Monat gratis
Wert 34,20 €(1 × 34,20 € · 12-Monats-Preis, 0 % MwSt. (Netto))
6875nc179390168504 Ersatzcodes
6875nc179388063806875nc179422349406875nc179390868106875nc17937997610
Produktgutscheine sind Einmalcodes. Meldet netcup „bereits eingelöst“, nimm den nächsten.
1 Monat gratis
Wert 12,18 €(1 × 12,18 € · 12-Monats-Preis, 0 % MwSt. (Netto))
6877nc179405205504 Ersatzcodes
6877nc179396344116877nc179428587106877nc179405148606877nc17939050380
Produktgutscheine sind Einmalcodes. Meldet netcup „bereits eingelöst“, nimm den nächsten.