❓ FAQ - Häufig gestellte Fragen
Für junge Krümel: Hier findest du Antworten auf häufige Fragen!
🌱 Grundsätzliches
Brauche ich Vorkenntnisse?
Hilfreich:
- Grundkenntnisse in Linux (cd, ls, cat)
- SSH-Zugang zu einem Server
- Verständnis was ein Web-Server ist
Nicht nötig:
- Nginx-Expertenwissen
- Programmier-Kenntnisse
- Netzwerk-Studium
💡 Tipp: Lies das Glossar wenn Begriffe unklar sind!
Wie lange dauert die Installation?
Mit Erfahrung: 15-30 Minuten
Als Anfänger: 1-2 Stunden (inkl. Lesen der Docs)
Beim ersten Mal: Plane einen halben Tag ein
Warum länger? Du lernst dabei! 📚
Kann ich etwas kaputt machen?
Ja, aber:
- Das Script erstellt automatisch ein Backup
- Du kannst jederzeit zurückrollen
- Wir testen alles vor dem Live-Schalten
💡 Tipp: Mache das erste Mal auf einem Test-Server!
Was kostet das?
Das Repo: Kostenlos! (MIT License)
SSL-Zertifikate: Kostenlos! (Let's Encrypt)
Server: Kommt drauf an
- VPS bei Hetzner: ~5€/Monat
- Bei DigitalOcean: ~6$/Monat
- Raspberry Pi zu Hause: Einmalig ~50€
🖥️ Server & Hosting
Welcher Server funktioniert?
Empfohlen:
- Ubuntu 20.04 oder neuer
- Debian 11 oder neuer
- Mind. 1GB RAM
- 10GB Speicher
Getestet auf:
- Hetzner Cloud (CX11)
- DigitalOcean Droplets
- Raspberry Pi 4 (4GB)
Nicht empfohlen:
- Shared Hosting (kein Root-Zugriff)
- Windows Server (nutzt Linux!)
Kann ich das auf meinem Raspberry Pi machen?
Ja! 🎉
- Raspberry Pi 3B+ oder neuer
- Mind. 2GB RAM (4GB besser)
- Raspbian OS (Debian-basiert)
- Feste IP oder DynDNS
Aber:
- Langsamer als VPS
- Internet-Anbindung wichtig
- Router-Port-Forwarding nötig
Brauche ich eine eigene Domain?
Nein! Wir nutzen sslip.io:
- Kostenlos
- Keine Registrierung
- Automatische SSL-Zertifikate
- Format: subdomain.DEINE-IP.sslip.io
Beispiel:
IP: 194.164.194.191
Domain: crumbforest.194-164-194-191.sslip.io
Mit eigener Domain? Funktioniert auch, ändere einfach die Config!
🔐 Sicherheit & Auth
Wie sicher ist Basic Auth?
Kombination mit HTTPS: Sehr sicher! ✅
- Passwort wird verschlüsselt übertragen
- Moderne TLS-Verschlüsselung
- Für interne Tools völlig ausreichend
Ohne HTTPS: UNSICHER! ❌
- Passwort im Klartext
- Kann abgefangen werden
Für Produktion:
- Basic Auth + HTTPS = OK ✅
- Für Banking etc.: OAuth2 besser
Kann ich mehrere Benutzer anlegen?
Ja! So geht's:
# Ersten User anlegen (mit -c für "create")
htpasswd -c /etc/nginx/.htpasswd alice
# Weitere User hinzufügen (OHNE -c!)
htpasswd /etc/nginx/.htpasswd bob
htpasswd /etc/nginx/.htpasswd charlie
# Alle User anzeigen
cat /etc/nginx/.htpasswd | cut -d: -f1
Wichtig: Beim ersten Mal -c, danach NIE MEHR! Sonst überschreibst du die Datei!
Was ist wenn ich mein Passwort vergesse?
Kein Problem:
# Für einen User neu setzen
htpasswd /etc/nginx/.htpasswd username
# Gib neues Passwort ein
# Nginx neu laden
systemctl reload nginx
Wie stark sollte mein Passwort sein?
Mindestens:
- 12 Zeichen
- Groß- und Kleinbuchstaben
- Zahlen
- Sonderzeichen
Generieren:
# Zufälliges Passwort (32 Zeichen)
openssl rand -base64 32
💡 Tipp: Nutze einen Passwort-Manager!
🔧 Nginx & Konfiguration
Was ist der Unterschied zwischen sites-available und sites-enabled?
sites-available:
- Alle verfügbaren Configs
- Können aber inaktiv sein
- Wie Rezepte in einem Kochbuch 📖
sites-enabled:
- Aktive Configs (Symlinks)
- Nginx lädt nur diese
- Wie Rezepte die du gerade kochst 🍳
Aktivieren:
ln -s /etc/nginx/sites-available/crumbforest /etc/nginx/sites-enabled/
Warum bekomme ich "nginx -t" Fehler?
Häufige Ursachen:
- Fehlendes Semikolon:
# Falsch:
server_name example.com
# Richtig:
server_name example.com;
- Fehlende Datei:
# Config sagt:
ssl_certificate /pfad/zum/cert.pem;
# Aber Datei existiert nicht!
# Lösung: Prüfen
ls -la /pfad/zum/cert.pem
- Falsche Permissions:
auth_basic_user_file /etc/nginx/.htpasswd;
# Datei existiert aber Nginx kann sie nicht lesen
# Lösung:
chmod 640 /etc/nginx/.htpasswd
chown root:www-data /etc/nginx/.htpasswd
Wie ändere ich eine Config?
# 1. Datei bearbeiten
nano /etc/nginx/sites-available/crumbforest.conf
# 2. Testen ob Syntax OK
nginx -t
# 3. Falls OK: Neu laden
systemctl reload nginx
# 4. Prüfen ob läuft
systemctl status nginx
💡 Tipp: Immer erst nginx -t bevor du reload machst!
🚀 Deployment
Was macht das setup_subdomains.sh Script genau?
Schritt für Schritt:
- ✅ Erstellt automatisches Backup
- ✅ Prüft ob SSL-Zertifikate vorhanden sind
- ✅ Erstellt fehlende SSL-Zertifikate mit Certbot
- ✅ Löscht alte, doppelte Konfigurationen
- ✅ Kopiert neue Configs nach
/etc/nginx/sites-available/ - ✅ Erstellt Symlinks in
/etc/nginx/sites-enabled/ - ✅ Testet Nginx Config (
nginx -t) - ✅ Lädt Nginx neu (
systemctl reload nginx)
Dauer: 2-5 Minuten (je nach SSL-Cert-Erstellung)
Kann ich das Script mehrfach ausführen?
Ja! Das Script ist idempotent:
- Mehrfach ausführen = kein Problem
- Erstellt jedes Mal neues Backup
- Überschreibt alte Configs
Wann nützlich:
- Nach Config-Änderungen
- Zum Testen
- Nach Rollback
Was passiert bei einem Fehler während des Deployments?
Das Script stoppt:
- Bei nginx -t Fehler
- Bei fehlenden Dateien
- Bei Certbot-Problemen
Dann:
1. Fehler wird angezeigt
2. Nginx läuft mit ALTER Config weiter
3. Backup liegt unter /root/nginx-backup-*/
4. Du kannst Fehler beheben und neu versuchen
💡 Tipp: Lies die Fehlermeldung genau!
🧪 Testing
Was bedeuten die Test-Ergebnisse?
✅ Grün (OK):
- Test bestanden
- Alles funktioniert wie erwartet
⚠️ Gelb (WARNING):
- Funktioniert, aber nicht optimal
- Z.B. Cert läuft bald ab (< 30 Tage)
- Solltest du dir ansehen
❌ Rot (FAIL):
- Test fehlgeschlagen
- Etwas funktioniert nicht
- Muss behoben werden!
Warum zeigt curl "401 Unauthorized"?
Das ist gut! 🎉
401 bedeutet: "Auth ist aktiv"
- Server läuft
- HTTPS funktioniert
- Basic Auth schützt die Seite
Testen mit Passwort:
curl -I -u username:password https://domain.sslip.io/
# Sollte 200 OK zeigen
Wie teste ich ob HTTPS funktioniert?
# 1. HTTP sollte umleiten (301/302)
curl -I http://crumbforest.194-164-194-191.sslip.io/
# 2. HTTPS sollte funktionieren (401 oder 200)
curl -I https://crumbforest.194-164-194-191.sslip.io/
# 3. SSL-Cert prüfen
openssl s_client -connect crumbforest.194-164-194-191.sslip.io:443 \
-servername crumbforest.194-164-194-191.sslip.io 2>/dev/null | \
grep -E '(subject|issuer|expire)'
🐛 Fehlersuche
"Permission denied" - Was tun?
Problem: Du hast keine Rechte
Lösungen:
- Mit sudo:
sudo nginx -t
- Als root:
su root # oder
sudo -i
- File Permissions prüfen:
ls -la /etc/nginx/
# Sollte zeigen: drwxr-xr-x root root
"Connection refused" - Was tun?
Problem: Service läuft nicht oder falsche Port
Prüfen:
# 1. Läuft der Service?
systemctl status nginx
systemctl status crumbforest # dein Backend
# 2. Lauscht er auf dem richtigen Port?
netstat -tlnp | grep 8000
# 3. Firewall OK?
ufw status
# Port 80 und 443 sollten ALLOW sein
Backend Service läuft nicht - Was tun?
Diagnose:
# 1. Status prüfen
systemctl status crumbforest
# 2. Logs anschauen
journalctl -u crumbforest -n 50
# 3. Manuell starten versuchen
# (Je nach Service anders)
Häufige Gründe:
- Port schon belegt
- Fehlende Dependencies
- Falsche Permissions
- Fehler im Code
SSL-Zertifikat abgelaufen - Was tun?
Erneuern:
# Alle Certs erneuern
certbot renew
# Nginx neu laden
systemctl reload nginx
# Prüfen
certbot certificates
Automatisch erneuern:
# Ist meist schon eingerichtet
systemctl status certbot.timer
# Testen (Dry-Run)
certbot renew --dry-run
🔄 Rollback & Backup
Wie mache ich einen Rollback?
Automatisches Backup nutzen:
# 1. Letztes Backup finden
BACKUP=$(ls -td /root/nginx-backup-* | head -1)
echo "Nutze: $BACKUP"
# 2. Wiederherstellen
rm -f /etc/nginx/sites-enabled/*
cp -r $BACKUP/sites-available/* /etc/nginx/sites-available/
cp -r $BACKUP/sites-enabled/* /etc/nginx/sites-enabled/
# 3. Testen und neu laden
nginx -t && systemctl reload nginx
💡 Tipp: Es gibt auch ein scripts/rollback.sh Script!
Wo finde ich die Backups?
# Alle Backups auflisten
ls -lh /root/nginx-backup-*
# Neustes Backup
ls -td /root/nginx-backup-* | head -1
# Bestimmtes Backup ansehen
ls -la /root/nginx-backup-20250114-120000/
Wie erstelle ich ein manuelles Backup?
# Mit Zeitstempel
DATE=$(date +%Y%m%d-%H%M%S)
mkdir -p /root/nginx-backup-manual-$DATE
cp -r /etc/nginx/sites-available /root/nginx-backup-manual-$DATE/
cp -r /etc/nginx/sites-enabled /root/nginx-backup-manual-$DATE/
echo "Backup erstellt: /root/nginx-backup-manual-$DATE"
💡 Tipp: Es gibt auch ein scripts/create_backup.sh Script!
📱 URLs & Domains
Warum nutzen wir sslip.io?
Vorteile:
- ✅ Kostenlos
- ✅ Keine Registrierung
- ✅ Automatische Auflösung (IP in Domain)
- ✅ SSL-Certs funktionieren
- ✅ Subdomains möglich
Wie funktioniert's:
- Deine IP: 194.164.194.191
- Wird zu: 194-164-194-191.sslip.io
- Subdomains: crumbforest.194-164-194-191.sslip.io
Nachteil:
- Nicht so schön wie crumbforest.de
- Abhängig von sslip.io Service
Kann ich meine eigene Domain nutzen?
Ja! Änderungen nötig:
- DNS A-Record setzen:
crumbforest.deine-domain.de → 194.164.194.191
ttyd.deine-domain.de → 194.164.194.191
git.deine-domain.de → 194.164.194.191
qdrant.deine-domain.de → 194.164.194.191
- Configs anpassen:
# In jeder .conf Datei:
server_name crumbforest.deine-domain.de; # statt sslip.io
- SSL-Certs neu erstellen:
certbot certonly --nginx -d crumbforest.deine-domain.de
💻 Daily Operations
Wie schaue ich mir Logs an?
Nginx Access Log (wer greift zu):
tail -50 /var/log/nginx/crumbforest.access.log
Nginx Error Log (was geht schief):
tail -50 /var/log/nginx/error.log
Live-Ansicht (folge neuen Einträgen):
tail -f /var/log/nginx/error.log
Alle Logs durchsuchen:
grep "404" /var/log/nginx/*.log
grep -i error /var/log/nginx/*.log
Wie füge ich einen neuen User hinzu?
# Für Crumbforest/Terminal/Gitea
htpasswd /etc/nginx/.htpasswd neuer_user
# Für Qdrant
htpasswd /etc/nginx/.htpasswd_qdrant neuer_user
# Nginx neu laden
systemctl reload nginx
Wie ändere ich ein Passwort?
# Einfach überschreiben
htpasswd /etc/nginx/.htpasswd username
# Gib neues Passwort ein
# Nginx neu laden
systemctl reload nginx
📚 Lernen & Weiterentwicklung
Wo kann ich mehr über Nginx lernen?
Offizielle Docs:
- https://nginx.org/en/docs/
Gute Tutorials:
- DigitalOcean Nginx Tutorials
- Nginx Beginner's Guide
- LinuxBabe Nginx Tutorials
Bücher:
- "Nginx HTTP Server" (4th Edition)
- "Mastering Nginx" (2nd Edition)
Wie kann ich das Repo verbessern?
Pull Requests willkommen! 💚
- Fork das Repo
- Erstelle Branch für deine Änderung
- Teste deine Änderungen
- Erstelle Pull Request mit Beschreibung
Ideen:
- Docs verbessern
- Fehler beheben
- Neue Features
- Mehr Tests
Gibt es eine Community?
Geplant! 🌱
- GitHub Discussions (bald)
- Discord Server (in Planung)
- Monatliche Calls (vielleicht)
Aktuell: Issues auf GitHub nutzen!
🎯 Noch Fragen?
Hier nicht gefunden?
- Schau ins Glossar - Begriffe erklärt
- Lies Troubleshooting - Fehler beheben
- Öffne ein Issue - Wir helfen gerne!
Bug gefunden?
Bitte melde ihn: Issue öffnen
Feature-Wunsch?
Auch ein Issue öffnen mit Label "enhancement"!