Nextcloud ist eine fantastische Self-Hosting-Alternative zu Google Drive oder Dropbox. Wenn man Nextcloud jedoch auf einem günstigen VPS hostet, stösst man durch den lokal begrenzten Festplattenspeicher schnell an Grenzen. Die Lösung? S3 Object Storage!
In diesem Tutorial zeige ich dir detailliert, wie du Nextcloud als Docker-Container auf einem VPS aufsetzt und einen S3-Bucket (z. B. Hetzner Storage Box, AWS S3 oder Wasabi) direkt als primären Speicher einbindest.
Achtung: Dieses Tutorial deckt die Einrichtung der dazugehörigen Backups (für die Datenbank und die Server-Konfigurationen) nicht ab. Für ein Production-Deployment ist ein vollumfängliches Backup-Konzept zwingend erforderlich!
Voraussetzungen
- Ein Server (VPS) mit z.B. Ubuntu 24.04 (mindestens 2 GB RAM empfohlen).
- S3 Zugangsdaten: Ein komplett leerer S3-Bucket mit den dazugehörigen Schlüsseln (
bucket_name,endpoint_url,access_keyundsecret_key). - Eine Domain, die bereits per DNS-A-Record auf die IP-Adresse deines VPS zeigt.
Schritt 1: Docker und Docker Compose installieren
Bevor wir starten, müssen Docker und Docker Compose installiert sein. Auf einem frischen Ubuntu-System geht das über das offizielle Script am einfachsten:
sudo apt-get update && sudo apt-get upgrade -y
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
Schritt 2: Dateistruktur vorbereiten
Erstelle ein Verzeichnis für dein Nextcloud-Projekt. Dort werden wir die Konfiguration sowie die Datenbank mounten:
mkdir -p ~/nextcloud/db ~/nextcloud/html
cd ~/nextcloud
Schritt 3: Docker Compose Datei erstellen
Erstelle eine docker-compose.yml Datei in dem Ordner:
version: '3.8'
services:
db:
image: mariadb:10.11
restart: always
command: --transaction-isolation=READ-COMMITTED --log-bin=binlog --binlog-format=ROW
volumes:
- ./db:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=EinSicheresRootPasswort!
- MYSQL_PASSWORD=EinSicheresDbPasswort
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
app:
image: nextcloud:apache
restart: always
ports:
- 8080:80
volumes:
- ./html:/var/www/html
environment:
- MYSQL_PASSWORD=EinSicheresDbPasswort
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
- MYSQL_HOST=db
# S3 Config für primären Speicher
- OBJECTSTORE_S3_BUCKET=dein-bucket-name
- OBJECTSTORE_S3_REGION=eu-central-1
- OBJECTSTORE_S3_HOST=s3.eu-central-1.amazonaws.com # oder Hetzner/Wasabi Endpoint
- OBJECTSTORE_S3_KEY=dein-access-key
- OBJECTSTORE_S3_SECRET=dein-secret-key
- OBJECTSTORE_S3_SSL=true
- OBJECTSTORE_S3_PORT=443
- OBJECTSTORE_S3_USEPATH_STYLE=true
depends_on:
- db
cron:
image: nextcloud:apache
restart: always
volumes:
- ./html:/var/www/html
entrypoint: /cron.sh
depends_on:
- db
Erklärung der Konfiguration:
- S3 Einstellungen: Wir übergeben Nextcloud via Umgebungsvariablen direkt die S3 Credentials. Das Attribut
USEPATH_STYLE=trueist besonders bei alternativen Anbietern (wie MinIO oder Hetzner) wichtig. - Cron Service: Nextcloud benötigt regelmäßige Hintergrundaufgaben. Der Cron-Container führt diese Performance-schonend im Hintergrund aus, ohne dass wir Cronjobs auf dem Host-System anlegen müssen.
- Wichtig: Tausche die Zugangsdaten für Datenbank und S3 durch deine echten Werte aus!
Schritt 4: S3 als Primary Storage konfigurieren & Container Starten
Nextcloud liest die OBJECTSTORE_S3-Variablen nur beim ersten Start und erstellt automatisch die config.php mit den richtigen Einträgen für den Primary Storage. Es ist fundamental wichtig, dass der S3 Bucket komplett leer ist.
Starte die Container mit:
sudo docker compose up -d
Es dauert ein paar Minuten, bis die Datenbank und Nextcloud initialisiert sind. Du kannst den Status mit sudo docker compose logs -f app überprüfen.
Schritt 5: Reverse Proxy & SSL (z. B. mit Caddy)
Es ist grob fahrlässig, Nextcloud ohne HTTPS (SSL) ins Netz zu stellen. Am einfachsten lässt sich das mit einem Reverse Proxy wie Caddy lösen.
Installiere Caddy auf dem VPS (siehe offizielle Caddy Docs) und konfiguriere in der /etc/caddy/Caddyfile einfach deine Domain:
nextcloud.deinedomain.ch {
reverse_proxy localhost:8080
}
Lade Caddy neu und navigiere in deinem Browser zu der gewählten Domain. Du solltest nun das Nextcloud-Installationsfenster (über ein sicheres Let’s Encrypt Zertifikat) sehen. Dort legst du als finalen Schritt dein Admin-Konto an!
Fazit
Fertig! Deine Nextcloud-Instanz läuft nun. Anstatt den begrenzten (und oft teuren) NVMe-Speicher des VPS zu belasten, werden jetzt sämtliche Dateien transparent und hochverfügbar in deinem S3-Bucket gespeichert.
Das Setup ist nicht nur deutlich günstiger bei grossen Datenmengen, sondern lässt sich zudem leicht skalieren. Falls du Hilfe bei derartigen Setups oder bei professionellen Corporate IT Software-Projekten brauchst, zögere nicht, mich als Freelancer zu kontaktieren.