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 python3-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_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.
Hallo Stephan
nachdem ich mit deiner Anleitung Seafile zum Laufen gebracht hatte, wollte ich natürlich auch das Zertifikat für den externen Zugang einrichten. Leider stoße ich auch dabei auf ein Problem, das ich nicht selbst gelöst bekomme.
schon nach diesem Installationsscript:
sudo certbot –authenticator standalone –installer nginx -d MeineEigeneDomain –pre-hook „service nginx stop“ –post-hook „service nginx start“
bekomme ich folgende Meldungen:
IMPORTANT NOTES:
– Unable to install the certificate
– Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/MeineEigeneDomain/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/MeineEigeneDomain/privkey.pem
Your certificate will expire on 2023-04-07. To obtain a new or
tweaked version of this certificate in the future, simply run
certbot again with the „certonly“ option. To non-interactively
renew *all* of your certificates, run „certbot renew“
Gleich in der ersten Kommentarzeile wird mir gesagt, dass das Zertifikat nicht installiert wurde.
später bekomme ich auch noch diese Meldung:
Could not automatically find a matching server block for felber.dnshome.de. Set the `server_name` directive to use the Nginx installer
Hast du einen Tipp, was bei mir falsch gelaufen ist?
Vielen Dank und Grüsse
Andreas
Hallo, ich habe zuerst auf meinem Raspi4 nach deiner Anleitung Seafile V9.0.2 installiert. Das funktionierte soweit.
Ich wollte dann nach dieser Anleitung https und das Zertifikat einstellen. Dazu habe ich zuerst an der Fritzbox die Portfreigabe eingestellt und dann diese Anleitung nacheinander abgearbeitet.
Nur jetzt ist Seafile über der Browser nicht mehr erreichbar. Es kommt immer die Meldung „Die Website ist nicht erreichbar“.
Ist diese Anleitung vielleicht nicht mehr gang so zu nutzen für „Bullseye“?
Hi Stephan,
du schreibst am Anfang
„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:“
Mit Standardbenutzer meinst du den root-Account, auch wenn er anders heißt, oder?
VG Oliver
Bekomme immer diese Meldung:
Domain: gonsernas.zapto.org
Type: connection
Detail: Fetching
http://gonsernas.zapto.org/.well-known/acme-challenge/n7Z-Tf-vuj17nJ9oozCUMs7FL_ZrwcZ4umy_aueLH9E:
Connection refused
Habe POrts freigegeben. was könnte das sein?
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
Hallo Soko,
freut mich das es klappt.
Du musst lediglich Port 443 für den Raspberry freigeben. Dann sollte die fritzbox die Anfrage an den Raspberry weiterleiten.
Viele Grüße
Stephan
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.
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…
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
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“
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).
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
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?
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
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? 🙁
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
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
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
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
Hallo Thomas,
du meldet dich in der Weboberfläche an, gehst oben rechts auf deinen Avatar, dann Systemadministration und dann auf Einstellungen.
Dort prüfen:
SERVICE_URL = https://deinedns.net
FILE_SERVER_ROOT = https://deinedns.net/seafhttp
Ggf Seahub neu starten.
sudo systemctl restart seahub
Viele Grüße
Stephan
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
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.
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
Es hat funktioniert! Vielen Dank für deine Hilfe
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
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
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.
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
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
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
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
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
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
Hallo Mathias,
sowas geht zum Beispiel: Western Digital 4 TB Elements Desktop externe Festplatte USB3.0*
Gruß Stephan
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
Hallo Christian,
ja Dynmask wäre hierzu nicht verkehrt:
https://wiki.ubuntuusers.de/Dnsmasq/
Für mich spielt das keine Rolle, da ich lokal selten auf Seafile zugreife 🙂
Und wenn gehe ich im Browser direkt über die IP des Raspberry.
Viele Grüße
Stephan