Seafile Installation mittels Docker Compose und NFS

/seafile-installation-mittels-docker-compose-nfs
Seafile Installation mittels Docker Compose und NFS

Seafile ist eine sichere und plattformübergreifende Cloud-Speicherlösung. Eine Möglichkeit, Seafile zu installieren und zu betreiben, ist durch die Verwendung von Docker-Containern und dem Network File System (NFS). In diesem Artikel zeige ich, wie sich Seafile mit Docker und NFS auf einem System einrichten lässt.

Warum verwende ich NFS?

NFS ist ein weit verbreitetes Dateisystem-Protokoll, das für die gemeinsame Nutzung von Dateien über ein Netzwerk entwickelt wurde. NFS bietet eine einfache Möglichkeit, Dateien zwischen verschiedenen Systemen zu teilen und zu synchronisieren, ohne dass Dateien manuell kopiert werden müssen. Es ist schnell und effizient, da es speziell für den Einsatz in Netzwerken entwickelt wurde.

NFS wird häufig in Unternehmen eingesetzt, die große Dateien zwischen verschiedenen Standorten teilen müssen, und wird von vielen Betriebssystemen unterstützt, darunter Linux, Unix und Windows.

Der große Vorteil von NFS in Kombination mit Seafile ist die Unabhängigkeit vom Docker-Server. So ist es beispielsweise möglich, Seafile auf einem Raspberry Pi zu betreiben, während die Daten sicher auf einem PC oder Server liegen. Sollte der Raspberry Pi bzw. der Seafile-Server ausfallen, sind die Daten nicht verloren.

Zudem bietet der Raspberry Pi keine besonders gute Möglichkeit, großen Speicher performant anzubinden. Selbstverständlich führt trotzdem kein Weg an einer Datensicherung vorbei. In meinem Fall verwende ich einen Ubuntu-Server für die Seafile-Docker-Container und eine Synology DiskStation als NFS-Server, auf dem die Dateien liegen.


Docker Compose Datei

version: '2.0'
services:
  db:
    image: mariadb:10.5
    container_name: seafile-mysql
    environment:
      - MYSQL_ROOT_PASSWORD=${DB_PASS}  # Festlegen des Root-Passworts für den MySQL-Service
      - MYSQL_LOG_CONSOLE=true
    volumes:
      - type: volume
        source: db
        target: /var/lib/mysql
        volume:
          nocopy: true
    networks:
      - seafile-net

  memcached:
    image: memcached:1.6
    container_name: seafile-memcached
    entrypoint: memcached -m 256
    networks:
      - seafile-net

  seafile:
    image: seafileltd/seafile-mc:latest
    container_name: seafile
    ports:
      - "5000:80"
      - "5001:8080"
    volumes:
      - type: volume
        source: data
        target: /shared
        volume:
          nocopy: true
    environment:
      - DB_HOST=db
      - DB_ROOT_PASSWD=${DB_PASS}              # Passwort des MySQL-Root-Nutzers
      - TIME_ZONE=${TIME_ZONE}                 # Zeitzone, Standard ist UTC
      - SEAFILE_ADMIN_EMAIL=${ADMIN_USER_EMAIL}
      - SEAFILE_ADMIN_PASSWORD=${ADMIN_USER_PASS}
      - SEAFILE_SERVER_LETSENCRYPT=false
      - SEAFILE_SERVER_HOSTNAME=${HOST_NAME}
    depends_on:
      - db
      - memcached
    networks:
      - seafile-net

networks:
  seafile-net:

volumes:
  db:   # Volume für die Datenbank
    driver: local
    driver_opts:
      type: nfs
      o: addr=192.168.20.10,rw,vers=4.1
      device: ":/volume1/DockerData/Seafile/db/"
  data: # Volume für die Daten
    driver: local
    driver_opts:
      type: nfs
      o: addr=192.168.20.10,rw,vers=4.1
      device: ":/volume1/DockerData/Seafile/data/"

Wichtig: Datensicherung der Seafile-Datenbank

Die Seafile-Datenbank muss zwingend mitgesichert werden. Im Vergleich zu Nextcloud speichert Seafile Dateien in kleinen Blöcken, die in der Regel nur wenige MB groß sind. Wird eine Datei aktualisiert, wird lediglich der geänderte Block hochgeladen, was Effizienz und Geschwindigkeit der Synchronisierung deutlich erhöht.

Die Blöcke werden über eindeutige Identifikatoren referenziert, wodurch Seafile den Speicherplatz effizient verwalten kann. Wird eine Datei gelöscht, werden die zugehörigen Blöcke automatisch entfernt. Fehlt jedoch die Datenbank, ist es nicht mehr möglich, die Dateien wiederherzustellen – selbst wenn die eigentlichen Datenblöcke noch vorhanden sind.


Nginx Proxy Manager

Die Integration des Nginx Proxy Managers in die Docker-Konfiguration ist aus mehreren Gründen sinnvoll:

  • Benutzerfreundliche Weboberfläche zur Verwaltung von Reverse-Proxies
  • Einfache Einrichtung und automatische Erneuerung von Let's-Encrypt-Zertifikaten
  • Zentrale Verwaltung von SSL, Weiterleitungen und Zugriffsregeln
  • Einfache Nutzung von Subdomains oder Pfad-basierten Routen für Dienste wie Seafile

Dadurch entfällt das manuelle Bearbeiten von Nginx-Konfigurationsdateien, was die Wartung deutlich vereinfacht und Fehler reduziert. Insgesamt steigen Sicherheit, Übersichtlichkeit und Flexibilität der Serverinfrastruktur deutlich.

Eine Anleitung zur Einrichtung des Nginx Proxy Managers findest du an entsprechender Stelle.

Anzeige

/comments0 Einträge

Kommentare

> NO_COMMENTS_FOUND

> INITIATE_COMMENT_PROTOCOL

MARKDOWN_SUPPORT: ENABLED
CHARS: 0