Seafile Server - Installation auf Ubuntu 20.04.x LTS
Aus znilwiki
Changelog:
- 22.05.2020: Erste Version mit Seafile 7.1.3
Installation Ubuntu Server
Mein Server ist eine VMware VM die ich wie folgt installiert habe:
Hardware
- HDD1 mit 16GB (Boot)
- HDD2 mit 1,8TB unter /home (Seafile Daten) per LVM
- 2 CPU
- 2 GB RAM
Grundinstallation
CD einlegen und los,
die Fragen beantwortet Ihr wie folgt (sind ggf. die Überschriften der Dialoge):
- Taste drücken um in den Installationsmodus zu kommen (so könnt Ihr gleich mit deutscher Tastatur starten)
- Deutsch
- Ubuntu Server installieren
- Deutsch
- Aktualisieren auf neuen Installer (ggf. erscheint der Dialog nicht)
- Erledigt
Jetzt könnt Ihr schon die gewünschte feste IP-Adresse einstellen. Wählt dazu mit den Pfeiltasten den ens160
Eintrag aus und drückt Enter:
- ens160 => Bearbeite IPv4
- Manuell
- Bei Subnetz kommt nicht die Subnetzmaske sondern das Netzwerk mit Suffix. Bei einer 24 Maske (= 255.255.255.0) ist das die IP 0 mit Suffix /24
- Erledigt
- Bei Bedarf, sonst leer lassen
- Erledigt (Vorgabe übernehmen)
- Erledigt => Nutzt die ganze Festplatte ohne LVM. Die Festplatte lässt sich später trotzdem leicht vergrößern
- Erledigt
- Fortfahren
- Ich lege hier den Benutzer installadmin an. Wählt euren Benutzer und Passwort nach Wunsch (Aufschreiben!). Names eueres Server müsste ihr anpassen (Da steht Zabbix weil ich den Screenshot recycelt habe)
- OpenSSH-Server auswählen => Erledigt (für Zugriff z.B. mit Putty)
- Erledigt
Ab jetzt heißt es abwarten. Wenn er kann lädt er gleich ein paar Sicherheitsupdates nach:
- Neustart
- ISO aus der VM entfernen und Enter drücken
- Nach dem Reboot wartet ab bis diverse Meldungen abgelaufen sind
PuTTY
Ab dieser Stelle könnt Ihr PuTTY oder den SSH Client eurer Wahl nutzen - was ich dringend empfehle. Denn dann könnt Ihr die noch folgenden Befehle einfach per Copy&Paste übernehmen.
Die IP-Adresse habt Ihr zu diesem Zeitpunkt ja bereits festgelegt.
Nach der Anmeldung nutze ich immer gerne ein
sudo -i
Damit wechselt man dauerhaft zum root Benutzer und muss nicht vor jedem Befehl ein sudo
stellen.
root wieder freischalten
- Mit Benutzer installadmin anmelden
sudo -i
- Kennwort des Benutzer installadmin eintippen
passwd root
- neues Kennwort für "root" 2x eintippen
- Lokal Anmelden kann man sich nun mit root - aber eine Anmeldung über SSH funktioniert dann immer noch nicht.
- Damit diese auch funktioniert müsst ihr die
sshd_config
bearbeiten:
nano /etc/ssh/sshd_config
sucht nach der Zeile (STRG + W ist Suchen) nach
#PermitRootLogin without-password
und stellt den Cursor in die Zeile.
Drückt nun einmal F9 und 2x F10 - damit erstellt Ihr eine Kopie der Zeile.
Ändert die Kopie wie folgt ab:
PermitRootLogin yes
Speichert die Datei (STRG + x, dann y und Enter) und startet den ssh Dienst neu:
systemctl restart sshd.service
Ab dann klappt es auch mit dem SSH-Login für den Benutzer root, z.B. über puTTY
Jetzt 2x
exit
eintippen wodurch sich das PuTTY Fenster schließt - der (eingeschränkte) Benutzer installadmin hat sich somit abgemeldet
Anmelden als root
Startet PuTTY wieder und meldet euch diesmal gleich als Benutzer root an.
nano & Co auf Deutsch
nano war eben z.B. noch auf Englisch, mit
apt install -y language-pack-de
ist es (und vieles andere auf deutsch).
Installadmin löschen
Den installadmin entfernen wir mit
deluser --remove-home installadmin
root farbiger Prompt
Als root anmelden:
nano ~/.bashrc
Zeile 39 (Alt + C aktiviert Zeilennummernanzeige):
#force_color_prompt=yes
ändern zu (# entfernen):
force_color_prompt=yes
nun wieder Abmelden - ab der nächsten Anmeldung ist der neue Prompt aktiv.
Wer den sofort haben will (ohne neu Anmelden):
source ~/.bashrc
Feste IP-Adresse vergeben
Der Server hat dank des neuen Setupdialoges nun bereits eine feste IP-Adresse.
Solltet Ihr an dieser etwas ändern müssen so bearbeitet die Datei
nano /etc/netplan/00-installer-config.yaml
Multipathing deinstallieren
Ab Werk wird nun das
/var/log/syslog
mit Multipath-Meldungen vollgemüllt:
May 21 14:28:19 zabbix multipathd[674]: sda: add missing path May 21 14:28:19 zabbix multipathd[674]: sda: failed to get udev uid: Invalid argument May 21 14:28:19 zabbix multipathd[674]: sda: failed to get sysfs uid: Invalid argument May 21 14:28:19 zabbix multipathd[674]: sda: failed to get sgio uid: No such file or directory
bei mir passiert das im 5 Sekundentakt.
In dieser VM macht Multipath keinen Sinn, also deaktivieren und deinstallieren und das Syslog von den Meldungen befreien:
systemctl stop multipathd.service && systemctl disable multipathd.service apt remove -y multipath-tools && apt purge -y multipath-tools
Cloud-Init deinstallieren
Wenn Ihr die VM reboootet und die Console betrachtet tauchen kurz nach dem Reboot (Fehler-)Meldungen zum Cloud-init auf:
Das Cloud-Init ist - wenn ich mich recht erinnere - dafür da falls eure VM z.B. bei Amazon AWS, Azure oder andere Anbieter läuft um z.B. die Netzwerkinformationen vom Hoster/Provider zu erhalten.
Brauchen wir nicht, also weg damit:
echo 'datasource_list: [ None ]' | tee /etc/cloud/cloud.cfg.d/90_dpkg.cfg apt purge -y cloud-init rm -rf /etc/cloud/ && sudo rm -rf /var/lib/cloud/ apt autoremove -y reboot
Zeitzone setzen
In meiner VM ist die Uhrzeit zu diesem Zeitpunkt falsch (gebt mal date
ein) - weil der ESXi-Host auf UTC Zeit läuft und die Ubuntu in der VM die richtige Zeitzone nicht eingestellt hat.
Wir korrigieren das mit
timedatectl set-timezone Europe/Berlin
ein
date
sollte dann die richtige Uhrzeit ausspucken.
Der automatische Sync mit dem Internet sollte auch aktiv sein, mit
timedatectl set-ntp true
ist er es auf jedem Fall.
Updates einspielen
- wieder anmelden als root
- Updates suchen für Betriebssystem: (aktualisiert den Katalog aus den Update-Quellen)
apt update
- Updates einspielen:
apt dist-upgrade -y
- Nach Update überflüssige Pakete entfernen:
apt autoremove -y
Ich mache das normalerweise immer als Einzeiler:
apt update && apt upgrade -y && apt autoremove -y
Automatische Updates deaktivieren
Ich persönlich möchte nicht das der Seafile-Server automatisch Updates einspielt.
Die automatischen Updates aktualisieren - soweit ich das beobachten konnte - nur den Kernel. Aber auch das möchte ich nicht sondern geplant durchführen.
Die automatischen Updates verhindern wir mit
apt remove -y unattended-upgrades
Zusätzliche Festplatte einbinden
Zuerst müssen wir herausfinden wie die 2. Festplatte heißt:
ls -l /dev/sd*
Ausgabe:
brw-rw---- 1 root disk 8, 0 Mai 22 16:41 /dev/sda
brw-rw---- 1 root disk 8, 1 Mai 22 16:41 /dev/sda1
brw-rw---- 1 root disk 8, 2 Mai 22 16:41 /dev/sda2
brw-rw---- 1 root disk 8, 16 Mai 22 16:41 /dev/sdb
/dev/sda
ist die erste Festplatte, sda1
und sda2
sind Partitionen auf dieser.
Unsere Zielfestplatte Platte ist die /dev/sdb
Wir arbeiten mit dem LVM - der erleichtert uns eine spätere Vergrößerung der Festplatte, die Befehle für das einbinden der neuen Festplatte sind wie folgt:
pvcreate /dev/sdb vgcreate seafile-data /dev/sdb lvcreate -n home -l100%VG seafile-data mkfs.ext4 /dev/seafile-data/home
Das kann je nachdem wie schnell und groß euere Platte ist einen Moment dauern (auch mal Minuten).
Damit haben wir
- Das PV - Physical Volume - angelegt pvcreate
- Die VG - Volume Group - angelegt mit dem PV als Inhalt vgcreate und dem Namen seafile-data
- Ein LV - Logisches Volume - mit dem Name home welches 100% des Platzes in der VG seafile-data nutzt
- Und das neue LV mit dem EXT4 Dateisystem formatiert
Fehlt noch das mounten bzw. das automatische mounten beim booten:
nano /etc/fstab
und folgende Zeile anhängen:
/dev/mapper/seafile--data-home /home ext4 defaults 0 1
Damit wird die 2. Festplatte auf das /home
Verzeichnis gemappt. Das klappt nur wenn
- Das Verzeichnis leer ist (weil Ihr den installadmin wieder gelöscht habt
- als root angemeldet seit und es noch keine anderen Benutzer gibt
Alternativ müsstet Ihr den Pfad anpassen, z.B. ein Unterordner unterhalb von /home
Um das Mounten zu testen könnt Ihr rebooten oder folgenden Befehl eintippen:
mount -a
Wir überprüfen das ganze z.B. mit
df -h
Ausgabe:
Dateisystem Größe Benutzt Verf. Verw% Eingehängt auf
udev 952M 0 952M 0% /dev
tmpfs 199M 1,1M 198M 1% /run
/dev/sda2 16G 4,3G 11G 29% /
tmpfs 994M 0 994M 0% /dev/shm
tmpfs 5,0M 0 5,0M 0% /run/lock
tmpfs 994M 0 994M 0% /sys/fs/cgroup
/dev/loop0 9,2M 9,2M 0 100% /snap/canonical-livepatch/95
/dev/loop1 94M 94M 0 100% /snap/core/9066
/dev/loop2 55M 55M 0 100% /snap/core18/1705
/dev/loop3 69M 69M 0 100% /snap/lxd/14804
/dev/loop4 28M 28M 0 100% /snap/snapd/7264
tmpfs 199M 0 199M 0% /run/user/0
/dev/mapper/seafile--data-home 1,8T 77M 1,7T 1% /home
Benötigte Pakete installieren
Folgende Programmpakte sollten Installiert sein (ermöglicht sowohl die Community als auch die Professionell Version):
apt install -y python3 python3-setuptools python3-pip python3-setuptools python3-urllib3 ffmpeg python3-mysqldb python3-memcache python3-pil apache2 mariadb-server pip3 install --timeout=3600 Pillow pylibmc captcha jinja2 sqlalchemy django-pylibmc django-simple-captcha python3-ldap
Da ist auch gleich der Apache-Webserver (wird als Reverse-Proxy genutzt) und MySQL für die Datenbanken dabei.
Seafile Benutzer und Verzeichnisse anlegen
Wir erstellen einen Benutzer seafile dessen Home-Verzeichnis gleichzeitig unser Seafile-Installationsordner ist. Den Pfad müsst Ihr ggf. an eure Wünsche oder Verhältnisse anpassen, bei mir ist der ganze freie Speicherplatz unter /home
- dort habe ich auch die zusätzliche Festplatte eingehängt.
adduser --disabled-login --gecos "Seafile" seafile --home /home/seafile/
Nun legen wir noch einen symbolischen Link an (Warum steht am Ende dieses Abschnittes):
ln -s /home/seafile /var/lib/seafile
Wir wechseln auf diesen eben neu erstellten Benutzer:
su - seafile
und sind dann automatisch im Heimatverzeichnis des Benutzers - also in
/home/seafile/
Wir erstellen nun einen neuen Ordner haiwen und wechseln in diesen:
mkdir haiwen cd haiwen
Warum haiwen? Und warum der symbolische Link nach /var/lib/seafile
? Nun, dann halten wir uns an das vorgeschlagene Schema der Seafile-Entwickler - und alle Beispiele und Anleitungen aus dem Internet sollte ohne Änderungen funktionieren. Der Ordner heisst "haiwen" weil Seafile wohl so im Chinesischen genannt wird.
Eigentlich soll statt haiwen dann der Name eurer Organisation / Firma verwendet werden.
su - seafile
wechselt Ihr ja zum Benutzer seafile - mit exit
landet Ihr wieder in eurer ursprünglichen Sitzung
Seafile herunterladen und installieren
/home/seafile/haiwen
Die Dateien die wir herunterladen müssen wir nur entpacken und sind sofort lauffähig.
Also laden wir die Dateien für den Server herunter und enpacken einfach direkt in das Zielverzeichnis.
Version 7.1.4:
wget https://download.seadrive.org/seafile-server_7.1.4_x86-64.tar.gz
Entpacken und archivieren:
tar xzfv seafile-server_7.1.4_x86-64.tar.gz mkdir installed mv seafile-server_* installed
Die ganze Verzeichnisstruktur sollte nun so aussehen:
/home
├── lost+found
└── seafile
└── haiwen
├── installed
│ └── seafile-server_7.1.4_x86-64.tar.gz
└── seafile-server-7.1.4
├── check_init_admin.py
├── reset-admin.sh
├── runtime
├── seaf-fsck.sh
├── seaf-fuse.sh
├── seaf-gc.sh
├── seafile
├── seafile.sh
├── seahub
├── seahub.sh
├── setup-seafile-mysql.py
├── setup-seafile-mysql.sh
├── setup-seafile.sh
├── sql
└── upgrade
MySQL Datenbanken anlegen
Vorweg - warum um himmelswillen Nutzen die da 3 verschiedenen Datenbanken für eine Software? Wenn Ich mir die Tabellen in den 3 Datenbanken anschaue gibt es keine Überschneidungen, die hätten also auch alles in EINE datenbank packen können - und vom Setup ist das auch möglich.
Nun bin ich aber ein Schisser und nehme doch die 3 Datenbanken ... weil sich die Programmierer ggf. auf die Dreiteilung verlassen und bei einem Update alles den Bach herunter gehen könnte.
mysql create database `ccnet-db` character set = 'utf8'; create database `seafile-db` character set = 'utf8'; create database `seahub-db` character set = 'utf8'; create user 'seafile'@'localhost' identified by 'seafile'; GRANT ALL PRIVILEGES ON `ccnet-db`.* to `seafile`@`localhost`; GRANT ALL PRIVILEGES ON `seafile-db`.* to `seafile`@`localhost`; GRANT ALL PRIVILEGES ON `seahub-db`.* to `seafile`@`localhost`; FLUSH PRIVILEGES; exit
Seafile Setup ausführen
Wir arbeiten weiter in der Anmeldung als Benutzer seafile (su - seafile
) und führen das Setup von Seafile mit MySQL aus:
cd /home/seafile/haiwen/seafile-server-* ./setup-seafile-mysql.sh
Die Dialoge beantwortet Ihr wie folgt:
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 ] cloud
What is the ip or domain of the server?
For example: www.mycompany.com, 192.168.1.101
[ This server's ip or domain ] cloud.znil.org
Which port do you want to use for the seafile fileserver?
[ default "8082" ]
-------------------------------------------------------
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" ]
What is the port of mysql server?
[ default "3306" ]
Which mysql user to use for seafile?
[ mysql user for seafile ] seafile
What is the password for mysql user "seafile"?
[ password for seafile ]
verifying password of user seafile ... done
Enter the existing database name for ccnet:
[ ccnet database ] ccnet-db
verifying user "seafile" access to database ccnet-db ... done
Enter the existing database name for seafile:
[ seafile database ] seafile-db
verifying user "seafile" access to database seafile-db ... done
Enter the existing database name for seahub:
[ seahub database ] seahub-db
verifying user "seafile" access to database seahub-db ... done
---------------------------------
This is your configuration
---------------------------------
server name: cloud
server ip/domain: cloud.znil.org
seafile data dir: /home/seafile/haiwen/seafile-data
fileserver port: 8082
database: use existing
ccnet database: ccnet-db
seafile database: seafile-db
seahub database: seahub-db
database user: seafile
---------------------------------
Press ENTER to continue, or Ctrl-C to abort
---------------------------------
Generating ccnet configuration ...
done
Successly create configuration dir /home/seafile/haiwen/ccnet.
Generating seafile configuration ...
Done.
done
Generating seahub configuration ...
----------------------------------------
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.
Das Passwort für den MySQL-Benutzer seafile ist seafile,den Servernamen name of server und ip or domain müsst ihr gemäß eurer Umgebung festlegen
Danach starten wir die Dienste als Test und um die Konfiguration ganz abzuschließen:
cd .. cd seafile-server-latest ./seafile.sh start ./seahub.sh start
Nun kommen wieder ein paar Fragen:
LC_ALL is not set in ENV, set to en_US.UTF-8
Starting seahub at port 8000 ...
----------------------------------------
It's the first time you start the seafile server. Now let's create the admin account
----------------------------------------
What is the email for the admin account?
[ admin email ] admin@znil.net
What is the password for the admin account?
[ admin password ]
Enter the password again:
[ admin password again ]
----------------------------------------
Successfully created seafile admin
----------------------------------------
Seahub is started
Done.
Im Moment lauscht der Seafile Server nur lokal auf 127.0.0.1:8000 - das müssen wir noch anpassen:
./seahub.sh stop nano ../conf/gunicorn.conf
und dann die Zeile
bind = "127.0.0.1:8000"
auf
bind = "0.0.0.0:8000"
ändern. ./seahub.sh start
Mit der Email-Adresse und dem Passwort könnt Ihr euch nun am Seafile Server anmelden:
http://192.168.45.21:8000
Seafile beim Systemstart automatisch starten
Falls Seafile noch läuft stoppen wir es nun:
su - seafile /home/seafile/haiwen/seafile-server-latest/seahub.sh stop /home/seafile/haiwen/seafile-server-latest/seafile.sh stop exit
Für den Start als Dienst nutzt man seit Ubuntu 16.04.x den systemd
Dienst:
Seafile-Service:
nano /etc/systemd/system/seafile.service
Inhalt:
[Unit]
Description=Seafile
After=network.target mysql.service
[Service]
Type=oneshot
ExecStart=/home/seafile/haiwen/seafile-server-latest/seafile.sh start
ExecStop=/home/seafile/haiwen/seafile-server-latest/seafile.sh stop
RemainAfterExit=yes
User=seafile
Group=seafile
[Install]
WantedBy=multi-user.target
Seahub-Service:
nano /etc/systemd/system/seahub.service
Inhalt:
[Unit]
Description=Seafile hub
After=network.target seafile.service
[Service]
# change start to start-fastcgi if you want to run fastcgi
ExecStart=/home/seafile/haiwen/seafile-server-latest/seahub.sh start
ExecStop=/home/seafile/haiwen/seafile-server-latest/seahub.sh stop
User=seafile
Group=seafile
Type=oneshot
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
Nun noch aktivieren:
systemctl enable seafile.service systemctl enable seahub.service
Nun können wir Seafile als Dienst starten:
systemctl start seafile.service systemctl start seahub.service
Ihr könnt den Server auch rebooten - danach sollte wieder auf Port 8000 die Webseite von Seafile erreichbar sein.
Server mit SSL / HTTPS über Apache absichern
Auf meinem Server ist als Webserver der Apache 2 installiert.
Seafile arbeitet im Moment noch an allem vorbei, also müssen wir im ersten Schritt das ganze auf Apache 2 umbauen.
Schritt 1: Umbau auf http Port 80
So, zunächst biegen wir den Zugriff von Port 8000 auf Port 80 um - man kann den Seafile-Server dann also unter seiner Subdomain oder Domain erreichen ohne den Port angeben zu müssen - allerdings noch per http ohne Verschlüsselung. Wenn das funktioniert können wir im Anschluss auf https umbauen.
Als Vorlage habe ich mich an dieser Anleitung orientiert: https://manual.seafile.com/deploy/deploy_with_apache.html
Wir Konfigurieren den Apache für die Verwendung von ReWrite und dem Proxy Modul (SSL ist schon mal für den nächsten Abschnitt mit drin):
a2enmod rewrite a2enmod proxy_http a2enmod ssl
und dann müssen wir den Apache Webserver einmal neu starten:
systemctl restart apache2.service
Jetzt ändern wir die Konfigurationsdatei der Default Webseite von Apache:
nano /etc/apache2/sites-enabled/000-default.conf
Löscht den GANZEN Inhalt (F9 benutzen) und fügen statt dessen folgendes ein:
<VirtualHost *:80>
ServerName seafile.znil.net
DocumentRoot /var/www
Alias /media /home/seafile/haiwen/seafile-server-latest/seahub/media
RewriteEngine On
<Location /media>
Require all granted
</Location>
#
# seafile fileserver
#
ProxyPass /seafhttp http://127.0.0.1:8082
ProxyPassReverse /seafhttp http://127.0.0.1:8082
RewriteRule ^/seafhttp - [QSA,L]
#
# seahub
#
SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1
ProxyPreserveHost On
ProxyPass / http://127.0.0.1:8000/
ProxyPassReverse / http://127.0.0.1:8000/
</VirtualHost>
Den Servernamen müsst und solltet Ihr anpassen.
Dann ändern wir die
nano /home/seafile/haiwen/conf/ccnet.conf
und entfernen bei
SERVICE_URL = http://seafile.znil.net:8000
die :8000
am Ende:
SERVICE_URL = http://seafile.znil.net
Als nächsten die
nano /home/seafile/haiwen/conf/seahub_settings.py
Dort hängen wir als letzte Zeile diese hier an:
HTTP_SERVER_ROOT = 'http://seafile.znil.net/seafhttp'
Jetzt haben wir alles und müssen nur noch die Dienste neu starten:
systemctl restart apache2.service systemctl stop seahub.service systemctl stop seafile.service systemctl start seafile.service systemctl start seahub.service
JETZT solltet Ihr euren Seafile-Server unter
http://subdomain.domain.suffix http://192.168.45.21
erreichen können.
Und zwar könnt Ihr euren Server jetzt nur noch über diese Adresse erreichen - der Zugriff über Port 8000 funktioniert nicht mehr.
Schritt 2: Umbau von http auf https
So, wenn der Zugriff über http:// läuft ist das Schlimmste geschafft.
Zertifikat erstellen
Wir bauen uns hier nun ein selbstsigniertes Zertifikat. Wenn Ihr ein richtiges habt dann legt es einfach an entsprechender Stelle ab.
Wir wechseln ins Seafile Verzeichnis und legen einen neuen Ordner an:
cd /home/seafile/haiwen mkdir certificates cd certificates/
Dann erstellen wir mit openssl den Schlüssel und das Zertifikat:
openssl genrsa -out privkey.pem 2048 openssl req -new -x509 -key privkey.pem -out cacert.pem -days 3650 chmod +r *
Er stellt euch nach dem 2. Befehl ein paar Fragen, wichtig ist aber nur die Antwort auf die folgende:
Common Name (e.g. server FQDN or YOUR name) []:seafile.znil.net
Hier müsst ihr unbedingt den Domänennamen angeben wie Ihr diesen auch im Webbrowser eintippt!
Nun müsstest Ihr 2 Dateien haben im Ordner certificates:
/home/seafile/haiwen/certificates/ ├── cacert.pem └── privkey.pem
Apache konfiguration anpassen
Zunächst muss - wen noch nicht geschehen - die SSL Unterstützung in Apache aktiviert werden:
a2enmod ssl
Dann bearbeiten wir noch mal die Datei
nano /etc/apache2/sites-available/default-ssl.conf
und löscht wieder den ganzen Inhalt (F9) und ersetzt diesen wie folgt:
<VirtualHost *:443>
ServerName www.myseafile.com
DocumentRoot /var/www
SSLEngine On
SSLCertificateFile /home/seafile/haiwen/certificates/cacert.pem
SSLCertificateKeyFile /home/seafile/haiwen/certificates/privkey.pem
Alias /media /home/seafile/haiwen/seafile-server-latest/seahub/media
<Location /media>
Require all granted
</Location>
RewriteEngine On
#
# seafile fileserver
#
ProxyPass /seafhttp http://127.0.0.1:8082
ProxyPassReverse /seafhttp http://127.0.0.1:8082
RewriteRule ^/seafhttp - [QSA,L]
#
# seahub
#
SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1
ProxyPreserveHost On
ProxyPass / http://127.0.0.1:8000/
ProxyPassReverse / http://127.0.0.1:8000/
</VirtualHost>
Denkt an die Anpassung des Servernamens!
Ggf. muss die Seite noch aktiviert werden:
a2ensite default-ssl.conf
Seafile Konfiguration anpassen
Jetzt muss Seafile selbst noch wissen das wir https:// nutzen:
nano /home/seafile/haiwen/conf/ccnet.conf
und dort die Zeile
SERVICE_URL = http://seafile.znil.net
auf
SERVICE_URL = https://seafile.znil.net
ändern.
Und noch in der
nano /home/seafile/haiwen/conf/seahub_settings.py
die Zeile
HTTP_SERVER_ROOT = 'http://seafile.znil.net/seafhttp'
in
HTTP_SERVER_ROOT = 'https://seafile.znil.net/seafhttp'
ändern.
Wieder alle Dienste neu starten:
systemctl restart apache2.service systemctl stop seahub.service systemctl stop seafile.service systemctl start seafile.service systemctl start seahub.service
und nun erreichen wir Seafile unter
https://subdomain.domain.suffix https://192.168.45.21
Bei einem selbst erstellten Zertifikat bekommt Ihr nun eine Sicherheitswarnung (ich habe es bei mir in die Vertrauenswürdigen Stammzertifizierungsstellen importiert, dann ist Ruhe)
Migration Seafile auf neuen Server
Nach einigen Fehlversuchen: So habe ich meine Seafile-Installation von einem Ubuntu 14.04.x auf 16.04.x migriert bekommen. Die alte Version war mal mit Seafile 3.x gestartet und immer wieder bis 6.1.1 geupdatet worden. Ich wollte diese aber schon lange von Ubuntu 14.04.x auf 16.04.x umziehen. Dank eines Umzug auf einen neuen Server hatte ich nun auch den Platz dazu (alte und neue VM parallel).
- Die Seafile-Installation auf dem alten Server ggf. updaten so das diese mit der geplanten Version auf dem neuen Server übereinstimmt
- Sollte die alte Installation noch mit FastCGI laufen - Updatet nur bis zu Version 6.1.2, noch nicht auf 6.2.2. Dementsprechend installiert auf dem neuen Server auch erst einmal 6.1.2. Solltet Ihr schon auf 6.2.2 oder höher sein ist es egal
- Vorbereitung des neuen Servers wie zuvor beschrieben - einschließlich dem Punkt "Seafile Setup ausführen" - danach(!) folgendes machen:
- Die 3 MySQL Datenbanken auf dem alten Server exportieren:
mysqldump -useafile -pseafile ccnet-db | gzip > /tmp/ccnet-db.sql.gz mysqldump -useafile -pseafile seafile-db | gzip > /tmp/seafile-db.sql.gz mysqldump -useafile -pseafile seahub-db | gzip > /tmp/seahub-db.sql.gz
- auf den neuen Server kopieren mit scp
- auf dem neuen Server in die vorhandenen Datenbanken importieren:
zcat /tmp/ccnet-db.sql.gz | mysql -useafile -pseafile ccnet-db zcat /tmp/seafile-db.sql.gz | mysql -useafile -pseafile seafile-db zcat /tmp/seahub-db.sql.gz | mysql -useafile -pseafile seahub-db
- Die folgenden Ordner auf den neuen Server in den gleichen Pfad kopieren
/home/seafile/haiwen/seafile-data /home/seafile/haiwen/seahub-data
Das hab ich mit rsync
gemacht weil es bei mir fast 300GB sind und ich so bei einem Abbruch das Kopieren fortsetzen konnte:
rsync -raz -e ssh --update --progress -h /home/seafile/haiwen/seafile-data 192.168.45.21:/home/seafile/haiwen/ rsync -raz -e ssh --update --progress -h /home/seafile/haiwen/seahub-data 192.168.45.21:/home/seafile/haiwen/
Der dicke Fisch ist der seafile-data
Ordner, das kann schon mal ein paar Stunden dauern je nach Größe.
- Den Besitzer der Dateien wieder anpassen:
chown -R seafile:seafile /home/seafile/haiwen/*
- Den Rest dann weiter wie beschrieben. Also erst einmal manuell starten und schauen ob es auf Port 8000 läuft, dann Umbau auf Port 80 und dann zusätzlich Port 443.