Eigene Cloud auf dem Raspberry Pi installieren

Erinnerst du dich noch an Devin Dateiversionierer? Unser fleißiger Student Devin hat in den letzten Beiträgen gelernt, wie er das typische Chaos besiegt. Er nutzt fleißig automatische Synchronisation und hat verstanden, warum ein Cloud-Abgleich allein noch kein Backup ist.

Doch Devin möchte mehr. Als datenbewusster Student stört ihn der Gedanke, seine sensiblen Forschungsdaten und privaten Dokumente auf den Servern von US-Großkonzernen zwischenzulagern. Er will die absolute Kontrolle.

Die Lösung? Selfhosting! In diesem Guide begleiten wir Devin dabei, wie er seine eigene, blitzschnelle und unabhängige Cloud mittels OpenCloud und Docker Compose auf einem kostengünstigen Raspberry Pi aufsetzt.

Warum ausgerechnet OpenCloud?

Bisher war Nextcloud der Platzhirsch im Homelab. Doch wer Nextcloud auf einem Raspberry Pi betreibt, merkt schnell: Die PHP-Architektur kann den kleinen Mini-Computer bei vielen Dateioperationen träge machen.

OpenCloud (basierend auf der modernen oCIS-Architektur) bricht mit dieser Tradition. Es ist komplett in Go geschrieben. Das bedeutet:

  • Extreme Performance: Rasend schnelle Synchronisation, selbst auf kleiner Hardware.
  • Schlankes System: Keine aufgeblähte Datenbank im Hintergrund nötig.
  • Projektzentriert: Mit dem Konzept der "Spaces" perfekt für Devins Lerngruppen geeignet.

Hier sieht man den Unterschied in Devins neuem Setup:

%%{init: { 'theme': 'base'}}%%
graph TD
    subgraph Altes Cloud-Setup
        A[Devins Laptop] -->|Internet| B(US-Cloud-Server)
        B -->|Datenanalyse| C[Unbekannte Dritte]
    end

    subgraph Neues Selfhosting-Setup
        D[Devins Laptop] -->|Lokales Netz / VPN| E[Raspberry Pi zu Hause]
        E -->|Verschlüsseltes Backup| F[Externer Speicher / 3-2-1]
    end

    %% Design-Optimierungen (Farben & Formen)
    style A fill:#f9f9f9,stroke:#333,stroke-width:1px
    style B fill:#ff9999,stroke:#cc0000,stroke-width:2px,rx:10px,ry:10px
    style C fill:#ffe6e6,stroke:#ff0000,stroke-width:1px,stroke-dasharray: 5 5

    style D fill:#f9f9f9,stroke:#333,stroke-width:1px
    style E fill:#d4edda,stroke:#28a745,stroke-width:2px,rx:10px,ry:10px
    style F fill:#d1ecf1,stroke:#17a2b8,stroke-width:1px

Die Hardware-Checkliste

Devin hat in seiner Schublade gekramt und sich folgendes Setup bereitgestellt:

  1. Raspberry Pi 4B oder 5 (idealerweise mit 4 GB oder 8 GB RAM).
  2. MicroSD-Karte (min. 32 GB) für das Betriebssystem (Raspberry Pi OS Lite, 64-Bit). Anleitung zur Installation: Raspberry Pi OS auf SD-Karte installieren
  3. Eine externe USB-3.0-Festplatte/SSD, auf der die eigentlichen Cloud-Daten liegen (wichtig, da SD-Karten durch ständige Schreibzugriffe schnell verschleißen).
  4. Anschluss per LAN-Kabel an den Router (für stabile Übertragungsraten).

Raspberry Pi Bild: Raspberry Pi mit externer Festplatte; Quelle: developer-blog.net

Alternativ kann auch ein alter Laptop oder PC genutzt werden, solange er genügend Arbeitsspeicher für Docker bietet.

Schritt 1: Die Vorbereitung des Raspberry Pi

Bevor wir Docker installieren, sorgen wir dafür, dass Devins externe Festplatte dauerhaft im System eingebunden ist.

Nachdem die Festplatte angeschlossen und formatiert wurde (z.B. mit ext4), ermitteln wir deren UUID und hängen sie fest in der /etc/fstab ein. In diesem Beispiel mounten wir sie nach /mnt/cloud-data.

# Verzeichnis erstellen
sudo mkdir -p /mnt/cloud-data

# Rechte anpassen
sudo chown -R pi:pi /mnt/cloud-data

Schritt 2: Docker & Docker Compose installieren

Docker erlaubt es uns, OpenCloud isoliert in einem sogenannten Container laufen zu lassen. Die Installation auf dem Raspberry Pi ist denkbar einfach:

# System aktualisieren
sudo apt update && sudo apt upgrade -y

# Docker Installations-Skript ausführen
curl -sSL https://get.docker.com | sh

# Dem aktuellen Nutzer (pi) Docker-Rechte geben
sudo usermod -aG docker $USER

Hinweis für Devin: Einmal kurz ausloggen und wieder einloggen, damit die Gruppenrechte aktiv werden!

Schritt 3: Das OpenCloud-Setup einrichten

Wir erstellen nun einen dedizierten Ordner für unser Docker-Setup und laden die Konfiguration direkt aus dem offiziellen OpenCloud-Repository:

mkdir -p ~/opencloud-compose
cd ~/opencloud-compose

# Das offizielle Repository klonen
git clone https://github.com/opencloud-eu/opencloud-compose.git .

Die .env-Datei konfigurieren

Im Ordner befindet sich eine .env.example. Diese kopieren wir und passen sie mit dem Texteditor nano an:

cp .env.example .env
nano .env

Hier nehmen wir folgende wichtige Anpassungen vor:

# Bestimmt, welche Module geladen werden (hier OpenCloud + Traefik als Reverse-Proxy)
COMPOSE_FILE=docker-compose.yml:traefik/opencloud.yml

# Der Pfad zu Devins externer Festplatte
OC_DATA_DIR=/mnt/cloud-data

# Ein sicheres Admin-Passwort für den ersten Login
INITIAL_ADMIN_PASSWORD=DasIstKeinSicheresPasswort2026!

# Deine Domain (z.B. cloud.meine-domain.de). 
# Wenn du keine eigene Domain hast, nutze am besten einen lokalen Hostnamen wie opencloud.local
OC_DOMAIN=opencloud.local

So sieht die Container-Architektur aus, die Docker jetzt für Devin baut:

%%{init: { 'theme': 'base'}}%%
graph LR
    User[Devins Browser] -->|Port 80/443| Traefik[Traefik Reverse Proxy]
    Traefik -->|Internes Docker-Netz| OpenCloud[OpenCloud Core]
    OpenCloud -->|Speichert Daten| Storage[(Externe SSD: /mnt/cloud-data)]

    %% Design-Optimierungen (Farben & Formen)
    style User fill:#f9f9f9,stroke:#333,stroke-width:1px
    style Traefik fill:#cce5ff,stroke:#004085,stroke-width:2px,rx:10px,ry:10px
    style OpenCloud fill:#fff3cd,stroke:#856404,stroke-width:2px,rx:10px,ry:10px
    style Storage fill:#d1ecf1,stroke:#17a2b8,stroke-width:1px

Schritt 4: Die Cloud starten

Jetzt schlägt die Stunde der Wahrheit. Devin startet den gesamten Stack mit einem einzigen Befehl im Hintergrund (-d für detached):

docker compose up -d

Docker lädt nun alle benötigten Images herunter und startet die Container. Das kann beim ersten Mal auf dem Raspberry Pi ein paar Minuten dauern.

Ob alles läuft, überprüft Devin mit:

docker compose ps

Der erste Login

Sobald alle Container den Status running anzeigen, öffnet Devin seinen Browser auf dem Laptop und tippt die IP-Adresse seines Raspberry Pi oder (falls im lokalen DNS konfiguriert) https://opencloud.local ein.

Sicherheitshinweis für den Start: Da wir uns im lokalen Netzwerk befinden und noch kein valides SSL-Zertifikat für eine öffentliche Domain hinterlegt haben, wird der Browser eine Warnung anzeigen ("Unsichere Verbindung"). Diese kann Devin im lokalen Netz ignorieren und auf "Erweitert -> Risiko akzeptieren und fortfahren" klicken.

  • Benutzername: admin
  • Passwort: Das in der .env definierte Passwort.

Et voilà! Devin blickt auf eine blitzschnelle, moderne Weboberfläche. Die Dateiversionierung erreicht Devin direkt über das Kontextmenü einer Datei. Dort kann er die Versionshistorie öffnen und bei Bedarf eine ältere Version wiederherstellen. Bildbeschreibung

Zugriff im Heimnetzwerk vs. von Unterwegs

Im Heimnetz (Lokale Nutzung): Wenn du keine eigene Domain hast, kannst du das System am besten nutzen, indem du in der .env-Datei einen lokalen Hostnamen (wie z.B. opencloud.local oder einfach die IP-Adresse deines Raspberry Pi) einträgst. Um opencloud.local im Heimnetzwerk von anderen Geräten (Handy, Laptop) aus zu erreichen, kannst du diesen Namen am einfachsten in deinem Router (z. B. in der FritzBox) als lokalen DNS-Namen für deinen Raspberry Pi hinterlegen oder ihn in die hosts-Dateien deiner Endgeräte eintragen.

Zugriff von Unterwegs: Möchtest du auch von der Uni, der Arbeit oder unterwegs auf deine Dateien zugreifen, gibt es zwei gängige Wege:

  1. VPN (Sicherste Variante): Du richtest dir einen VPN-Zugang zu deinem Router (z. B. via WireGuard auf der FritzBox) ein. Sobald du das VPN auf dem Handy oder Laptop startest, bist du quasi im Heimnetz und kannst die Cloud ganz normal über opencloud.local erreichen.
  2. Über das öffentliche Internet: Hast du eine eigene Domain (z.B. cloud.meine-domain.de), trägst du diese in der .env bei OC_DOMAIN ein. Wichtig: Wenn du das tust und möchtest, dass das System aus dem Internet erreichbar ist, ist eine Portfreigabe (Port Forwarding) für die Ports 80 und 443 in deinem Router auf die IP-Adresse des Raspberry Pi zwingend notwendig. So kann der Traefik-Container die Anfragen von außen annehmen und auch automatisch sichere SSL-Zertifikate von Let's Encrypt beziehen.

Wie geht es für Devin weiter?

Devin hat nun ein extrem performantes Dateiversionierungs-System in den eigenen vier Wänden. Lädt er nun eine Hausarbeit hoch und verändert sie, speichert OpenCloud im Hintergrund jede einzelne Version ab, ohne spürbare Verzögerungen auf dem Raspberry Pi zu verursachen.

Im nächsten und letzten Teil unserer Reihe zeigen wir Devin, wie er mit dem ‚Text as Code‘-Ansatz sein erstes eigenes Git-Repository aufbaut, um seine Schreibarbeit von Grund auf zu revolutionieren. Stay tuned!

Quellen & Weitere Infos