Diese Anleitung beschreibt Schritt für Schritt die Bereitstellung deines Seafile Enterprise/Pro Servers inklusive ONLYOFFICE Document Server, Elasticsearch für die Volltextsuche, MariaDB und Memcached.
Der Seafile Professional Server ist für bis zu 3 Benutzer kostenlos. Für größere Teams ist er kostenpflichtig und wird über eine jährliche Abonnement-Lizenz pro aktivem Benutzer gesteuert.
Wichtigste Lizenz-Eckdaten
Kostenlos bis 3 Benutzer: Sie können die Pro Edition ohne zeitliche Einschränkung mit bis zu 3 Usern testen oder nutzen.
Aktivierung: Die Freischaltung des Servers erfolgt über eine spezielle seafile-license.txt-Datei, die die Anzahl der lizenzierten Nutzer und die Laufzeit enthält.
Unterschiede zur Community Edition (CE)
- Die Seafile Community Edition ist Open Source und komplett kostenlos, bietet aber weniger Enterprise-Features (wie erweiterte Protokollierung, WebDAV-Erweiterungen, Active-Directory/LDAP-Optimierungen oder erweiterte Admin-Funktionen).
📋 Voraussetzungen
Bevor du startest, stelle sicher, dass folgende Komponenten auf deinem System bereitstehen:
- 🐳 Docker & Docker Compose installiert (Offizielle Anleitung)
- 🗄️ Festplatte/Mountpoint: Das Verzeichnis
/mnt/seagate/ (z. B. deine Seagate-Festplatte) muss existieren, ordnungsgemäß eingehängt und beschreibbar sein.
- 🛡️ Sicherheitshinweis: Ändere vor dem Start unbedingt die Standardpasswörter (
MYSQL_ROOT_PASSWORD, DB_ROOT_PASSWD, SEAFILE_ADMIN_PASSWORD, JWT_SECRET) in der docker-compose.yml ab!
🛠️ Schritt-für-Schritt Installation
📁 Schritt 1: Ordnerstruktur auf der Festplatte vorbereiten
Erstelle zuerst die notwendigen Verzeichnisse auf deiner Seagate-Festplatte, damit Seafile seine Daten persistent ablegen kann:
sudo mkdir -p /mnt/seagate/seafileonlyoffice/seafile_data
🧠 Schritt 2: Systemeinstellung für Elasticsearch anpassen
Elasticsearch benötigt eine höhere Berechtigung für den virtuellen Speicher (mmap). Wenn du dies nicht setzt, wird der elasticsearch-Container beim Starten abstürzen.
Führe folgenden Befehl auf deinem Host-System aus:
sudo sysctl -w vm.max_map_count=262144
Um diese Einstellung auch nach einem Neustart des Servers beizubehalten, füge sie an das Ende der Datei /etc/sysctl.conf an:
echo "vm.max_map_count=262144" | sudo tee -a /etc/sysctl.conf
📝 Schritt 3: Projektordner & Konfiguration anlegen
Erstelle ein Verzeichnis für deine Docker-Konfiguration (z. B. in deinem Home-Verzeichnis) und wechsle hinein:
mkdir -p ~/seafile-stack && cd ~/seafile-stack
Erstelle die Datei docker-compose.yml:
nano docker-compose.yml
Füge den folgenden Inhalt ein (Nutze Strg+O -> Enter zum Speichern und Strg+X zum Schließen):
version: '3'
services:
db:
image: mariadb:10.11
container_name: seafile-db
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: my_secret_db_password # ⚠️ In Produktion ändern!
MYSQL_LOG_CONSOLE: "true"
volumes:
- db_data:/var/lib/mysql
networks:
- seafile_net
memcached:
image: memcached:1.6
container_name: seafile-memcached
restart: unless-stopped
entrypoint: memcached -m 256
networks:
- seafile_net
elasticsearch:
image: elasticsearch:7.17.24
container_name: elasticsearch
restart: unless-stopped
environment:
- discovery.type=single-node
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
- xpack.security.enabled=false
ulimits:
memlock:
soft: -1
hard: -1
mem_limit: 1g
volumes:
- elasticsearch_data:/usr/share/elasticsearch/data
networks:
seafile_net:
aliases:
- elasticsearch
seafile:
image: docker.seadrive.org/seafileltd/seafile-pro-mc:latest
container_name: seafile
restart: unless-stopped
ports:
- "4003:80"
environment:
DB_HOST: db
DB_ROOT_PASSWD: my_secret_db_password # ⚠️ Muss mit DB-Passwort übereinstimmen!
TIME_ZONE: Europe/Berlin
SEAFILE_ADMIN_EMAIL: admin@lokal.dev
SEAFILE_ADMIN_PASSWORD: admin # ⚠️ Nach dem ersten Login sofort ändern!
SEAFILE_SERVER_LETSENCRYPT: "false"
SEAFILE_ELASTICSEARCH_HOST: "elasticsearch"
volumes:
- /mnt/hdd/seafileonlyoffice/seafile_data:/shared
networks:
- seafile_net
depends_on:
- db
- memcached
- elasticsearch
onlyoffice:
image: onlyoffice/documentserver:latest
container_name: onlyoffice
restart: unless-stopped
ports:
- "4004:80"
environment:
JWT_SECRET: mein!_saubloedes1_geheimes_awt@t # ⚠️ Token für die Seafile-Anbindung
JWT_ENABLED: "true"
networks:
- seafile_net
volumes:
db_data:
elasticsearch_data:
networks:
seafile_net:
name: seafile_net
🚀 Schritt 4: Stack starten
Starte den gesamten Stack im Hintergrund:
docker compose up -d
Hinweis: Der erste Start von Seafile Pro initialisiert die Datenbanktabellen und die Ordnerstruktur im Hintergrund auf deiner Festplatte. Das kann 1–2 Minuten in Anspruch nehmen.
🌐 Ports & Weboberflächen
Nachdem die Container hochgelaufen sind, erreichst du die Dienste unter folgenden Adressen (Ersetze DEINE-SERVER-IP mit der IP deines Host-Systems):
- 🐳 Seafile Web-Interface (Seahub):
http://DEINE-SERVER-IP:4003
- 📝 ONLYOFFICE Docs:
http://DEINE-SERVER-IP:4004
⚙️ Post-Installation & ONLYOFFICE Integration
Um Dokumente direkt in Seafile über ONLYOFFICE bearbeiten zu können, müssen die beiden Dienste miteinander verknüpft werden:
- Logge dich auf
http://DEINE-SERVER-IP:4003 mit deinem Admin-Konto (admin@lokal.dev / admin) ein.
- Klicke auf dein Profilbild oben rechts und wähle System Administration (System-Administration).
- Navigiere im linken Menü zu Settings (Einstellungen).
- Suche die folgenden Einträge und passe sie an:
ENABLE_ONLYOFFICE = True (Haken setzen)
ONLYOFFICE_APIJS_URL = http://DEINE-SERVER-IP:4004/web-apps/apps/api/documents/api.js
ONLYOFFICE_JWT_SECRET = mein!_saubloedes1_geheimes_awt@t (Dein gesetztes JWT-Geheimnis)
Tipp für die interne Docker-Kommunikation: Sollte es zu Netzwerk-Konflikten bei der Client-IP-Auflösung kommen, füge alternativ folgendes in die Seafile-Konfigurationsdatei (/mnt/seagate/seafileonlyoffice/seafile_data/seafile/config/seahub_settings.py) ein:
ONLYOFFICE_JWT_SECRET = 'mein!_saubloedes1_geheimes_awt@t'
🛑 Nützliche Befehle
- Status aller Container prüfen:
docker compose ps
- Echtzeit-Logs der Seafile-Instanz:
docker compose logs -f seafile
- Stack stoppen:
docker compose down
- Stack stoppen & interne Benennungs-Volumes löschen:
docker compose down -v