Seafile Online bringen und SSL-Zertifikat erstellen

Umstellen auf HTTPS – signiertes SSL-Zertifikat

Dies ist nur nötig wenn ihr den Seafile Server unterwegs erreichen wollt. Dazu muss man vorab eine DynDNS Adresse erstellen, zum Beispiel bei noip.com oder spdyn.de. Das müsst ihr dann entsprechend in eurem Router einpflegen und Ports für den Raspberry Pi freigeben. Benötigt wird folgender Port:
1. 80 (für die Installation), kann nachdem auf https umgestellt ist, gelöscht werden
2. 443
Anschließend geht es am Raspberry Pi, als Standardbenutzer, weiter:


sudo apt-get update
sudo apt-get install python-certbot-nginx
sudo certbot --authenticator standalone --installer nginx -d <domain> --pre-hook "service nginx stop" --post-hook "service nginx start"
sudo systemctl restart seafile seahub

Als nächstes noch die Konfiguration von nginx anpassen. Also öffnen wir die seafile.conf und ersetzen den Inhalt mit untigem. Alternativ kann man auch vorab einfach die Datei löschen mit sudo rm /etc/nginx/sites-available/seafile.conf, da diese mit nano neu eingelegt werden würde:

sudo nano /etc/nginx/sites-available/seafile.conf
server {
    listen       80;
    server_name  _;
    rewrite ^ https://$http_host$request_uri? permanent;    # force redirect http to https

    # Enables or disables emitting nginx version on error pages and in the "Server" response header field.
    server_tokens off;
}

server {
    listen 443;
    ssl on;
    ssl_certificate /etc/letsencrypt/live/deindnsname/fullchain.pem;  # path to your cacert.pem
    ssl_certificate_key /etc/letsencrypt/live/deindnsname/privkey.pem;    # path to your privkey.pem
    server_name _;

    proxy_set_header X-Forwarded-For $remote_addr;

    location / {
         proxy_pass         http://127.0.0.1:8000;
         proxy_set_header   Host $host;
         proxy_set_header   X-Real-IP $remote_addr;
         proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
         proxy_set_header   X-Forwarded-Host $server_name;
         proxy_read_timeout  1200s;
         proxy_set_header   X-Forwarded-Proto https;


         # used for view/edit office file via Office Online Server
         client_max_body_size 0;

         access_log      /var/log/nginx/seahub.access.log;
         error_log       /var/log/nginx/seahub.error.log;
    }

        location /seafhttp {
        rewrite ^/seafhttp(.*)$ $1 break;
        proxy_pass http://127.0.0.1:8082;
        client_max_body_size 0;
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        
        proxy_connect_timeout  36000s;
        proxy_read_timeout  36000s;
        proxy_send_timeout  36000s;

        send_timeout  36000s;
    }
        location /media {
        root /home/seafile/seafile-server-latest/seahub;
    }
}
sudo nginx -t
sudo nginx -s reload

Ich habe die Dateiinhalte von manual.seafile.com bereits an unsere Bedürfnisse angepasst. Das Zertifikat ist sogar signiert und ihr habt ein grünes Schloss in der Adressleiste.

Zu guter Letzt noch die ccnet.conf und seahub_settings.py abwandeln:

sudo su seafile
cd
cd conf
nano ccnet.conf

Die Service_URL abändern:

SERVICE_URL = https://euredomain

In seahub_settings.py die File Server Root anpassen:

nano seahub_settings.py
FILE_SERVER_ROOT = 'https://euredomain/seafhttp'

Natürlich jeweils speichern und schließen. Seafile Nutzer verlassen und Seafile einmal neustarten. Das war’s dann auch schon.

Viel Spaß mit eurer eigenen privaten Cloud. Versucht mal die Seafile App fürs Smartphone mit automatischem Fotoupload.
Ich freue mich auf Unterstützung: PayPalMe

Wenn ihr Fragen oder Anregungen habt, könnt ihr gerne ein Kommentar hinterlassen.

33 Gedanken zu „Seafile Online bringen und SSL-Zertifikat erstellen“

  1. Hallo!!!

    Danke für die gute Anleitung, hat alles auf Anhieb funktioniert.
    Ich habe jetzt noch ein kleines Problem.
    Immer wenn ich die registrierte Domain besuchen möchte,
    werde ich immer zur meiner Fritz box geleitet.
    Was muss ich tun, damit ich richtig geleitet werde?
    Mit Portfreigabe Port 8002 klappt es nicht.

    Schönen Gruß Soko

      1. In der Portfrfeigabe wähle ich HTTPS SERVER aus, das ist der Port 443.
        Bekomme dann diese Meldung:

        Es ist ein Fehler aufgetreten.
        Fehlerbeschreibung: Ein Gerät mit diesem Namen wurde bereits angelegt.

      2. Dann musst du mal in deiner fritzbox schauen. Der Port 443 kann nur einmal freigegeben werden. Ggf ist damit aber auch die Beschreibung der Freigabe gemeint.
        Solltest du bereits eine Freigabe für 443 haben (zum Beispiel für ein NAS), dann solltest du dich um ein reverse proxy kümmern…

  2. Moin Stephan,

    Top-Anleitung. Gut erklärt, so dass schrittweise das Ziel erreicht wird.

    Ich stehe nun allerdings vor dem Problem, dass das Zertifikat nach 90 Tagen abläuft und daher erneuert werden muss.
    Der Befehl „sudo letsencrypt renew“ läuft in der Form auf einen Fehler, dass das Gerät von außen natürlich nicht mehr per Port 80 erreichbar ist (umgeleitet auf 443) :-).
    Hast du evtl. eine Idee, wie das zu lösen ist?

    Viele Grüße
    Frank

    1. Hallo Frank,
      freut mich das alles soweit klappt.
      Ich hätte jetzt gesagt, dass der Befehl „sudo certbot renew“ lautet?
      Am einfachsten machst du den Port einfach kurz wieder auf und erneuerst das Zertifikat. Ich persönlich habe gerne so wenig Ports wie möglich offen. Du kannst auch eine „Trockenübung“ machen: „sudo certbot renew –dry-run“
      Hier kannst du auch mal schauen: „https://certbot.eff.org/lets-encrypt/debianbuster-nginx“

  3. Hallo Stephan,
    Auch das eine super Anleitung! Hat bei mir bestens geklappt. Ich musste die nginx-Konfiguration nicht mal selber anpassen, der Certbot schreibt die entsprechenden Änderungen direkt ins conf-file – dafür muss meines Wissens jedoch das conf-file den Namen der Domain haben (z.B. beispielcloud.ddns.net.conf).

    1. Hallo Felix,

      nginx schreibt tatsächlich selbstständig in die config sofern diese gefunden hat, hier hast du allerdings den Befehl abgeändert. Wenn der Befehl aus der Anleitung genutzt wird schreibt certbot KEINE Änderungen in die config. Da die config eh angepasst werden muss, habe ich mich für diesen Weg entschieden. Achte auf korrektes proxypass…
      VG
      Stephan

  4. Hey,

    vielen Dank für deine Anleitung. Ich habe nun folgendes Problem: Beim Restart musste ich seahub und seafile beim User seafile stoppen, und mit dem Befehl unter dem user ‚root‘ systemctl start seafile seahub neu starten. Sonst lief es nicht, da beim automatischen Start er seahub unter dem Port 8000 starten wollte, was ja nicht mehr funktionierte.

    Gibt es dafür eine schnelle Lösung?

    1. Hallo Michael, das musst du genauer erklären. Warum als root starten? Sudo rechte sollten reichen.
      Als seafile user:
      /seafile-server-latest/seahub.sh stop
      /seafile-server-latest/seafile.sh stop
      exit
      Als normaler user:
      sudo systemctl start seafile seahub

      Warum will er von port 8000 starten? Hast du die beiden Konfigurationsdateien angepasst?

      Viele Grüße
      Stephan

  5. Hi Stephan!
    Vielen vielen Dank für deine Guide! Sie hat perfekt funktioniert bis zum Let’s Encrypt Teil. Hier habe ich einen Fehler gemacht und die seafile.conf zu früh mit der Deinigen ersetzt. Jetzt bekomme ich folgenden Fehler:

    sudo certbot –authenticator standalone –installer nginx -d meinDDNs –pre-hook „service nginx stop“ –post-hook „service nginx start“
    Saving debug log to /var/log/letsencrypt/letsencrypt.log
    Error while running nginx -c /etc/nginx/nginx.conf -t.

    nginx: [emerg] BIO_new_file(„/etc/letsencrypt/live/meinDDNs/fullchain.pem“) failed (SSL: error:02001002:system library:fopen:No such file or directory:fopen(‚/etc/letsencrypt/live/meinDDNs/fullchain.pem‘,’r‘) error:2006D080:BIO routines:BIO_new_file:no such file)
    nginx: configuration file /etc/nginx/nginx.conf test failed

    The nginx plugin is not working; there may be problems with your existing configuration.
    The error was: MisconfigurationError(‚Error while running nginx -c /etc/nginx/nginx.conf -t.\n\nnginx: [emerg] BIO_new_file(„/etc/letsencrypt/live/meinDDNs/fullchain.pem“) failed (SSL: error:02001002:system library:fopen:No such file or directory:fopen(\’/etc/letsencrypt/live/MeinDDNs/fullchain.pem\‘,\’r\‘) error:2006D080:BIO routines:BIO_new_file:no such file)\nnginx: configuration file /etc/nginx/nginx.conf test failed\n‘)

    „meinDDNs“ ist natürlich eigentlich meine afraid Dyndns URL.

    Kann ich da irgendwas machen oder muss ich von vorne anfangen? 🙁

    1. Hallo Michi, bin nicht ganz sicher so spontan, ggf reicht es die nginx Datei neu zu machen. Also die seafile.conf neu machen aus dem vorherigen Tutorial (ohne ssl).
      Dann den certbot ausführen und anschließend die seafile.conf erst abändern…

      Wäre eine spontane Idee…

      Viele Grüße
      Stephan

  6. Hallo Stephan,

    Durch den Umzug von einem rpi3+ auf einen rpi4 musste ich leider alles neu installieren, Deine Anleitung hat mir dabei sehr geholfen, da die Erstinstallation schon ein paar Jahre her ist – vielen Dank!

    Ich habe jedoch, auch nach Wiederholung der Installation gemäß Deiner Anleitung, das Problem, dass die SSL-Verschlüsselung nicht vollständig ist.

    Ich bekomme nach dem Einloggen auf Seafile die Meldung, das Teile der Webseite (Bilder) unverschlüsselt gesendet werden und daher manipulierbar sind. Das Zertifikat ist jedoch gültig und die Seite wird mittels https:// angesprochen.

    Das war, ich habe es soeben noch einmal getestet, bei meiner alten Installation auf dem rpi3+ nicht der Fall.

    Hast Du eine Idee, wo der Fehler liegen könnte?

    Vielen Dank
    Thomas

    1. Hallo Thomas,

      danke für dein Feedback. Freut mich das die Anleitung geholfen hat.
      SSL liegt meist daran, daß seahub settings nicht umgestellt ist auf https. Schau mal bei dir in seahub_settings.py ob du da bereits den Pfad geändert hast auf: https://deinedns.net

      Seahub neustarten danach.
      Ggf noch auch im Admin Bereich die Pfade anpassen.

      Viele Grüße
      Stephan

      1. Vielen Dank, aber den Pfad hatte ich bereits korrekt gesetzt (inkl https statt http).

        Was meinst Du mit Pfade im Admin-Bereich anpassen?

        Vielen Dank
        Thomas

      2. Hallo Stephan,

        ich denke ich konnte das Problem lösen, welches vermutlich auf einem Bug von Seafile beruht:

        Das Default-Avatarbild von Seafile wurde nach der Anmeldung per http:// statt https:// geladen, daher die Fehlermeldung.

        Ich habe es durch ein eigenes Bild ersetzt und nun ist die Fehlermeldung verschwunden, die Seite ist komplett verschlüsselt – was ich nicht verstehe, da ich unter meinem rpi3+ nie einen eigenen Avatar eingerichtet hatte und dort die Verschlüsselung funktionierte…

        Vielleicht hilft dieser Hinweis ja dem ein oder anderen User mit ähnlichen Problemen.

        VG
        Thomas

  7. Hallo, danke für die ausführlich Anleitung.

    Ich habe Seafile erfolgreich in Betrieb genommen.

    Nun kriege ich eine Fehlermeldung bei folgendem Befehl:
    sudo sudo certbot –authenticator standalone –installer nginx -d –pre-hook „service nginx stop“ –post-hook „service nginx start“

    Fehlermeldung:

    -bash: domain: Datei oder Verzeichnis nicht gefunden

    Ich habe alles 1 zu 1 kopiert und kann es mir deshalb nicht erklären.

    Für deine Hilfe wäre ich sehr dankbar.

    1. Hallo, ich hatte hier einen kleinen Fehler in meiner Anleitung. Hier stand zweimal „sudo“. Dies habe ich korrigiert.
      Ansonsten stimmt diese Zeile. Deine dyndns/Domain nicht vergessen anzugeben oder ggf Portweiterleitung in deinem Router aktivieren. In meinem Fall würde der Befehl so aussehen:
      sudo certbot –authenticator standalone –installer nginx -d stephansnettestcloud.hopto.org –pre-hook „service nginx stop“ –post-hook „service nginx start“

      Hier auch ein Tut auf Youtube von mir:

      https://youtu.be/6WoHDrIOz_4

      Viele Grüße
      Stephan

  8. Hallo Stephan,

    deine Erklärungen für die Einrichtung von Seafile sind sehr gut. Leider bekomme ich jedoch bei der SSL aktivierung Probleme.

    Bei dem Schritt: sudo nginx -t wird mir folgender Fehler angezeigt:

    nginx: [emerg] BIO_new_file(„/etc/letsencrypt/live/deindnsname/fullchain.pem“) failed (SSL: error:02001002:system library:fopen:No such ftory:fopen(‚/etc/letsencrypt/live/deindnsname/fullchain.pem‘,’r‘) error:2006D080:BIO routines:BIO_new_file:no such file)
    nginx: configuration file /etc/nginx/nginx.conf test failed

    Wo habe ich was falsch gemacht?

    freundliche Grüße

    Mathias

    1. Hallo Mathias,

      danke für dein Feedback.
      Zum Fehler:
      Wenn du den Fehler kopiert und eins uns zu eins hier eingefügt hast würde ich zuerst „deindnsname“ durch die von dir angelegte dyndns Adresse ersetzen…

      Viele Grüße
      Stephan

      1. Vielen Dank für die schnelle Rückmeldung.

        Ja den Fehler habe ich eins zu eins kopiert. Über den part „deindnsname“ bin ich auch schon gestolpert. Ich Frage mich woher diese Bezeichnung kommt. Die habe ich nämlich nirgendwo angegeben.

      2. Hallo Mathias,

        die Bezeichnung hast du daher, da du meinen vorbereiteten Code aus der Anleitung oben entnommen hast. Funktioniert es denn nun nach der Anpassung?

        Viele Grüße
        Stephan

      3. Hallo Stephan,

        habe es gefunden. Danke noch mal für den Support und die beiden wirklich guten Anleitungen für die Einrichtung des Seafile Servers. Nun funktioniert die Verbindung über https.

        Müssen die Zertifikate irgendwann erneuert werden?

        MfG

        Mathias

      4. Hallo Mathias,

        freut mich, dass es nun funktioniert.
        Das Zertifikat muss irgendwann erneuert werden, dazu wirst du rechtzeitig eine Mail von Let’s Encrypt bekommen.
        Ich empfehle dir noch Fail2Ban einzurichten und die Daten auf eine externe Festplatte zu verlegen. Wenn du Spaß daran hast die Weboberfläche anzupassen kannst du hier mal schauen.

        Viele Grüße
        Stephan

      5. Hallo Stephan,

        danke für die weiteren Tipps. Ist es bei der Einbindung der externen Festplatte so, dass auch die zukünftigen Cloud Daten auf der Externen Festplatte gespeichert werden?

        Gruß Mathias

      6. Hallo Mathias,

        ja, wenn du nach meiner Anleitung gehst verschiebt du erst die bereits gespeicherten Daten auf die externe Festplatte und zukünftig werden die Daten dort automatisch gespeichert. Somit bist du nicht auf eine extrem große sd Karte angewiesen (meine hat nur 8gb). Ich empfehle eine externe Festplatte mit eigener Stromversorgung. Sonst musst du auf das Netzteil vom Raspberry achten, das dieses genug Leistung bringt eine Festplatte zuverlässig mit zu betreiben.

        Viele Grüße
        Stephan

    2. Hi Stephan,

      das hört sich sehr gut an. Ja das Problem mit der Engergieversorgung hatte ich schon. Wenn ich meine externe Festplatte an den Pi über USB anschließe geht der ganz schön in die Knie. Werde mir wohl irgendwann eine mit mehr externer Versorgung holen.

      Danke nochmal und schönes Wochenende!

      Gruß

      Mathias

  9. Danke für die Erklärung.
    Wenn ich nun lokal über meine Domain auf den Server zugreife, müsste es doch bei einer FritzBox nicht über das Internet geleitet werden. Also der Traffic nur über das Lokale Netzwerk. Ich erinnere mich mal von Dynmasq gehört zu haben, aber bin jetzt nicht sicher ob es überhaupt nötig ist.
    freundliche Grüße
    Christian

Schreibe einen Kommentar

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

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.