Sicherheit & Best Practices
Secrets Management
# NIEMALS Secrets in Git committen!
.env Dateien immer in .gitignore
Secrets-Locations:
/home/revolt/.env # Stoat-Konfiguration
/home/revolt/dreylo-profile-api/.env # Profile API (aber compose.yml hat Vorrang)
/home/revolt/dreylo-bot/.env # Bot-Token
ENV-Variablen im compose.yml sind im Klartext - nur für lokalen Server OK
Zugriffsschutz
# SSH-Keys verwenden, Passwort-Login deaktivieren
/etc/ssh/sshd_config:
PasswordAuthentication no
PubkeyAuthentication yes
Firewall (UFW)
ufw status
ufw allow 22/tcp # SSH
ufw allow 80/tcp # HTTP
ufw allow 443/tcp # HTTPS
ufw deny 27017/tcp # MongoDB NICHT von außen!
ufw deny 6379/tcp # Redis NICHT von außen!
Docker-Sicherheit
# Container nicht als root laufen lassen (wenn möglich)
Im Dockerfile:
USER node
Ports nicht unnötig nach außen exposen
Im compose.yml: nur Caddy braucht 80/443
Alle anderen Services: KEIN ports: mapping!
MongoDB absichern
# Auth prüfen
docker exec stoat-database-1 mongosh --eval "db.adminCommand({listDatabases:1})"
Sollte auth verlangen (je nach Konfiguration)
Falls nicht: Auth aktivieren!
Regelmäßige Backups
#!/bin/bash
backup.sh - täglich via cron ausführen
DATE=$(date +%Y%m%d_%H%M)
BACKUP_DIR="/home/backup"
mkdir -p $BACKUP_DIR
MongoDB Backup
docker exec stoat-database-1 mongodump --out /tmp/mongobak
docker cp stoat-database-1:/tmp/mongobak $BACKUP_DIR/mongo_$DATE
docker exec stoat-database-1 rm -rf /tmp/mongobak
Komprimieren
tar -czf $BACKUP_DIR/mongo_$DATE.tar.gz -C $BACKUP_DIR mongo_$DATE
rm -rf $BACKUP_DIR/mongo_$DATE
Alte Backups (>14 Tage) löschen
find $BACKUP_DIR -name "*.tar.gz" -mtime +14 -delete
echo "✅ Backup erstellt: mongo_$DATE.tar.gz"
# Cron einrichten
crontab -e
Täglich um 3 Uhr:
0 3 * /home/backup.sh >> /var/log/backup.log 2>&1
Updates
# Docker Images updaten (Stoat pre-built)
cd /home/revolt
docker compose pull
Nach Pull: Container mit neuem Image starten
docker compose up -d
Eigene Images rebuild
docker build --no-cache -t dreylo-web .