Self-Hosting auf dem Mini-PC mit Docker + Cloudflare Tunnel
Wie man mit einem einzigen Mini-PC zu Hause mehrere Webdienste sicher öffentlich macht. HTTPS ohne offene Ports über Cloudflare Tunnel, betrieben mit Docker Compose.
Das Wichtigste
Dienste laufen auf dem Mini-PC mit Docker Compose, und Cloudflare Tunnel (cloudflared) liefert Domain und HTTPS ohne einen einzigen offenen Port. Keine Router-Konfiguration, keine feste IP, keine Zertifikatserneuerung nötig.
Auf dieser Seite
Cloud-Gebühren sind für kleine Projekte eine unterschätzte Belastung. Ich betreibe mehrere Dienste, diesen Blog eingeschlossen, auf einem einzigen Mini-PC bei mir zu Hause. So funktioniert es.
Warum ein Mini-PC
- Läuft rund um die Uhr, die Stromkosten liegen bei ein paar Euro im Monat
- Mit Docker ist die Deploy-Umgebung identisch zur Cloud
- Wächst der Traffic, kann man dann immer noch umziehen
Es bleibt genau ein Problem: "Wie macht man das Heimnetzwerk sicher nach außen zugänglich?"
Öffnen Sie keine Ports
Der klassische Weg: Portweiterleitung am Router + DDNS + Zertifikatserneuerung. Das ist umständlich und riskant, weil man das Heimnetzwerk direkt ins Internet öffnet.
Stattdessen kommt Cloudflare Tunnel zum Einsatz. Auf dem Mini-PC öffnet cloudflared eine Verbindung nach außen zu Cloudflare, und der Traffic kommt durch diesen Tunnel herein. Die Zahl der von außen offenen Inbound-Ports: null.
사용자 → Cloudflare(HTTPS) → 터널 → 미니 PC 의 컨테이너
- Keine öffentliche IP, keine Portweiterleitung nötig
- HTTPS-Zertifikate übernimmt Cloudflare automatisch
- Eine dynamische IP spielt keine Rolle
Dienste mit Docker Compose bündeln
Jeder Dienst läuft als Container. Bei einer Next.js-App baut man mit output: "standalone" ein schlankes Image.
services:
blog:
build:
context: .
dockerfile: apps/blog/Dockerfile
container_name: why-next-blog
restart: unless-stopped
networks: [api]
networks:
api:
external: true # cloudflared 와 같은 네트워크
Entscheidend ist, den Container ins selbe Docker-Netzwerk wie cloudflared zu legen. Nur so findet der Tunnel den Dienst über den Containernamen.
Domain verbinden
Im Cloudflare-Dashboard (oder in der Tunnel-Konfiguration) fügt man einen Public Hostname hinzu.
blog.example.com → http://why-next-blog:3001
Das war es schon. Nach docker compose up -d --build ist die Seite wenige Minuten später unter der Domain erreichbar.
Fazit
- Mini-PC + Docker = günstig und identisch zum Cloud-Deployment
- Cloudflare Tunnel liefert HTTPS und Domain ohne offene Ports
- Container ins selbe Netzwerk wie cloudflared legen
- Public Hostname mappt
Domain → Container:Port
Für kleine Dienste trägt diese Kombination erstaunlich lange. Ich betreibe so mehrere Apps und baue meine Projekte Stück für Stück aus.
Häufige Fragen
Meine Heim-IP ist dynamisch. Ist das ein Problem?
Nein. Bei Cloudflare Tunnel öffnet der Mini-PC selbst eine ausgehende Verbindung zu Cloudflare, daher braucht es weder öffentliche IP noch Portweiterleitung noch DDNS.
Kostet das etwas?
Cloudflare Tunnel selbst ist kostenlos. Nur die Domain kostet etwas, dann kann es losgehen.
Ähnliche Beiträge
- 💻 Entwicklung
Einen MDX-Blog mit Next.js selbst bauen - So ist dieser Blog entstanden
Wie dieser Blog ohne CMS, nur mit Markdown-Dateien und dem Next.js 16 App Router entstanden ist. Ordnerstruktur, MDX-Setup und SEO, erklärt am echten Code.
- 💻 Entwicklung
5 Apps in einem Repository - Das Turborepo-Monorepo eines Solo-Entwicklers
Wie man mehrere Apps und Websites in einem einzigen Repository mit Turborepo verwaltet. Gemeinsame Konfiguration teilen, mit dem Cache Builds sparen und pro App deployen, aus der Praxis erklärt.
- 📚 Lernen
Englische Vokabeln nicht pauken, sondern in eigene Sätze verwandeln
Warum das Auswendiglernen von Vokabellisten beim Sprechen nicht hilft, und wie man Dinge aus dem Alltag in eigene Sätze verwandelt, die im Gedächtnis bleiben.