Seafile Professional Edition ist eine leistungsstarke Sync-&-Share-Lösung, die sich speziell für den Einsatz in Unternehmen und komplexen IT-Umgebungen eignet. Im Vergleich zur Community Edition bietet sie erweiterte Funktionen wie granulare Zugriffssteuerung, automatisiertes File Locking für Office-Dokumente und Integrationen mit Microsoft Office Online oder Collabora, die parallele Teamarbeit an Dateien ohne Versionskonflikte ermöglichen. Seafile Professional kann mit bis zu 3 Benutzern kostenlos genutzt werden.
Datum | Änderungen |
---|---|
14.04.2020 | Erstellung dieser Anleitung |
06.01.2023 | Update Docker Compose v2, Update Docker Compose Datei, Update Traefik Labels |
13.01.2023 | Update von Elasticsearch, memcached. Dadurch lässt sich die Suche nutzen. Vielen Dank an @eltonit |
13.01.2023 | Kapitel zur Integration in Collabora (Online Office) hinzugefügt. Vielen Dank an @eltonit |
29.05.2023 | Anpassung an neue Traefik Anleitung |
28.10.2024 | Anpassung an neues Seafile Image |
13.03.2025 | Anpassung an Seafile Pro 12 |
Als Grundlage meiner Anleitung dient die offizielle Seafile Anleitung für Docker.
1. Grundvoraussetzung
- Docker & Docker Compose v2 (Debian / Ubuntu)
- Traefik V3 Installation, Konfiguration und CrowdSec-Security
2. Ordner anlegen
Zuerst legen wir uns passende Ordner-Strukturen an.
mkdir -p /opt/containers/seafile-pro/seafile-elasticsearch/data
Nun passen wir noch eine Berechtigung an, damit Elasticsearch später funktioniert (Dank an @eltonit)
chmod 777 -R /opt/containers/seafile-pro/seafile-elasticsearch/data
3. Docker Compose anlegen
Nun legen wir die eigentliche Docker Datei an.
nano /opt/containers/seafile-pro/docker-compose.yml
Inhalt
services: seafile-mysql: image: ${SEAFILE_DB_IMAGE} container_name: seafile-mysql environment: - MYSQL_ROOT_PASSWORD=${INIT_SEAFILE_MYSQL_ROOT_PASSWORD} - MYSQL_LOG_CONSOLE=true - MARIADB_AUTO_UPGRADE=1 volumes: - ./seafile-mysql:/var/lib/mysql networks: - seafile_net healthcheck: test: [ "CMD", "/usr/local/bin/healthcheck.sh", "--connect", "--mariadbupgrade", "--innodb_initialized", ] interval: 20s start_period: 30s timeout: 5s retries: 10 seafile-memcached: image: ${SEAFILE_MEMCACHED_IMAGE} container_name: seafile-memcached entrypoint: memcached -m 256 networks: - seafile_net seafile-elasticsearch: image: ${SEAFILE_ELASTICSEARCH_IMAGE} container_name: seafile-elasticsearch environment: - discovery.type=single-node - bootstrap.memory_lock=true - "ES_JAVA_OPTS=-Xms2g -Xmx2g" - "xpack.security.enabled=false" volumes: - ./seafile-elasticsearch/data:/usr/share/elasticsearch/data networks: - seafile_net ulimits: memlock: soft: -1 hard: -1 mem_limit: 4g seafile: image: ${SEAFILE_IMAGE} container_name: seafile volumes: - ./seafile-data:/shared environment: - DB_HOST=${SEAFILE_MYSQL_DB_HOST} - DB_PORT=${SEAFILE_MYSQL_DB_PORT} - DB_USER=${SEAFILE_MYSQL_DB_USER} - DB_ROOT_PASSWD=${INIT_SEAFILE_MYSQL_ROOT_PASSWORD} - DB_PASSWORD=${SEAFILE_MYSQL_DB_PASSWORD} - SEAFILE_MYSQL_DB_CCNET_DB_NAME=${SEAFILE_MYSQL_DB_CCNET_DB_NAME} - SEAFILE_MYSQL_DB_SEAFILE_DB_NAME=${SEAFILE_MYSQL_DB_SEAFILE_DB_NAME} - SEAFILE_MYSQL_DB_SEAHUB_DB_NAME=${SEAFILE_MYSQL_DB_SEAHUB_DB_NAME} - TIME_ZONE=${TIME_ZONE} - INIT_SEAFILE_ADMIN_EMAIL=${INIT_SEAFILE_ADMIN_EMAIL} - INIT_SEAFILE_ADMIN_PASSWORD=${INIT_SEAFILE_ADMIN_PASSWORD} - SEAFILE_SERVER_HOSTNAME=${SEAFILE_SERVER_HOSTNAME} - SEAFILE_SERVER_PROTOCOL=${SEAFILE_SERVER_PROTOCOL} - SITE_ROOT=${SITE_ROOT} - NON_ROOT=${NON_ROOT} - JWT_PRIVATE_KEY=${JWT_PRIVATE_KEY} - SEAFILE_LOG_TO_STDOUT=${SEAFILE_LOG_TO_STDOUT} depends_on: - seafile-mysql - seafile-memcached - seafile-elasticsearch networks: - seafile_net - proxy labels: - "traefik.enable=true" - "traefik.http.routers.seafile.rule=Host(`${SEAFILE_SERVER_HOSTNAME}`)" - "traefik.http.routers.seafile.entrypoints=websecure" - "traefik.http.routers.seafile.tls=true" - "traefik.http.routers.seafile.tls.certresolver=http_resolver" - "traefik.http.services.seafile.loadbalancer.server.port=80" - "traefik.docker.network=proxy" networks: seafile_net: driver: bridge proxy: external: true
4. .env Datei erstellen
Nur erstellen wir noch eine Datei, welche die eigentliche Konfiguration beinhaltet:
nano /opt/containers/seafile-pro/.env
Inhalt:
### Seafile admin user INIT_SEAFILE_ADMIN_EMAIL=me@example.com INIT_SEAFILE_ADMIN_PASSWORD=asecret SEAFILE_SERVER_HOSTNAME=seafile.euredomain.de ## Images SEAFILE_IMAGE=seafileltd/seafile-pro-mc:12.0-latest SEAFILE_DB_IMAGE=mariadb:10.11 SEAFILE_MEMCACHED_IMAGE=memcached:1.6.29 SEAFILE_ELASTICSEARCH_IMAGE=elasticsearch:8.15.0 ## Database SEAFILE_MYSQL_DB_HOST=seafile-mysql SEAFILE_MYSQL_DB_USER=seafile SEAFILE_MYSQL_DB_PASSWORD=DBROOT SEAFILE_MYSQL_DB_PORT=3306 SEAFILE_MYSQL_DB_CCNET_DB_NAME=ccnet_db SEAFILE_MYSQL_DB_SEAFILE_DB_NAME=seafile_db SEAFILE_MYSQL_DB_SEAHUB_DB_NAME=seahub_db ## Scheme SEAFILE_SERVER_PROTOCOL=https SITE_ROOT=/ NON_ROOT=false SEAFILE_LOG_TO_STDOUT=false ## Startup parameters TIME_ZONE=Europe/Berlin JWT_PRIVATE_KEY=JWTCHANGE ### Database root password INIT_SEAFILE_MYSQL_ROOT_PASSWORD=INITCHANGE
Noch zu ändern:
- Nutzername
- Passwort
- Domain
Den Rest generieren wir uns jetzt:
apt update && apt install pwgen cd /opt/containers/seafile-pro/ password=$(pwgen -s 40 1); sed -i "s#JWTCHANGE#$password#g" .env password=$(pwgen -s 8 1); sed -i "s#INITCHANGE#$password#g" .env password=$(pwgen -s 8 1); sed -i "s#DBROOT#$password#g" .env
5. Server starten
Den Server startet ihr wie gewohnt mit folgendem Befehl:
docker compose -f /opt/containers/seafile-pro/docker-compose.yml up -d
Nun sollte es so aussehen, wenn ihr auf “seafile.euredomain.de” geht.
6. Collabora Office Integration
Nun habt ihr noch die Möglichkeit Collabora Office in Seafile zu Integrieren. Bei Collabora Office handelt es sich um eine kostenloses Online Office, welches ihr selbst hosten könnt. Alle Infos dazu findet ihr hier.
Irgendwie haut bei mir der seafile-elasticsearch container immer hab habe zwar nur 4 GB auf der Maschine aber kann es damit zu tun haben ?
geht diese Config auf mit Version 12 ?
Hi zusammen,
wie kann ich den am besten eine docker basierende MariaDB für mehrerer Services konfigurieren? Ich habe nun Nexcloud und Seafile am laufen. Beide kommen in den Konfigurationen hier mit einer eigenen mysql-DB. Da ist auf dauer, wenn noch mehr Services dazu kommen, irgendwie nicht Ressourcen schonend.
Hat sich jemand mal dadrüber schon Gedanken gemacht und hat ein Vorschlag für eine entsprechende Konfiguration?
VG
Rebel2k
Wie immer, eine super Anleitung!! Eine Frage habe ich trotzdem noch, wie kann ich Collabora Online in Seafile einbinden, was muss ich beachten? Bin dankbar für jeden Tipp.
VG Frank
Bei mir funktioniert die Suche nicht, lediglich ein “Interner Serverfehler” wird angezeigt. Der Rest funktioniert super. Wo wäre die erste Stelle, wo ich ich den Grund dafür entdecken könnte? Welche log ist für die Suche da?
apropos, der Fehler lag bei mir, ich hatte versehentlich 2x die environment Sektion in meiner docker-.compose.yml sodass der 2. Teil davon ignoriert wurde 🙁
Welche VErsion funktioniert denn bei dir Christian?
Hier hatte jemand das gleiche Problem schon vor einem Jahr mit dem Docker Image: https://forum.seafile.com/t/docker-for-version-seven-not-starting-throwing-db-connection-on-127-0-0-1/9375
Und das Sahnehäubchen oben drauf:
docker logs -f seafile
*** Running /etc/my_init.d/01_create_data_links.sh…
*** Booting runit daemon…
*** Runit started as PID 14
*** Running /scripts/start.py…
waiting for mysql server to be ready: %s (2003, “Can’t connect to MySQL server on ‘127.0.0.1’ ([Errno 111] Connection refused)”)
waiting for mysql server to be ready: %s (2003, “Can’t connect to MySQL server on ‘127.0.0.1’ ([Errno 111] Connection refused)”)
waiting for mysql server to be ready: %s (2003, “Can’t connect to MySQL server on ‘127.0.0.1’ ([Errno 111] Connection refused)”)
waiting for mysql server to be ready: %s (2003, “Can’t connect to MySQL server on ‘127.0.0.1’ ([Errno 111] Connection refused)”)
waiting for mysql server to be ready: %s (2003, “Can’t connect to MySQL server on ‘127.0.0.1’ ([Errno 111]
Warum sucht seafile auf 127.0.0.1 nach MYSQL??? das ist doch ein separater Container und den hab ich doch hier angegeben:
environment:
– DB_HOST=seafile-db
Hi,
da ich traefik 2.3 schon seit eienr Weile produktiv nutze, bin ich deiner Anleitung nicht 100% gefolgt.
Mein Problem ist, dass ich bei Zugriff auf Seafile einen Bad Gateway error bekomme. Irgendeine Idee?
Ich trage hier mal alle Info zusammen (meine docker-compose.yml gibts bei Bedarf gerne auch)
Fehler:
502 Bad Gateway
nginx/1.14.0 (Ubuntu)
docker exec -ti seafile bash
wget http://localhost
–2020-07-27 09:53:30– http://localhost/
Resolving localhost (localhost)… 127.0.0.1, ::1
Connecting to localhost (localhost)|127.0.0.1|:80… connected.
HTTP request sent, awaiting response… 502 Bad Gateway
2020-07-27 09:53:30 ERROR 502: Bad Gateway.
Es liegt also nicht an traefik sondern an seafile selbst. irgendwie.
innerhalb des seafile containers:
cat /etc/nginx/sites-enabled/seafile.nginx.conf
server {
listen 80;
server_name seafile.example.com;
client_max_body_size 10m;
location / {
proxy_pass http://127.0.0.1:8000/;
proxy_read_timeout 310s;
proxy_set_header Host $host;
proxy_set_header Forwarded “for=$remote_addr;proto=$scheme”;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Connection “”;
proxy_http_version 1.1;
client_max_body_size 0;
access_log /var/log/nginx/seahub.access.log seafileformat;
error_log /var/log/nginx/seahub.error.log;
}
…
ABER
wget http://127.0.0.1:8000
–2020-07-27 09:55:27– http://127.0.0.1:8000/
Connecting to 127.0.0.1:8000… failed: Connection refused.
da lauscht nichts. Logisch dass da Bad Gateway kommt. Netstat innerhalb des seafile containers bestätigt: auf Port 8000 läuft da nichts.