# Infoscreen Deployment Guide Komplette Anleitung für das Deployment des Infoscreen-Systems auf einem Ubuntu-Server mit GitHub Container Registry. ## 📋 Übersicht - **Phase 0**: Docker Installation (optional) - **Phase 1**: Images bauen und zur Registry pushen - **Phase 2**: Ubuntu-Server Installation - **Phase 3**: System-Konfiguration und Start --- ## 🐳 Phase 0: Docker Installation (optional) Falls Docker noch nicht installiert ist, wählen Sie eine der folgenden Optionen: ### Option A: Ubuntu Repository (schnell) ```bash # Standard Ubuntu Docker-Pakete sudo apt update sudo apt install docker.io docker-compose-plugin -y sudo systemctl enable docker sudo systemctl start docker ``` ### Option B: Offizielle Docker-Installation (empfohlen) ```bash # Alte Docker-Versionen entfernen sudo apt remove docker docker-engine docker.io containerd runc -y # Abhängigkeiten installieren sudo apt update sudo apt install ca-certificates curl gnupg lsb-release -y # Docker GPG-Key hinzufügen sudo mkdir -p /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg # Docker Repository hinzufügen echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null # Docker installieren (neueste Version) sudo apt update sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y # Docker aktivieren und starten sudo systemctl enable docker sudo systemctl start docker # User zur Docker-Gruppe hinzufügen sudo usermod -aG docker $USER # Neuanmeldung für Gruppenänderung erforderlich exit # Neu einloggen via SSH ``` ### Docker-Installation testen ```bash # Test-Container ausführen docker run hello-world # Docker-Version prüfen docker --version docker compose version ``` --- ## 🏗️ Phase 1: Images bauen und pushen (Entwicklungsmaschine) ### 1. GitHub Container Registry Login ```bash # GitHub Personal Access Token mit write:packages Berechtigung erstellen echo $GITHUB_TOKEN | docker login ghcr.io -u robbstarkaustria --password-stdin # Oder interaktiv: docker login ghcr.io # Username: robbstarkaustria # Password: [GITHUB_TOKEN] ``` ### 2. Images bauen und taggen ```bash cd /workspace # Server-Image bauen docker build -f server/Dockerfile -t ghcr.io/robbstarkaustria/infoscreen-api:latest . # Dashboard-Image bauen docker build -f dashboard/Dockerfile -t ghcr.io/robbstarkaustria/infoscreen-dashboard:latest . # Listener-Image bauen (falls vorhanden) docker build -f listener/Dockerfile -t ghcr.io/robbstarkaustria/infoscreen-listener:latest . # Scheduler-Image bauen (falls vorhanden) docker build -f scheduler/Dockerfile -t ghcr.io/robbstarkaustria/infoscreen-scheduler:latest . ``` ### 3. Images zur Registry pushen ```bash # Alle Images pushen docker push ghcr.io/robbstarkaustria/infoscreen-api:latest docker push ghcr.io/robbstarkaustria/infoscreen-dashboard:latest docker push ghcr.io/robbstarkaustria/infoscreen-listener:latest docker push ghcr.io/robbstarkaustria/infoscreen-scheduler:latest # Status prüfen docker images | grep ghcr.io ``` --- ## 🖥️ Phase 2: Ubuntu-Server Installation ### 4. Ubuntu Server vorbereiten ```bash sudo apt update && sudo apt upgrade -y # Grundlegende Tools installieren sudo apt install git curl wget -y # Docker installieren (siehe Phase 0) ``` ### 5. Deployment-Dateien übertragen ```bash # Deployment-Ordner erstellen mkdir -p ~/infoscreen-deployment cd ~/infoscreen-deployment # Dateien vom Dev-System kopieren (über SCP) scp user@dev-machine:/workspace/docker-compose.prod.yml . scp user@dev-machine:/workspace/.env . scp user@dev-machine:/workspace/nginx.conf . scp -r user@dev-machine:/workspace/certs ./ scp -r user@dev-machine:/workspace/mosquitto ./ # Alternative: Deployment-Paket verwenden # Auf Dev-Maschine (/workspace): # tar -czf infoscreen-deployment.tar.gz docker-compose.prod.yml .env nginx.conf certs/ mosquitto/ # scp infoscreen-deployment.tar.gz user@server:~/ # Auf Server: tar -xzf infoscreen-deployment.tar.gz ``` ### 6. Mosquitto-Konfiguration vorbereiten ```bash # Falls mosquitto-Ordner noch nicht vollständig vorhanden: mkdir -p mosquitto/{config,data,log} # Mosquitto-Konfiguration erstellen (falls nicht übertragen) cat > mosquitto/config/mosquitto.conf << 'EOF' # ----------------------------- # Netzwerkkonfiguration # ----------------------------- listener 1883 allow_anonymous true # password_file /mosquitto/config/passwd # WebSocket (optional) listener 9001 protocol websockets # ----------------------------- # Persistence & Pfade # ----------------------------- persistence true persistence_location /mosquitto/data/ log_dest file /mosquitto/log/mosquitto.log EOF # Berechtigungen für Mosquitto setzen sudo chown -R 1883:1883 mosquitto/data mosquitto/log chmod 755 mosquitto/config mosquitto/data mosquitto/log ``` ### 7. Environment-Variablen anpassen ```bash # .env für Produktionsumgebung anpassen nano .env # Wichtige Anpassungen: # API_URL=http://YOUR_SERVER_IP:8000 # DB_HOST=db (sollte bereits korrekt sein) # Alle Passwörter für Produktion ändern ``` --- ## 🚀 Phase 3: System-Start und Konfiguration ### 8. Images von Registry pullen ```bash # GitHub Container Registry Login (falls private Repository) echo $GITHUB_TOKEN | docker login ghcr.io -u robbstarkaustria --password-stdin # Images pullen docker compose -f docker-compose.prod.yml pull ``` ### 9. System starten ```bash # Container starten docker compose -f docker-compose.prod.yml up -d # Status prüfen docker compose ps docker compose logs -f ``` ### 10. Firewall konfigurieren ```bash sudo ufw enable sudo ufw allow ssh sudo ufw allow 80/tcp sudo ufw allow 443/tcp sudo ufw allow 1883/tcp # MQTT sudo ufw allow 9001/tcp # MQTT WebSocket sudo ufw status ``` ### 11. Installation validieren ```bash # Health-Checks curl http://localhost/api/health curl https://localhost -k # -k für selbstsignierte Zertifikate # Container-Status docker compose ps # Logs bei Problemen anzeigen docker compose logs server docker compose logs dashboard docker compose logs mqtt ``` ### 12. Automatischer Start (optional) ```bash # Systemd-Service erstellen sudo tee /etc/systemd/system/infoscreen.service > /dev/null << 'EOF' [Unit] Description=Infoscreen Application Requires=docker.service After=docker.service [Service] Type=oneshot RemainAfterExit=yes WorkingDirectory=/home/$USER/infoscreen-deployment ExecStart=/usr/bin/docker compose -f docker-compose.prod.yml up -d ExecStop=/usr/bin/docker compose -f docker-compose.prod.yml down TimeoutStartSec=300 [Install] WantedBy=multi-user.target EOF # Service aktivieren sudo systemctl enable infoscreen.service sudo systemctl start infoscreen.service ``` --- ## 🌐 Zugriff auf die Anwendung Nach erfolgreichem Deployment ist die Anwendung unter folgenden URLs erreichbar: - **HTTPS Dashboard**: `https://YOUR_SERVER_IP` - **HTTP Dashboard**: `http://YOUR_SERVER_IP` (Redirect zu HTTPS) - **API**: `http://YOUR_SERVER_IP/api/` - **MQTT**: `YOUR_SERVER_IP:1883` - **MQTT WebSocket**: `YOUR_SERVER_IP:9001` --- ## 🔧 Troubleshooting ### Container-Status prüfen ```bash # Alle Container anzeigen docker compose ps # Spezifische Logs anzeigen docker compose logs -f [service-name] # Container einzeln neustarten docker compose restart [service-name] ``` ### System neustarten ```bash # Komplett neu starten docker compose down docker compose up -d # Images neu pullen docker compose pull docker compose up -d ``` ### Häufige Probleme | Problem | Lösung | |---------|--------| | Container startet nicht | `docker compose logs [service]` prüfen | | Ports bereits belegt | `sudo netstat -tulpn \| grep :80` prüfen | | Keine Berechtigung | User zu docker-Gruppe hinzufügen | | DB-Verbindung fehlschlägt | Environment-Variablen in `.env` prüfen | | Mosquitto startet nicht | Ordner-Berechtigungen für `1883:1883` setzen | --- ## 📊 Docker-Version Vergleich | Aspekt | Ubuntu Repository | Offizielle Installation | |--------|------------------|------------------------| | **Installation** | ✅ Schnell (1 Befehl) | ⚠️ Mehrere Schritte | | **Version** | ⚠️ Oft älter | ✅ Neueste Version | | **Updates** | ✅ Via apt | ✅ Via apt (nach Setup) | | **Stabilität** | ✅ Getestet | ✅ Aktuell | | **Features** | ⚠️ Möglicherweise eingeschränkt | ✅ Alle Features | **Empfehlung:** Für Produktion die offizielle Docker-Installation verwenden. --- ## 📝 Wartung ### Regelmäßige Updates ```bash # Images aktualisieren docker compose pull docker compose up -d # System-Updates sudo apt update && sudo apt upgrade -y ``` ### Backup ```bash # Container-Daten sichern docker compose down sudo tar -czf infoscreen-backup-$(date +%Y%m%d).tar.gz mosquitto/data/ certs/ # Backup wiederherstellen sudo tar -xzf infoscreen-backup-YYYYMMDD.tar.gz docker compose up -d ``` --- **Das Infoscreen-System ist jetzt vollständig über GitHub