Skip to content

Portainer (Empfohlen)

Dies ist der empfohlene Weg, das Real Estate Dashboard zu deployen. Portainer bietet eine übersichtliche Oberfläche zur Verwaltung der Docker-Container und ermöglicht einfache Updates via GitOps.

1. Server Vorbereitung (Hetzner)

Firewall (Hetzner Cloud Console)

Bevor Sie beginnen, sollten Sie in der Hetzner Cloud Console eine Firewall für Ihren Server konfigurieren, um nur notwendige Ports zu öffnen.

Empfohlene Regeln (Inbound):

Protokoll Port Quelle Beschreibung
TCP 22 Ihre IP / Alle SSH Zugriff
TCP 80 Alle (::/0, 0.0.0.0/0) HTTP (Nginx ACME Challenge)
TCP 443 Alle (::/0, 0.0.0.0/0) HTTPS (Anwendung)
TCP 9443 Ihre IP Portainer (Admin UI)
TCP 81 Ihre IP Nginx Proxy Manager Admin (Optional, besser via VPN/Tunnel)

SSH Zugriff

Verbinden Sie sich via SSH mit Ihrem Server.

ssh root@<ihre-ip-adresse>

Docker installieren

Stellen Sie sicher, dass das System aktuell ist und Docker installiert ist.

apt update && apt upgrade -y
curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh

2. Portainer installieren

Starten Sie Portainer als eigenständigen Docker Container. Dies ist der einzige Container, den wir manuell starten müssen.

docker run -d -p 8000:8000 -p 9443:9443 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce:latest

Der Server ist nun unter https://<ihre-ip-adresse>:9443 erreichbar. (Ignorieren Sie die SSL-Warnung, da es sich um ein selbstsigniertes Zertifikat handelt).

3. Stack Deployment

  1. Öffnen Sie Portainer und erstellen Sie einen Admin-Account.
  2. Wählen Sie die local Umgebung aus.
  3. Navigieren Sie im linken Menü zu Stacks -> Add stack.

Konfiguration

Wählen Sie die Option Repository aus. Dies ermöglicht Portainer, die Konfiguration direkt von GitHub zu laden.

  • Repository URL: https://github.com/Ihr-User/Real-Estate-Dashboard.git (oder Ihre URL)
  • Repository reference: refs/heads/main
  • Compose path: docker-compose-portainer.yml
  • Authentication: Aktivieren Sie dies, wenn das Repo privat ist.
  • Username: Ihr GitHub Username.
  • Personal Access Token (PAT): Erstellen Sie einen Token auf GitHub (Settings -> Developer Settings -> Personal access tokens) mit repo Rechten.

Automatic Updates (GitOps)

Aktivieren Sie Automatic updates.

  • Fetch interval: Übernimmt Portainer, um regelmäßig nach Änderungen zu suchen (z.B. alle 5 Minuten).
  • Webhook: Kopieren Sie die Webhook URL. Diese muss dem Administrator des Repositories gegeben werden (bzw. in den GitHub Webhook Settings eingetragen werden), damit bei einem Push automatisch deployet wird.

4. Environment Variables

Laden Sie die Beispiel-Umgebungsvariablen herunter und passen Sie diese an Ihre Bedürfnisse an.

Beispiel .env herunterladen

  1. Klicken Sie im Stack-Formular auf Load variables from .env file (oder fügen Sie den Inhalt manuell in den Editor "Environment variables" ein).
  2. Passen Sie URLS, Passwörter und SMTP-Daten an.

Wichtige Hinweise

  • Stellen Sie sicher, dass die Ports 80, 443 (Nginx) und 9443 (Portainer) in der Firewall Ihres Hosters freigegeben sind.
  • Nach dem ersten Start müssen einige Dienste (wie PGAdmin oder Uptime Kuma) noch initial konfiguriert werden.

5. Deploy

Klicken Sie auf Deploy the stack. Portainer wird nun:

  1. Das Repo klonen.
  2. Die Docker-Images bauen oder pullen.
  3. Die Container in der definierten Reihenfolge starten.

Das Dashboard sollte nach wenigen Minuten unter der konfigurierten Domain erreichbar sein.

6. Initiale Konfiguration

Nachdem alle Container laufen, müssen die Dienste miteinander verknüpft und abgesichert werden.

Nginx Proxy Manager (SSL & Domains)

Damit die Dienste sicher über HTTPS erreichbar sind:

  1. DNS Records: Stellen Sie sicher, dass für jede Subdomain (z.B. api.domain.de, grafana.domain.de, portainer.domain.de) ein A-Record bei Ihrem DNS-Anbieter hinterlegt ist, der auf die Server-IP zeigt.
  2. Login Nginx Admin UI: http://<server-ip>:81.
    • Default: admin@example.com / changeme (Passwort sofort ändern!).
  3. Proxy Hosts erstellen:
    • Klicken Sie auf Hosts -> Proxy Hosts -> Add Proxy Host.
    • Domain Names: Die gewünschte Subdomain (z.B. api.deine-domain.de).
    • Scheme: http.
    • Forward Hostname/IP: Der Name des Docker-Containers (z.B. backend für die API, frontend für die UI, grafana für Grafana).
    • Forward Port: Der interne Port des Containers (siehe unten).
    • SSL: Tab "SSL" -> "Request a new SSL Certificate" auswählen, "Force SSL" und "HTTP/2 Support" aktivieren.

Container Ports (Intern):

  • Frontend: frontend Port 80
  • Docs: docs Port 8000
  • Grafana: grafana Port 3000
  • Prometheus: prometheus Port 9090
  • Loki: loki Port 3100
  • PGAdmin: pgadmin Port 80
  • Filebrowser: file-manager Port 80
  • Uptime Kuma: uptime-kuma Port 3001

Grafana (Monitoring)

  1. Login: admin / admin (Passwort ändern).
  2. Data Sources: Navigieren Sie zu Connections -> Data Sources.
    • Prometheus:
    • URL: http://prometheus:9090
    • Klick auf "Save & Test".
    • Loki (Logs):
    • URL: http://loki:3100
    • Klick auf "Save & Test".
  3. Dashboards: Erstellen Sie neue Dashboards, um CPU/RAM (via cAdvisor/Prometheus data) oder Logs anzuzeigen.

Uptime Kuma (Status & Alerts)

Uptime Kuma überwacht, ob Ihre Dienste erreichbar sind.

  1. Erstellen Sie den ersten Admin-User.
  2. Monitor hinzufügen:
    • Monitor Type: HTTP(s).
    • Friendly Name: z.B. "Backend API".
    • URL: https://api.deine-domain.de/health (oder nur / für Frontend).
  3. Notifications (Einstellungen -> Benachrichtigungen):
    • Richten Sie SMTP (E-Mail) ein, um bei Ausfällen sofort benachrichtigt zu werden.
    • Nutzen Sie die SMTP-Daten aus Ihrer .env Datei.

PGAdmin (Datenbank-Verbindung)

Um Zugriff auf die Datenbank-Tabellen zu erhalten, muss der Server in PGAdmin registriert werden.

  1. Login in PGAdmin (PGADMIN_DEFAULT_EMAIL / PGADMIN_DEFAULT_PASSWORD).
  2. Server registrieren:
    • Rechtsklick auf "Servers" -> Register -> Server.
    • Tab "General": Name vergeben (z.B. "Prod DB").
    • Tab "Connection":
    • Host name/address: postgres (Da beide im selben Docker-Netzwerk sind).
    • Port: 5432.
    • Maintenance database: enterprise_db (bzw. Wert aus POSTGRES_DB).
    • Username: Wert aus POSTGRES_USER.
    • Password: Wert aus POSTGRES_PASSWORD.
    • Speichern.