Runbook erstellt: 2026-03-22
Ziel-VM: vm-600 (10.0.0.148) — Docker-Server
Deployment-Modell: Dev → Staging → Prod (3 Stufen)
Nextcloud wird als Docker-Container auf vm-600 betrieben, reverse-proxied über Zoraxy (Netcup VPS), mit Backups über PBS (vm-150).
Stack:
nextcloud.marcels-domain.de in Zoraxy eingerichtet/data/nextcloud)Funktionsfähige Nextcloud-Instanz lokal auf vm-600, nur intern erreichbar.
version: '3.8'
services:
nextcloud-db:
image: postgres:16-alpine
container_name: nextcloud-db
restart: unless-stopped
environment:
POSTGRES_DB: nextcloud
POSTGRES_USER: nextcloud
POSTGRES_PASSWORD: ${DB_PASSWORD}
volumes:
- nextcloud-db:/var/lib/postgresql/data
nextcloud-redis:
image: redis:7-alpine
container_name: nextcloud-redis
restart: unless-stopped
nextcloud:
image: nextcloud:29-apache
container_name: nextcloud
restart: unless-stopped
ports:
- "8080:80" # Nur intern, kein öffentlicher Port
environment:
POSTGRES_HOST: nextcloud-db
POSTGRES_DB: nextcloud
POSTGRES_USER: nextcloud
POSTGRES_PASSWORD: ${DB_PASSWORD}
REDIS_HOST: nextcloud-redis
NEXTCLOUD_ADMIN_USER: admin
NEXTCLOUD_ADMIN_PASSWORD: ${ADMIN_PASSWORD}
NEXTCLOUD_TRUSTED_DOMAINS: "10.0.0.148 nextcloud.local"
volumes:
- nextcloud-data:/var/www/html
depends_on:
- nextcloud-db
- nextcloud-redis
volumes:
nextcloud-db:
nextcloud-data:
DB_PASSWORD=sicheres-passwort-hier
ADMIN_PASSWORD=admin-passwort-hier
# SSH auf vm-600
ssh claude-agent@10.0.0.148
# Verzeichnis anlegen
sudo mkdir -p /opt/nextcloud/stufe1
cd /opt/nextcloud/stufe1
# Dateien erstellen (docker-compose.yml + .env)
sudo docker compose up -d
# Status prüfen
sudo docker compose ps
sudo docker compose logs nextcloud --tail=50
Nextcloud über Zoraxy mit TLS erreichbar, intern und extern testbar.
nextcloud-staging.example.comhttp://10.0.0.148:8081# Port auf 8081 ändern, trusted domains erweitern
ports:
- "8081:80"
environment:
NEXTCLOUD_TRUSTED_DOMAINS: "10.0.0.148 nextcloud-staging.example.com"
OVERWRITEPROTOCOL: https
OVERWRITECLIURL: https://nextcloud-staging.example.com
version: '3.8'
services:
nextcloud-db:
image: postgres:16-alpine
container_name: nextcloud-db
restart: always
environment:
POSTGRES_DB: nextcloud
POSTGRES_USER: nextcloud
POSTGRES_PASSWORD: ${DB_PASSWORD}
volumes:
- /data/nextcloud/db:/var/lib/postgresql/data
deploy:
resources:
limits:
memory: 512M
nextcloud-redis:
image: redis:7-alpine
container_name: nextcloud-redis
restart: always
command: redis-server --maxmemory 128mb --maxmemory-policy allkeys-lru
nextcloud:
image: nextcloud:29-apache
container_name: nextcloud
restart: always
ports:
- "127.0.0.1:8080:80" # Nur localhost, Zugang nur via Reverse-Proxy
environment:
POSTGRES_HOST: nextcloud-db
POSTGRES_DB: nextcloud
POSTGRES_USER: nextcloud
POSTGRES_PASSWORD: ${DB_PASSWORD}
REDIS_HOST: nextcloud-redis
NEXTCLOUD_TRUSTED_DOMAINS: "nextcloud.example.com"
OVERWRITEPROTOCOL: https
OVERWRITECLIURL: https://nextcloud.example.com
NEXTCLOUD_ADMIN_USER: admin
NEXTCLOUD_ADMIN_PASSWORD: ${ADMIN_PASSWORD}
volumes:
- /data/nextcloud/html:/var/www/html
depends_on:
- nextcloud-db
- nextcloud-redis
deploy:
resources:
limits:
memory: 1G
# Cron für Nextcloud Background Jobs
nextcloud-cron:
image: nextcloud:29-apache
container_name: nextcloud-cron
restart: always
volumes:
- /data/nextcloud/html:/var/www/html
entrypoint: /cron.sh
depends_on:
- nextcloud-db
- nextcloud-redis
# 1. Snapshot von vm-600 in PVE erstellen (ZUERST!)
# → In Proxmox Web-UI oder via NanoClaw Proxmox MCP
# 2. Daten-Verzeichnis anlegen
sudo mkdir -p /data/nextcloud/{db,html}
# 3. Container starten
sudo docker compose up -d
# 4. Status und Logs prüfen
sudo docker compose ps
sudo docker compose logs --tail=100
Nextcloud-Backup erfordert Wartungsmodus während des Backups:
#!/bin/bash
# /opt/scripts/nextcloud-backup.sh
# 1. Wartungsmodus aktivieren
docker exec nextcloud php occ maintenance:mode --on
# 2. Datenbankdump
docker exec nextcloud-db pg_dump -U nextcloud nextcloud > /backup/nextcloud-db-$(date +%Y%m%d).sql
# 3. PBS Backup (via vzdump oder restic)
# PBS sichert automatisch /data/nextcloud als Teil der VM
# 4. Wartungsmodus deaktivieren
docker exec nextcloud php occ maintenance:mode --off
echo "Nextcloud Backup abgeschlossen: $(date)"
# /etc/cron.d/nextcloud-backup
0 3 * * * root /opt/scripts/nextcloud-backup.sh >> /var/log/nextcloud-backup.log 2>&1
cd /opt/nextcloud
# Image-Version in docker-compose.yml erhöhen (z.B. 29 → 30)
sudo docker compose pull
sudo docker compose up -d
sudo docker exec nextcloud php occ upgrade
sudo docker exec nextcloud php occ maintenance:mode --off
| Problem | Ursache | Lösung |
|---|---|---|
| 504 Gateway Timeout | Zoraxy Timeout zu kurz | Timeout auf 300s erhöhen |
| Dateien nicht sichtbar | Cache-Problem | occ files:scan --all ausführen |
| Wartungsmodus hängt | Container-Fehler | occ maintenance:mode --off manuell |
| DB-Verbindungsfehler | PostgreSQL down | docker compose restart nextcloud-db |
# Bei Problemen: Snapshot wiederherstellen
# → In Proxmox Web-UI: VM 600 → Snapshots → Rollback
# Oder nur Container zurücksetzen:
sudo docker compose down
sudo docker compose up -d --force-recreate
Runbook erstellt von NanoClaw am 2026-03-22. Deployment erfordert Marcels Freigabe für Stufe 3.