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¶
- Öffnen Sie Portainer und erstellen Sie einen Admin-Account.
- Wählen Sie die local Umgebung aus.
- 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
repoRechten.
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.
- Klicken Sie im Stack-Formular auf Load variables from .env file (oder fügen Sie den Inhalt manuell in den Editor "Environment variables" ein).
- Passen Sie URLS, Passwörter und SMTP-Daten an.
Wichtige Hinweise¶
- Stellen Sie sicher, dass die Ports
80,443(Nginx) und9443(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:
- Das Repo klonen.
- Die Docker-Images bauen oder pullen.
- 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:
- 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. - Login Nginx Admin UI:
http://<server-ip>:81.- Default:
admin@example.com/changeme(Passwort sofort ändern!).
- Default:
- 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.
backendfür die API,frontendfür die UI,grafanafü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:
frontendPort80 - Docs:
docsPort8000 - Grafana:
grafanaPort3000 - Prometheus:
prometheusPort9090 - Loki:
lokiPort3100 - PGAdmin:
pgadminPort80 - Filebrowser:
file-managerPort80 - Uptime Kuma:
uptime-kumaPort3001
Grafana (Monitoring)¶
- Login:
admin/admin(Passwort ändern). - 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".
- 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.
- Erstellen Sie den ersten Admin-User.
- 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).
- Notifications (Einstellungen -> Benachrichtigungen):
- Richten Sie SMTP (E-Mail) ein, um bei Ausfällen sofort benachrichtigt zu werden.
- Nutzen Sie die SMTP-Daten aus Ihrer
.envDatei.
PGAdmin (Datenbank-Verbindung)¶
Um Zugriff auf die Datenbank-Tabellen zu erhalten, muss der Server in PGAdmin registriert werden.
- Login in PGAdmin (
PGADMIN_DEFAULT_EMAIL/PGADMIN_DEFAULT_PASSWORD). - 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 ausPOSTGRES_DB). - Username: Wert aus
POSTGRES_USER. - Password: Wert aus
POSTGRES_PASSWORD. - Speichern.