Mit Hilfe dieser Seafile – Installationsanleitung installieren Sie Seafile in wenigen Minuten auf Basis von Ubuntu 22 LTS und dem Webserver nginx. Der Installationsguide wird derzeit von uns für Ubuntu 24 getestet, es fehlen aber noch Anpassungen seitens Seafile und PIP, weshalb wir aktuell nur Ubuntu 22 empfehlen. Seafile bietet von Haus aus folgende Features:
- Dateiverschlüsselung: „Built-in File Encryption: Files are encrypted before syncing to the server. Even the system admin can’t view the files.“
- Sync-Client: „Drive Client: Use drive client to access files in the cloud in local S: drive without syncing them.“
- Stabilität: „Reliable File Syncing: Has Reliable and efficient file syncing which improves your productivity.“
- Update-Skript: „Easy to Upgrade: Upgrade can be done by running a simple script within a few seconds“
- Privat bis Unternehmen: „Enterprise Ready: Seafile supports AD/LDAP integration, group syncing, fine-grained permission control make the tool easily applied to your enterprise environment.“
Lassen Sie uns beginnen. Melden Sie sich als Benutzer mit sudo-Berechtigungen an:
sudo -s
Systemvoraussetzungen:
Bereiten Sie den Server it den essentiellen Paketen für den Betrieb von Seafile vor:
apt update && apt upgrade -y && apt full-upgrade
apt update && apt upgrade -V && apt install -y \
apt-transport-https bash-completion bzip2 ca-certificates cron curl dialog \
dirmngr ffmpeg ghostscript git gpg gnupg gnupg2 htop jq libfile-fcntllock-perl \
libfontconfig1 libfuse2 locate locales lsb-release nano net-tools rsyslog screen \
smbclient socat software-properties-common ssl-cert tree unzip vim wget zip
Tragen Sie den zukünftigen Servernamen sowohl in die hosts-Datei, als auch in die hostname-Datei ein:
nano /etc/hosts
Passen Sie die roten Werte an Ihre Umgebung an, im Beispiel gehen wir davon aus, dass die Domäne „ihre.domainn.de“ heißt:
127.0.0.1 localhost
127.0.1.1 ihre ihre.domain.de
::1 ihre ihre.domain.de ip6-localhost ip6-loopback
[...]
Geben Sie den korrekten Servername in der hostname-Datei an und ersetzen den roten Wert durch Ihren:
nano /etc/hostname
Der Servername sollte als FQDN, also vollqualifiziert angegeben werden, bspw.:
ihre.domain.de
Überprüfen Sie, ob der Zeitserverdienst mit mindestens einem Endpunkt konfiguriert ist.
nano /etc/systemd/timesyncd.conf
Ist die Zeile NTP auskommentiert (#NTP=), so entfernen Sie das ‚#‘-Zeichen vor NTP und fügen Sie bspw. diese zwei Zeitserver hinzu:
NTP=ntp1.dismail.de ntp2.dismail.de
Speichern Sie diese Datei und starten den Zeitserver neu:
systemctl restart systemd-timesyncd
Sorgen Sie nun dafür, dass der Server nicht in einen „Energiesparmodus“ wechseln kann:
systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target
Starten Sie abschließend den Server neu
reboot now
und melden sich dann erneut mit priviligierten Benutzerrechten am Server an:
sudo -s
Fügen Sie dem System weitere Software-Repositories (Softwarequellen) hinzu, um die aktuellen Releases der jeweiligen Pakete installieren zu können.
apt install -y curl gnupg2 ca-certificates lsb-release ubuntu-keyring curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \ | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \ http://nginx.org/packages/mainline/ubuntu `lsb_release -cs` nginx" \ | sudo tee /etc/apt/sources.list.d/nginx.list echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \ http://nginx.org/packages/mainline/ubuntu `lsb_release -cs` nginx" \ | sudo tee /etc/apt/sources.list.d/nginx.list echo -e "Package: *\nPin: origin nginx.org\nPin: release o=nginx\nPin-Priority: 900\n" \ | sudo tee /etc/apt/preferences.d/99nginx curl -o /usr/share/keyrings/mariadb-keyring.pgp 'https://mariadb.org/mariadb_release_signing_key.pgp' echo "deb [signed-by=/usr/share/keyrings/mariadb-keyring.pgp] https://mirror1.hs-esslingen.de/pub/Mirrors/mariadb/repo/10.11/ubuntu $(lsb_release -cs) main" \ | sudo tee /etc/apt/sources.list.d/mariadb.list
Installieren Sie den Datenbankserver
apt update && apt install -y mariadb-server
Führen Sie die Härtung des Datenbankservers durch:
mysql_secure_installation
Enter current password for root (enter for none): <ENTER> or type the password
Switch to unix_socket authentication [Y/n] Y
Change the root password? [Y/n] Y
Remove anonymous users? [Y/n] Y
Disallow root login remotely? [Y/n] Y
Remove test database and access to it? [Y/n] Y
Reload privilege tables now? [Y/n] Y
Stoppen Sie nun den Datenbankserver und sichern dann die Standardkonfiguration, um unmittelbar danach Anpassungen vornehmen zu können:
systemctl stop mysql
mkdir -p /var/log/mysql && chown -R mysql:mysql /var/log/mysql
mv /etc/mysql/my.cnf /etc/mysql/my.cnf.bak
nano /etc/mysql/my.cnf
[client]
default-character-set = utf8mb4
port = 3306
socket = /var/run/mysqld/mysqld.sock
[mysqld_safe]
log_error=/var/log/mysql/mysql_error.log
nice = 0
socket = /var/run/mysqld/mysqld.sock
[mysqld]
# performance_schema=ON
basedir = /usr
bind-address = 127.0.0.1
binlog_format = ROW
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci
datadir = /var/lib/mysql
default_storage_engine = InnoDB
expire_logs_days = 2
general_log_file = /var/log/mysql/mysql.log
innodb_buffer_pool_size = 2G
innodb_log_buffer_size = 32M
innodb_log_file_size = 512M
innodb_read_only_compressed=OFF
join_buffer_size = 2M
key_buffer_size = 512M
lc_messages_dir = /usr/share/mysql
lc_messages = en_US
log_bin = /var/log/mysql/mariadb-bin
log_bin_index = /var/log/mysql/mariadb-bin.index
log_bin_trust_function_creators = true
log_error = /var/log/mysql/mysql_error.log
log_slow_verbosity = query_plan
log_warnings = 2
long_query_time = 1
max_connections = 100
max_heap_table_size = 64M
max_allowed_packet = 1G
myisam_sort_buffer_size = 512M
port = 3306
pid-file = /var/run/mysqld/mysqld.pid
query_cache_limit = 0
query_cache_size = 0
read_buffer_size = 2M
read_rnd_buffer_size = 2M
skip-name-resolve
socket = /var/run/mysqld/mysqld.sock
sort_buffer_size = 2M
table_open_cache = 400
table_definition_cache = 800
tmp_table_size = 32M
tmpdir = /tmp
transaction_isolation = READ-COMMITTED
user = mysql
wait_timeout = 600
[mysqldump]
max_allowed_packet = 1G
quick
quote-names
[isamchk]
key_buffer = 16M
Speichern und schließen Sie die Datei und starten dann den Datenbankserver neu, um die Seafile-Datenbanken, den Benutzer und das Passworts einzurichten:
systemctl restart mysql.service && mysql
Führen Sie alle nachfolgenden Befehle aus:
CREATE DATABASE seafile_server CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
CREATE DATABASE ccnet_server CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
CREATE DATABASE seahub_server CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
CREATE USER 'seafile'@'localhost' IDENTIFIED BY 'geH@imes-Pwd';
CREATE USER 'seafile'@'127.0.0.1' IDENTIFIED BY 'geH@imes-Pwd';
GRANT ALL PRIVILEGES on seafile_server.* to seafile@localhost;
GRANT ALL PRIVILEGES on ccnet_server.* to seafile@localhost;
GRANT ALL PRIVILEGES on seahub_server.* to seafile@localhost;
GRANT ALL PRIVILEGES on seafile_server.* to seafile@127.0.0.1;
GRANT ALL PRIVILEGES on ccnet_server.* to seafile@127.0.0.1;
GRANT ALL PRIVILEGES on seahub_server.* to seafile@127.0.0.1;
FLUSH privileges;
QUIT;
Überprüfen Sie den Zugang als seafile-Benutzer:
mysql -useafile -p
Installieren Sie nun die python-Binaries und -Abhängigkeiten
apt install -y memcached libmemcached-dev libmysqlclient-dev ldap-utils libldap2-dev python3-venv python3 python3-{dev,pip,pil,ldap,urllib3,setuptools,mysqldb,memcache,requests}
pip3 install --upgrade pip
pip3 install sqlalchemy python3-ldap jinja2 captcha pylibmc
pip3 install --ignore-installed django-simple-captcha
pip3 install djangosaml2
apt-get install python3-dev default-libmysqlclient-dev build-essential
pip3 install mysqlclient
pip3 uninstall Pillow
pip3 install Pillow==9.5.0
Laden Se die aktuellen Seafile-Binaries herunter. Bitte prüfen Sie vorab die aktuellste Version auf der Hersteller-Webseite:
cd /usr/local/src
mkdir -p /srv
wget https://s3.eu-central-1.amazonaws.com/download.seadrive.org/seafile-server_11.0.12_x86-64.tar.gz
Stand: 01. September 2024
tar -xvf seafile-server_11.0.12_x86-64.tar.gz -C /srv/
mv /srv/seafile-server-11.0.12 /srv/seafile
cd /srv/seafile/
Führen Sie nun das Setup-Skript aus:
./setup-seafile-mysql.sh
Der Dialog zeigt sich wie folgt:
root@ubuntu:/srv/seafile# ./setup-seafile-mysql.sh
Checking python on this machine ...
-----------------------------------------------------------------
This script will guide you to setup your seafile server using MySQL.
Make sure you have read seafile server manual at
https://download.seafile.com/published/seafile-manual/home.md
Press ENTER to continue
-----------------------------------------------------------------
What is the name of the server? It will be displayed on the client.
3 - 15 letters or digits
[ server name ] seafile
What is the ip or domain of the server?
For example: www.mycompany.com, 192.168.1.101
[ This server's ip or domain ] ihre.domain.de
Which port do you want to use for the seafile fileserver?
[ default "8082" ] <ENTER>
-------------------------------------------------------
Please choose a way to initialize seafile databases:
-------------------------------------------------------
[1] Create new ccnet/seafile/seahub databases
[2] Use existing ccnet/seafile/seahub databases
[ 1 or 2 ] 2
What is the host of mysql server?
[ default "localhost" ] localhost
What is the port of mysql server?
[ default "3306" ] <ENTER>
Which mysql user to use for seafile?
[ mysql user for seafile ] seafile
What is the password for mysql user "seafile"?
[ password for seafile ] geH@imes-Pwd
verifying password of user seafile ... done
Enter the existing database name for ccnet:
[ ccnet database ] ccnet_server
verifying user "seafile" access to database ccnet_server ... done
Enter the existing database name for seafile:
[ seafile database ] seafile_server
verifying user "seafile" access to database seafile_server ... done
Enter the existing database name for seahub:
[ seahub database ] seahub_server
verifying user "seafile" access to database seahub_server ... done
---------------------------------
This is your configuration
---------------------------------
server name: seafile
server ip/domain: ihre.domain.de
seafile data dir: /srv/seafile-data
fileserver port: 8082
database: use existing
ccnet database: ccnet_server
seafile database: seafile_server
seahub database: seahub_server
database user: seafile
---------------------------------
Press ENTER to continue, or Ctrl-C to abort <ENTER>
---------------------------------
Generating ccnet configuration ...
Generating seafile configuration ...
done
Generating seahub configuration ...
----------------------------------------
Now creating seafevents database tables ...
----------------------------------------
----------------------------------------
Now creating ccnet database tables ...
----------------------------------------
----------------------------------------
Now creating seafile database tables ...
----------------------------------------
----------------------------------------
Now creating seahub database tables ...
----------------------------------------
creating seafile-server-latest symbolic link ... done
-----------------------------------------------------------------
Your seafile server configuration has been finished successfully.
-----------------------------------------------------------------
run seafile server: ./seafile.sh { start | stop | restart }
run seahub server: ./seahub.sh { start <port> | stop | restart <port> }
-----------------------------------------------------------------
If you are behind a firewall, remember to allow input/output of these tcp ports:
-----------------------------------------------------------------
port of seafile fileserver: 8082
port of seahub: 8000
When problems occur, Refer to
https://download.seafile.com/published/seafile-manual/home.md
for information.
Ihr Seafile-Server agiert zum einen intern über Port 8082 und nach Außen (Weboberfläche) über Port 8000. Wir nutzen im weiteren Verlauf aber den Webserver nginx als Reverse Proxy, so dass wir nach Außen nur den TCP-Port 443 sowie den TCP-Port 80 für LetsEncrypt benötigen werden. Zunächst aber starten wir Seafile das erste Mal:
./seafile.sh start
Starten Sie nun die Weboberfläche:
./seahub.sh start
Treten hierbei Probleme bzgl. der locales auf, so führen Sie
dpkg-reconfigure locales
aus und setzen en_US.UTF-8 als Standard.
./seafile.sh start
Legen wir nun Services an, um Seafile automatisiert starten zu lassen. Beginnen wir mit dem Seafile-Service:
tee /etc/systemd/system/seafile.service<<EOF
[Unit]
Description=Seafile
After= mysql.service
After=network.target
[Service]
Type=forking
ExecStart=/srv/seafile/seafile.sh start
ExecStop=/srv/seafile/seafile.sh stop
[Install]
WantedBy=multi-user.target
EOF
Und abschließend den Seahub-Service:
tee /etc/systemd/system/seahub.service<<EOF
[Unit]
Description=Seafile
After= mysql.service
After=network.target
[Service]
Type=forking
ExecStart=/srv/seafile/seahub.sh start
ExecStop=/srv/seafile/seahub.sh stop
[Install]
WantedBy=multi-user.target
EOF
Stoppen Sie nun die manuell gestarteten Dienste:
./seafile.sh stop
./seahub.sh stop
Aktivieren Sie im Anschluß die Systemdienste:
systemctl daemon-reload
systemctl start seafile.service && sudo systemctl enable seafile.service
systemctl start seahub.service && sudo systemctl enable seahub.service
Überprüfen Sie nun, ob die Dienste laufen:
systemctl status seafile.service seahub.service
Um Seafile bequem per Browser zu erreichen installieren wir den Webserver nginx und richten diesen als Reverse Proxy für Seafile ein.
apt update && make-ssl-cert generate-default-snakeoil -y
Nun sind die Vorbereitungen komplett abgeschlossen und wir können mit der Installation des Webservers nginx beginnen.
apt install -y nginx
Den automatischen Start des Dienstes setzen wir wie folgt:
systemctl enable nginx.service
Mit Blick auf die späteren Anpassungen wird die Standardkonfiguration gesichert und eine neue Konfigurationsdatei geöffnet:
mv /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak touch /etc/nginx/nginx.conf && nano /etc/nginx/nginx.conf
Kopieren Sie den gesamten nachfolgenden Inhalt in die Datei:
user www-data;
worker_processes auto;
pid /var/run/nginx.pid;
events {
worker_connections 2048;
multi_accept on;
use epoll;
}
http {
log_format criegerde escape=json
'{'
'"time_local":"$time_local",'
'"remote_addr":"$remote_addr",'
'"remote_user":"$remote_user",'
'"request":"$request",'
'"status": "$status",'
'"body_bytes_sent":"$body_bytes_sent",'
'"request_time":"$request_time",'
'"http_referrer":"$http_referer",'
'"http_user_agent":"$http_user_agent"'
'}';
server_names_hash_bucket_size 64;
access_log /var/log/nginx/access.log criegerde;
error_log /var/log/nginx/error.log warn;
set_real_ip_from 127.0.0.1;
real_ip_header X-Forwarded-For;
real_ip_recursive on;
include /etc/nginx/mime.types;
default_type application/octet-stream;
sendfile on;
send_timeout 3600;
tcp_nopush on;
tcp_nodelay on;
open_file_cache max=500 inactive=10m;
open_file_cache_errors on;
keepalive_timeout 65;
reset_timedout_connection on;
server_tokens off;
resolver 176.9.93.198 176.9.1.117 valid=30s;
resolver_timeout 5s;
include /etc/nginx/conf.d/*.conf;
}
Betreiben Sie Ihre Seafile hinter einem vorgelagertem Reverse Proxy, so ersetzen Sie die IP des Parameteres „set_real_ip_from 127.0.0.1“ mit der IP des Reverse Proxys („set_real_ip_from w.x.y.z„).
Speichern Sie die Datei und schließen Sie diese, um im Anschluß den Webserver neu zu starten:
systemctl restart nginx.service
Vorbereitend für die SSL Zertifikate und die Webverzeichnisse legen wir vier Ordner an und setzen die korrekten Berechtigungen:
mkdir -p /var/www/letsencrypt/.well-known/acme-challenge /etc/letsencrypt/rsa-certs /etc/letsencrypt/ecc-certs
chown -R www-data:www-data /var/www
Wir richten verschiedene vHosts, also Webserverkonfigurationsdateien, ein und modifizieren die Standard vHost-Datei (default.conf) so, dass diese auch durch spätere Systemupdates nicht automatisch verändert wird. Sichern Sie die Standard vhost-Datei namens default.conf und legen zuerst leere vHost-Dateien zum Konfigurieren an.
[ -f /etc/nginx/conf.d/default.conf ] && mv /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf.bak
touch /etc/nginx/conf.d/default.conf
touch /etc/nginx/conf.d/http.conf
touch /etc/nginx/conf.d/seafile.conf
Somit ist durch die leere „default.conf“ Datei auch bei späteren Aktualisierungen des Webservers sichergestellt, dass diese Standardkonfiguration den Seafilebetrieb nicht beeinflußt.
Erstellen Sie die globale vhost-Datei, um die http-Standardanfragen permanent auf https umzuleiten und zudem die SSL-Zertifikatskommunikation mit Let’sEncrypt zu ermöglichen:
nano /etc/nginx/conf.d/http.conf
Kopieren Sie alle nachfolgenden Zeilen in die Datei http.conf und passen den rot markierten Domainnamen entsprechend Ihres Systems an:
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name ihre.domain.de;
root /var/www;
location ^~ /.well-known/acme-challenge {
default_type text/plain;
root /var/www/letsencrypt;
}
location / {
return 301 https://$host$request_uri permanent;
}
}
Speichern und schließen Sie diese Datei. Bearbeiten Sie nun die eigentliche Nextcloud vHost-Datei seafile.conf, die sämtliche Konfigurationen für den Betrieb der Nextcloud enthält.
nano /etc/nginx/conf.d/seafile.conf
Kopieren Sie alle nachfolgenden Zeilen in die Datei seafile.conf und passen den rot markierten Domainnamen entsprechend Ihres Systems an
server {
listen 443 ssl;
http2 on;
server_name ihre.domain.de;
ssl_certificate /etc/ssl/certs/ssl-cert-snakeoil.pem;
ssl_certificate_key /etc/ssl/private/ssl-cert-snakeoil.key;
ssl_trusted_certificate /etc/ssl/certs/ssl-cert-snakeoil.pem;
#ssl_certificate /etc/letsencrypt/rsa-certs/fullchain.pem;
#ssl_certificate_key /etc/letsencrypt/rsa-certs/privkey.pem;
#ssl_certificate /etc/letsencrypt/ecc-certs/fullchain.pem;
#ssl_certificate_key /etc/letsencrypt/ecc-certs/privkey.pem;
#ssl_trusted_certificate /etc/letsencrypt/ecc-certs/chain.pem;
ssl_dhparam /etc/ssl/certs/dhparam.pem;
ssl_protocols TLSv1.3 TLSv1.2;
ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256';
ssl_ecdh_curve secp384r1;
ssl_prefer_server_ciphers on;
server_tokens off;
ssl_session_tickets off;
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;
client_max_body_size 0;
access_log /var/log/nginx/seahub.access.log;
error_log /var/log/nginx/seahub.error.log;
}
location /seafdav {
proxy_pass http://127.0.0.1:8080/seafdav;
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_set_header X-Forwarded-Proto $scheme;
proxy_read_timeout 1200s;
client_max_body_size 0;
access_log /var/log/nginx/seafdav.access.log;
error_log /var/log/nginx/seafdav.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 /srv/seafile/seahub;
}
}
Speichern und schließen Sie diese Datei und erweitern dann die Server- und Systemsicherheit durch die Möglichkeit des sicheren Schlüsselaustauschs mittels eines Diffie-Hellman Schlüssels (» git: https://codeberg.org/criegerde/nextcloud/src/branch/master/etc/ssl/certs/dhparam.pem):
openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096
Bitte haben Sie nun Geduld! Das Generieren kann – in Abhängigkeit von der Systemleistung – einige Minuten dauern. Erst wenn das Generieren abgeschlossen ist, starten wir den Webserver erneut durch.
systemctl restart nginx.service
Bitte stellen Sie sicher, dass Ihr Server sowohl über Port 80/TCP als auch über Port 443/TCP von außen erreichbar ist. Das Erstellen und Aktualisieren von Let’s Encryptzertifikaten erfolgt im Zuge dieser Anleitung zwingend über http und Port 80. Andere Möglichkeiten werden von uns im Artikel (Let’s Encrypt Zertifikate (RSA 4096 oder EC 384) ohne offene TCP-Ports 80 und 443 beantragen und erstellen beschrieben.
Für das Zertifikatshandling erstellen wir nun einen dedizierten Benutzer und fügen diesen der www-data Gruppe hinzu:
adduser acmeuser --gecos "" --disabled-password usermod -aG www-data acmeuser
Diesem technischen Benutzer erteilen wir noch die notwendigen Berechtigungen, um bei einer Zertifikatserneuerung den notwendigen Webserverstart initiieren zu können.
touch /etc/sudoers.d/acmeuser cat <<EOF >/etc/sudoers.d/acmeuser acmeuser ALL=NOPASSWD: /bin/systemctl reload nginx.service EOF
Wechseln Sie in die Shell des neuen Benutzers (acmeuser) um die Zertifikatssoftware zu installieren und verlassen diese Shell direkt im Anchluß wieder:
su - acmeuser
curl https://get.acme.sh | sh exit
Passen Sie die entsprechenden Datei- und Verzeichnisberechtigungen an, um die neuen Zertifikate darin speichern zu können:
chmod -R 775 /var/www/letsencrypt && chmod -R 770 /etc/letsencrypt && chown -R www-data:www-data /var/www/ /etc/letsencrypt
Setzen Sie Let’s Encrypt als Standard CA für Ihren Server
su - acmeuser -c ".acme.sh/acme.sh --set-default-ca --server letsencrypt"
und wechseln dann erneut in die Shell des neuen Benutzers
su - acmeuser
Beantragen Sie nun die SSL-Zertifikate von Let’s Encrypt und ersetzen dabei ihre.domain.de mit Ihrer realen Domain:
acme.sh --issue -d ihre.domain.de --server letsencrypt --keylength 4096 -w /var/www/letsencrypt --key-file /etc/letsencrypt/rsa-certs/privkey.pem --ca-file /etc/letsencrypt/rsa-certs/chain.pem --cert-file /etc/letsencrypt/rsa-certs/cert.pem --fullchain-file /etc/letsencrypt/rsa-certs/fullchain.pem --reloadcmd "sudo /bin/systemctl reload nginx.service"
acme.sh --issue -d ihre.domain.de --server letsencrypt --keylength ec-384 -w /var/www/letsencrypt --key-file /etc/letsencrypt/ecc-certs/privkey.pem --ca-file /etc/letsencrypt/ecc-certs/chain.pem --cert-file /etc/letsencrypt/ecc-certs/cert.pem --fullchain-file /etc/letsencrypt/ecc-certs/fullchain.pem --reloadcmd "sudo /bin/systemctl reload nginx.service"
Verlassen Sie die Shell des neuen Benutzers
exit
Entfernen Sie Ihre bisher verwendeten Self-Signed-Zertifikate aus nginx und aktivieren Sie die neuen, vollwertigen und bereits gültigen SSL Zertifikate von Let’s Encrypt. Starten Sie dann den Webserver neu:
sed -i '/ssl-cert-snakeoil/d' /etc/nginx/conf.d/nextcloud.conf sed -i s/#\ssl/\ssl/g /etc/nginx/conf.d/nextcloud.conf systemctl restart nginx.service
Um sowohl die SSL-Zertifikate automatisch zu erneuern, als auch den notwendigen Webserverneustart zu initiieren, wurde automatisch ein Cronjob angelegt.
crontab -l -u acmeuser
Wir können nun mit der Einrichtung von Seafile fortfahren.
cd /srv/conf/
Bearbeiten Sie die Datei
nano seahbub_settings.py
# -*- coding: utf-8 -*-
SECRET_KEY = "b'q+op*xn3vj6l1&m6-2tphc_$66bu7qjq1vsx@l0s78x$7_5w*w'"
SERVICE_URL = "https://ihre.domain.de"
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'seahub_server',
'USER': 'seafile',
'PASSWORD': 'geH@imes-Pwd',
'HOST': '127.0.0.1',
'PORT': '3306',
'OPTIONS': {'charset': 'utf8mb4'},
}
}
FILE_SERVER_ROOT = 'https://ihre.domain.de/seafhttp'
CSRF_TRUSTED_ORIGINS = ["https://ihre.domain.de"]
Starten Sie nun letztmalig alle Dienste neu und melden sich dann an Seafile an.
systemctl restart seafile.service seahub.service nginx
systemctl status seafile.service seahub.service nginx
Im Browser ihrer Wahl rufen Sie ihre.domain.de auf und melden sich als Administrator an.
Sichern Sie das System noch rudimentär ab. Wir nutzen dafür UFW:
apt install -y ufw
ufw allow 80/tcp comment "LetsEncrypt (http)"
ufw allow 443/tcp comment "LetsEncrypt (https)"
ufw allow 22/tcp comment "SSH"
Möchten Sie SSH nicht nach außen freigeben (empfohlen!) und nur aus dem internen Netz nutzen, so ersetzen Sie den letzten ufw-Befehl (ufw allow 22/tcp) durch diesen und ersetzen das exemplarische Subnetz durch ihr Subnetz :
ufw allow proto tcp from w.x.y.0/24 to any port 22 comment "SSH nur aus dem LAN"
Setzen Sie das Firewall-Logging auf „medium“ und verhindern nicht definierte eingehende Verbindungen.
ufw logging medium ufw default deny incoming
Aktivieren Sie die Firewall und starten diese neu:
ufw enable systemctl restart ufw.service ufw status verbose
Die Installation und Absicherung Ihres Nextcloudservers wurde erfolgreich abgeschlossen und so wünsche ich Ihnen viel Spaß mit Ihren Daten in Ihrer privaten Cloud. Über Ihre Unterstützung (diese wird ordnungsgemäß versteuert!) würden sich meine Frau, meine Zwillinge und ich sehr freuen!