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.

Wer Traefik noch nicht installiert hat, findet hier eine Anleitung, wie ihr dies schnell tun könnt.

Als Grundlage meiner Anleitung dient die offizielle Seafile Anleitung für Docker.

1. Ordner anlegen

Zuerst legen wir uns passende Ordner-Strukturen an.

mkdir -p /opt/containers/seafile/{db,seafile-data,elastic-data}

2. 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.

cd /opt/containers/seafile/
nano docker-compose.yml

Inhalt

version: '2.0'
services:
  db:
    image: mariadb:10.1
    container_name: seafile-mysql
    restart: unless-stopped
    environment:
      - MYSQL_ROOT_PASSWORD=db_dev        # MySQL Root Passwort vergeben
      - MYSQL_LOG_CONSOLE=true
    volumes:
      - /opt/containers/seafile/db:/var/lib/mysql 
    networks:
      - default

  memcached:
    image: memcached:1.5.6
    container_name: seafile-memcached
    restart: unless-stopped
    entrypoint: memcached -m 256
    networks:
      - default

  elasticsearch:
    image: seafileltd/elasticsearch-with-ik:5.6.16
    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:
      - /opt/containers/seafile/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:
      - /opt/containers/seafile/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=http"
      - "traefik.http.routers.seafile.rule=Host(`cloud.euredomain.de`)"  ## Hier eure Domain eingeben ##
      - "traefik.http.middlewares.seafile-https-redirect.redirectscheme.scheme=https"
      - "traefik.http.routers.seafile.middlewares=seafile-https-redirect"
      - "traefik.http.routers.seafile-secure.entrypoints=https"
      - "traefik.http.routers.seafile-secure.rule=Host(`cloud.eureDomain.de`)" ## Hier eure Domain eingeben ##
      - "traefik.http.routers.seafile-secure.tls=true"
      - "traefik.http.routers.seafile-secure.tls.certresolver=http"
      - "traefik.http.routers.seafile-secure.service=seafile"
      - "traefik.http.services.seafile.loadbalancer.server.port=80"
      - "traefik.docker.network=proxy"


networks:
  proxy:
    external: true

Notwendige Anpassungen:

  1. MySQL Passwort vergeben
  2. Admin E-Mail vergeben
  3. Admin Kennwort vergeben
  4. Eure URL eingeben bei Seafile
  5. 2x eure URL eingeben bei Traefik

Diese Docker Compose Datei funktioniert nur, wenn ich euch mittels meiner Anleitung hier Traefik installiert habt. Sonst heißen einige Traefik Variablen wohl anders. Diese müsst ihr dann dementsprechend bei euch anpassen.

3. Seafile Server starten

3.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

3.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.

4. 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

5. Quellen

https://download.seafile.com/published/seafile-manual/docker/deploy%20seafile%20with%20docker.md

https://github.com/haiwen/seafile-docker

Teile diesen Beitrag
Christian

5 Kommentare

  1. 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.

  2. 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

  3. 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 🙁

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.