Ich habe bereits schon hier eine Anleitung geschrieben, wie ihr Seafile Professional normal “von Hand” installieren könnt. Nun zeige ich euch, wie ihr dies in wenigen Minuten mit Docker realisiert. Traefik dient uns hier als Reverse Proxy und stellt später den Dienst verschlüsselt per TLS bereit.
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 |
Als Grundlage meiner Anleitung dient die offizielle Seafile Anleitung für Docker.
1. Grundvoraussetzung
- Docker & Docker Compose v2 (Debian / Ubuntu)
- Traefik v2 – Reverse-Proxy mit CrowdSec einrichten
2. Ordner anlegen
Zuerst legen wir uns passende Ordner-Strukturen an.
mkdir -p /opt/containers/seafile/{db,seafile-data,elastic-data}
Nun passen wir noch eine Berechtigung an, damit Elasticsearch später funktioniert (Dank an @eltonit)
chown -R 1000:0 /opt/containers/seafile/elastic-data/
3. Docker Compose anlegen
Nun legen wir die eigentliche Docker Datei an. Hierfür habe ich mir die offizielle Seafile Compose genommen und diese abgeändert für Traefik.
nano /opt/containers/seafile/docker-compose.yml
Inhalt
version: ‘2.0’ services: db: image: mariadb:10.5 container_name: seafile-mysql restart: unless-stopped environment: - MYSQL_ROOT_PASSWORD=db_dev # MySQL Root Passwort vergeben - MYSQL_LOG_CONSOLE=true volumes: - ./db:/var/lib/mysql networks: - default memcached: image: memcached:1.6 container_name: seafile-memcached restart: unless-stopped entrypoint: memcached -m 256 networks: - default elasticsearch: image: elasticsearch:7.16.2 container_name: seafile-elasticsearch restart: unless-stopped environment: - discovery.type=single-node - bootstrap.memory_lock=true - "ES_JAVA_OPTS=-Xms1g -Xmx1g" ulimits: memlock: soft: -1 hard: -1 mem_limit: 2g volumes: - ./elastic-data:/usr/share/elasticsearch/data networks: - default seafile: image: docker.seadrive.org/seafileltd/seafile-pro-mc:latest container_name: seafile restart: unless-stopped volumes: - ./seafile-data:/shared environment: - DB_HOST=db - DB_ROOT_PASSWD=db_dev # MySQL Root Passwort wie oben vergeben - TIME_ZONE=Europe/Berlin - SEAFILE_ADMIN_EMAIL=me@example.com # Nutzername des Seafile Admins - SEAFILE_ADMIN_PASSWORD=asecret # Seafile Admin Passwort - SEAFILE_SERVER_LETSENCRYPT=false - SEAFILE_SERVER_HOSTNAME=cloud.euredomain.de # eure Seafile URL depends_on: - db - memcached - elasticsearch networks: - default - proxy labels: - "traefik.enable=true" - "traefik.http.routers.seafile.entrypoints=https" - "traefik.http.routers.seafile.rule=(Host(`cloud.euredomain.de`))" - "traefik.http.routers.seafile.tls=true" - "traefik.http.routers.seafile.tls.certresolver=http" - "traefik.http.routers.seafile.service=seafile" - "traefik.http.services.seafile.loadbalancer.server.port=80" - "traefik.docker.network=proxy" - "traefik.http.routers.seafile.middlewares=default@file" networks: proxy: external: true
Notwendige Anpassungen:
- MySQL Passwort vergeben
- Admin E-Mail vergeben
- Admin Kennwort vergeben
- Eure URL eingeben bei Seafile
- eure URL eingeben bei Traefik
4. Seafile Server starten
4.1 Bei docker.seadrive.org anmelden
Um die neuste Version von Seafile Professional zu beziehen, müsst ihr euch bei docker.seadrive.org anmelden mittels Docker. Dazu gebt ihr folgenden Befehl ein. Die Zugangsdaten habe ich hier entnommen.
docker login docker.seadrive.org Nutzername: seafile Passwort: zjkmid6rQibdZ=uJMuWS
4.2 Container starten
Den Server startet ihr wie gewohnt mit folgendem Befehl:
docker compose -f /opt/containers/seafile/docker-compose.yml up -d
Nun sollte es so aussehen, wenn ihr auf “cloud.euredomain.de” geht.
5. Anpassungen für Uploads vornehmen
Unsere Verbindung wird mittels Traefik TLS verschlüsselt. Daher müssen wir noch Seafile anpassen. Diese Einstellungen müsst ihr mit dem Administrator Benutzer vornehmen.
Klickt auf euer “Avatar” oben rechts.
Hier klickt ihr auf “System-Administration”.
Nun auf “Einstellungen”. Hier sind jetzt die “SERVICE_URL” und “FILE_SERVER_ROOT” wichtig. Diese passt ihr an.
Wichtig ist, dass wenn ihr änderungen vornehmt, dass ihr diese mit dem “Haken” bestätigt.
Nun ändert die Einstellungen folgendermaßen ab:
- SERVICE_URL = https://cloud.euredomain.de
- FILE_SERVER_ROOT = https://cloud.euredomain.de/seafhttp
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.
7. Quellen
https://download.seafile.com/published/seafile-manual/docker/deploy%20seafile%20with%20docker.md
https://github.com/haiwen/seafile-docker
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.