Blog
Kostenloses Hosting einer Nextcloud-Instanz auf Oracle OCI – Komplettguide (2026)
Oracle Cloud Infrastructure (OCI) bietet das großzügigste "Always Free"-Kontingent aller großen Cloud-Anbieter: Bis zu 4 ARM-Kerne (Ampere A1) mit 24 GB RAM und 200 GB Block-Storage – komplett kostenlos, ohne Zeitlimit. perfekt für eine selbstgehostete Nextcloud-Instanz.
Dieser Guide führt Schritt für Schritt durch die Einrichtung einer produktionsreifen Nextcloud auf OCI – mit Docker, Let's Encrypt SSL und eigenem Domain-Namen.
Free Tier Limits – Was Sie kostenlos bekommen
- Rechenleistung: 4 OCPUs + 24 GB RAM (Ampere A1 ARM) oder 2 x AMD Micro (je 1 OCPU, 1 GB RAM)
- Speicher: 200 GB Boot-Volumes (über alle Instanzen verteilt, mind. 47 GB pro Instanz)
- Netzwerk: 10 TB ausgehendes Datenvolumen pro Monat
- Objekt-Storage: 20 GB (optional für Nextcloud External Storage)
- Lastverteiler: 1x 10 Mbps (für SSL-Terminierung)
> Empfehlung: Nutzen Sie die ARM-Instanz (VM.Standard.A1.Flex) mit 2 OCPUs und 12 GB RAM für Nextcloud – das lässt noch Ressourcen für eine zweite ARM-Instanz übrig.
Voraussetzungen
- Ein OCI-Konto (erfordert Kreditkarte zur Verifikation, es erfolgt keine Belastung)
- Ein Domain-Name, der auf Ihre Instanz zeigt
- Grundlegende Linux-Kenntnisse (SSH, Kommandozeile)
Schritt 1: Oracle Cloud Account erstellen
1. Gehen Sie zu cloud.oracle.com
2. Klicken Sie auf "Start for free" und folgen Sie dem Anmeldeformular
3. Nach der Verifikation (Kreditkarte, Telefon) haben Sie Zugriff auf die OCI-Console
Schritt 2: Compute-Instanz erstellen
1. In der OCI-Console: Menu → Compute → Instances → Create Instance
2. Name vergeben, z. B. `nextcloud-server`
3. Image: Ubuntu 22.04 (oder 24.04) Minimal – wichtig: die Minimal-Version hat weniger vorinstallierte Pakete
4. Shape: Klicken Sie auf "Change shape" und wählen Sie:
- Ampere ARM: `VM.Standard.A1.Flex` (Always Free-eligible)
- CPU: 2, Memory: 12 GB
5. Networking: Standard-VCN belassen, öffentliche IP zuweisen
6. SSH-Keys: Hinterlegen Sie Ihren öffentlichen SSH-Key
7. Boot Volume: 100 GB (belassen Sie die Voreinstellung)
Nach dem Klick auf "Create" wird die Instanz in wenigen Minuten gestartet. Notieren Sie die öffentliche IP.
Schritt 3: Erster SSH-Zugriff
ssh ubuntu@<IHRE-ÖFFENTLICHE-IP>
Bei Ubuntu ist der Default-User `ubuntu`. Oracle Linux verwendet `opc`.
Schritt 4: Systemaktualisierung und Docker-Installation
# System aktualisieren
sudo apt update && sudo apt upgrade -y
# Docker installieren
curl -fsSL https://get.docker.com | sudo bash
# Benutzer zur Docker-Gruppe hinzufügen
sudo usermod -aG docker $USER
# Docker-Compose installieren
sudo apt install -y docker-compose-plugin
# Neu verbinden, damit Gruppenmitgliedschaft wirksam wird
exit
Danach erneut einloggen und prüfen:
docker --version
docker compose version
Schritt 5: OCI-Firewall konfigurieren
OCI-Images haben standardmäßig restriktive iptables-Regeln, die Port 80 und 443 blockieren. Das ist die häufigste Fehlerquelle bei der Einrichtung!
# Bestehende Regeln prüfen
sudo iptables -L -n --line-numbers
# Port 80 und 443 freigeben (Regel 6 einfügen)
sudo iptables -I INPUT 6 -m state --state NEW -p tcp --dport 80 -j ACCEPT
sudo iptables -I INPUT 6 -m state --state NEW -p tcp --dport 443 -j ACCEPT
# Regeln dauerhaft speichern (für Ubuntu)
sudo apt install -y iptables-persistent
sudo netfilter-persistent save
Schritt 6: Security List im OCI-Dashboard konfigurieren
OCI hat eine zusätz Netzwerk-Firewall in der Cloud-Console:
1. OCI Console → Networking → Virtual Cloud Networks
2. Klicken Sie auf Ihr VCN (wurde automatisch erstellt)
3. Links: Security Lists → Default Security List
4. Add Ingress Rules (zwei Regeln):
| Source Type | Source CIDR | IP Protocol | Port Range |
|---|---|---|---|
| CIDR | 0.0.0.0/0 | TCP | 80 |
| CIDR | 0.0.0.0/0 | TCP | 443 |
Schritt 7: Nextcloud per Docker Compose starten
Erstellen Sie ein Verzeichnis und eine `docker-compose.yml`:
mkdir -p ~/nextcloud && cd ~/nextcloud
nano docker-compose.yml
Inhalt der `docker-compose.yml`:
services:
mariadb:
image: mariadb:10.11
container_name: nextcloud-mariadb
restart: unless-stopped
volumes:
- mariadb_data:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=<sicheres-root-passwort>
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
- MYSQL_PASSWORD=<sicheres-db-passwort>
command: --transaction-isolation=READ-COMMITTED --log-bin=binlog --binlog-format=ROW
redis:
image: redis:7-alpine
container_name: nextcloud-redis
restart: unless-stopped
app:
image: nextcloud:stable
container_name: nextcloud-app
restart: unless-stopped
ports:
- "80:80"
volumes:
- nextcloud_data:/var/www/html
environment:
- MYSQL_HOST=mariadb
- REDIS_HOST=redis
- NEXTCLOUD_ADMIN_USER=admin
- NEXTCLOUD_ADMIN_PASSWORD=<sicheres-admin-passwort>
- NEXTCLOUD_TRUSTED_DOMAINS=<ihre-domain.de> <ihre-öffentliche-ip>
depends_on:
- mariadb
- redis
volumes:
mariadb_data:
nextcloud_data:
> Wichtig: Ersetzen Sie alle `
Starten Sie den Stack:
docker compose up -d
Nach etwa 30–60 Sekunden ist Nextcloud unter `http://
Schritt 8: Domain konfigurieren
1. Erstellen Sie einen A-Record in Ihrem DNS, der auf die öffentliche IP Ihrer OCI-Instanz zeigt:
nextcloud.ihre-domain.de. IN A <ÖFFENTLICHE-IP>
2. Fügen Sie die Domain in Nextcloud hinzu:
docker exec --user www-data nextcloud-app php occ config:system:set trusted_domains 2 --value=nextcloud.ihre-domain.de
Schritt 9: SSL mit Let's Encrypt
# In den Container wechseln
docker exec -it nextcloud-app bash
# Certbot installieren
apt update && apt install -y certbot python3-certbot-apache
# Zertifikat ausstellen
certbot --apache -d nextcloud.ihre-domain.de --non-interactive --agree-tos -m your@email.com
# Automatische Erneuerung prüfen
certbot renew --dry-run
exit
Alternativ können Sie auch einen Reverse-Proxy wie Traefik oder Caddy vor Nextcloud schalten – das ist für Fortgeschrittene empfehlenswert, aber nicht zwingend erforderlich.
Schritt 10: Grundkonfiguration in Nextcloud
Nach der Installation sollten Sie folgende Optimierungen vornehmen:
# Standard-Telefonregion festlegen (für Kontakte)
docker exec --user www-data nextcloud-app php occ config:system:set default_phone_region --value="DE"
# PHP-Speicherlimit erhöhen
docker exec --user www-data nextcloud-app php occ config:app:set files max_chunk_size --value=10485760
# Cron-Job aktivieren (statt AJAX-Cron)
docker exec --user www-data nextcloud-app php occ background:cron
Und einen System-Cron einrichten:
echo "*/5 * * * * docker exec --user www-data nextcloud-app php -f /var/www/html/cron.php" | sudo crontab -u root -
Optional: Objekt-Storage als externen Speicher
OCI bietet 20 GB kostenlosen Objekt-Storage:
1. OCI Console → Storage → Buckets → Create Bucket
2. Bucket-Namen vergeben, Visibility: "Standard"
3. Notieren Sie Namespace, Bucket-Name und Region
4. Erstellen Sie einen Customer Secret Key (User-Profil → Customer Secret Keys)
5. In Nextcloud: Apps → External Storage Support aktivieren
6. Einstellungen → Externer Speicher → Amazon S3-kompatibel konfigurieren
Troubleshooting: Häufige Probleme
| Problem | Lösung |
|---|---|
| "Site not reachable" | OCI-Security-List und lokale iptables prüfen |
| 502 Bad Gateway | Docker-Container neustarten: `docker compose restart` |
| "Trusted domain" Fehler | Domain mit occ-Befehl hinzufügen (siehe Schritt 8) |
| Kein SSL-Zertifikat | Port 80 muss erreichbar sein für Let's Encrypt |
| Nextcloud-Update | `docker compose pull && docker compose up -d` |
Fazit: Leistungsstarke Cloud zum Nulltarif
Oracle OCI bietet mit dem Always-Free-Tier eine der besten Plattformen für eine selbstgehostete Nextcloud. Die ARM-Instanzen liefern für den privaten Gebrauch oder kleine Teams mehr als ausreichend Leistung – und das dauerhaft kostenlos.
Wichtige Erkenntnisse aus der Praxis:
- Die iptables-Konfiguration ist die häufigste Fehlerquelle – merken Sie sich Schritt 5!
- Docker Compose macht Updates und Wartung einfach
- Die ARM-Instanzen sind auch für andere Dienste (Vaultwarden, Jellyfin, Monitoring) nutzbar
- Ein eigener Domain-Name ist für SSL-Zertifikate empfehlenswert, aber nicht zwingend
Quellen: OCI-Dokumentation (2026), GitHub OCI-Free-Tier Guides, petewinn/OCI-Free-Tier, eigene Erfahrung