Kontakt

Carsten Rieger IT Services
Am Danglfeld 8 | 83132 Pittenhart
Telefon: 08624.9009794
E-Mail: info@c-rieger.de

Seafile Installationsanleitung

Quelle: seafile.com

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

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!

Carsten Rieger IT-Services | Slogan