Selfhosting komplett überarbeitet

In den letzten Monaten überarbeitete ich mein Buch Selfhosting: Server aufsetzen und betreiben. Wie der Name es andeutet, handelt das Buch vom Betrieb eines eigenen Servers. Im Grunde geht es darum einen Server und seine Dienste aufzusetzen und zu betreiben. Als Betriebssystem wird Ubuntu 18.04 LTS genutzt. Die erste Version erschien im Juli 2015, was mittlerweile knapp vier Jahre her ist. Unter anderem deswegen wurde das Buch komplett überarbeitet.

Der Umfang des Buches hat um 65 Prozent, gegenüber der ersten Version zugenommen. Neben der kompletten Umstellung auf Ubuntu 18.04 LTS wurden viele weitere Themen in das Buch aufgenommen, so wird nun detailliert auf die Erzeugung von Zertifikaten mittels Let’s Encrypt eingegangen, es wird die Aktualisierung des Servers oder die Nutzung von MariaDB genauer beleuchtet und es wurde auf viele weitere Themen genauer und umfangreicher eingegangen.

Die neue Version von Selfhosting ist nun verfügbar

Nach einer kurzen Einleitung behandelt das Buch die Beschaffung eines Servers, die anschließende Installation und Grundeinrichtung. Dazwischen werden benötigte Linux-Grundlagen vermittelt. Nach der Grundeinrichtung werden speziellere Setups, wie Virtualisierung mittels KVM und verschlüsselte Server, beschrieben. Anschließend geht es an die Einrichtung unterschiedlichster Servertypen, wie Mail-, Game- oder Webserver. Neben diesen werden weitere Dienste wie Git und XMPP besprochen. In den weiteren Abschnitten des Buches wird auf Themen wie das Backup von Servern, der Sicherheit, Wartung und Verwaltung derselben eingegangen.

Erhältlich ist das Buch unter anderem bei Amazon, Beam, Google Play, eBook.de und iTunes. Bei den meisten Anbietern, wird das Buch, wenn es bereits gekauft wurde, automatisch aktualisiert. Weitere Informationen über das Buch befinden sich auf der entsprechenden Seite.

Maximale Größe von Mails unter Postfix konfigurieren

Standardmäßig ist die maximale Größe von Mails beim MTA Postfix auf 10240000 Byte, knapp 10 MiB, beschränkt. Soll diese Einstellung bearbeitet werden, so muss die entsprechende Konfigurationsdatei von Postfix bearbeitet werden:

nano /etc/postfix/main.cf

In der Datei muss die Option message_size_limit hinzugefügt werden:

message_size_limit = 40960000

In diesem Fall wurde die maximale Größe von Mails auf knapp 40 MiB gesetzt. Nach einem Neustart von Postfix:

service postfix restart

ist die neue Obergrenze gesetzt und Mails können bis zur entsprechenden Größe versendet werden.

Zeit unter Linux manuell synchronisieren

Unter Umständen kann es passieren, dass ein Linux-System mit der falschen Uhrzeit läuft. Soll ein solches System manuell die aktuelle Uhrzeit gebracht werden, so kann hierfür der Befehl ntpdate genutzt werden. Dazu muss im ersten Schritt das passende Paket installiert werden:

apt install ntpdate

Anschließend kann der Befehl genutzt werden. Er muss hierbei mit einem NTP-Server aufgerufen werden:

ntpdate pool.ntp.org

Damit wurde die Zeit anhand des NTP-Servers neu gesetzt. Wichtig ist es das der Befehl mit administrativen Rechten ausgeführt wird.

Reverse Proxy für Gitea konfigurieren

Ein Reverse Proxy liefert eine Ressource, welche er von einem oder mehreren Servern holt, an einen Client aus. Bei Gitea kann es durchaus sinnvoll sein, dieses hinter einem Reverse Proxy zu betreiben. Standardmäßig läuft der Dienst auf dem Port 3000. Möchte der Nutzer ihn über die normalen Ports für HTTP (80) bzw. HTTPS (443) erreichbar machen, könnte das Ganze durchaus über die Konfiguration von Gitea in Verbindung mit der systemd-Unit geschehen.

Allerdings ist ein weiterer Vorteil bei einem Reverse Proxy, das die angefragte Infrastruktur aus der Sicht der Clients versteckt wird. Mittels Nginx kann es solcher Reverse Proxy realisiert werden. Dazu muss die Nginx-Konfiguration für die Domain angepasst werden:

nano /etc/nginx/sites-available/example

In diesem Fall befasst sich die Konfiguration mit der verschlüsselten Kommunikation per HTTPS und der Weiterleitung von unverschlüsselten Verbindung in Richtung der verschlüsselten Verbindung.

server {
  listen 80;
  listen [::]:80;

  server_name example.org;

  return 301 https://$host$request_uri$is_args$args;
}

server {
  listen 443;
  listen [::]:443 default_server;

  ssl on;
  ssl_certificate        /etc/letsencrypt/live/example.org/fullchain.pem;
  ssl_certificate_key    /etc/letsencrypt/live/example.org/privkey.pem;

    server_name org;

    location / {
        proxy_pass http://localhost:3000;
    }
}

Anhand der Konfiguration wird ersichtlich das Gitea auf dem Server unverschlüsselt betrieben werden kann, da die eigentliche Verschlüsselung über HTTPS vom Reverse Proxy, in diesem Fall Nginx, übernommen wird. Nachdem die Konfiguration gespeichert wurde, muss Nginx neugestartet werden:

service nginx restart

Anschließend muss die Gitea-Konfiguration nochmals angepasst werden:

nano /home/git/gitea/custom/conf/app.ini

Dort muss die ROOT_URL nun so definiert werden, wie der Client sie nun sieht. Die ROOT_URL kann von:

ROOT_URL         = https://example.org:3000/

zu:

ROOT_URL         = http://example.org/

geändert werden. Die Werte PROTOCOL, CERT_FILE und KEY_FILE können entfernt werden, da die Verschlüsslung nun von Nginx übernommen wird. Nach der Änderung der Konfiguration muss Gitea ebenfalls neugestartet werden:

service gitea restart

Nachdem die Konfiguration durch geführt wurde, ist Gitea unter zwei URLs erreichbar:

http://example.org:3000/
https://example.org/

Intern läuft Gitea auf dem Port 3000. Damit dieser nicht von außen erreichbar ist, sollte eine entsprechende Firewall-Regel konfiguriert werden.

HTTPS für Gitea aktivieren

Nach der Installation von Gitea läuft dieses standardmäßig über unverschlüsseltes HTTP. Um dies zu ändern muss die app.ini welche sich im Verzeichnis /home/git/gitea/custom/conf/ befindet bearbeitet werden:

nano /home/git/gitea/custom/conf/app.ini

In der Sektion server welche für gewöhnlich wie folgt aussieht:

[server]
SSH_DOMAIN       = localhost
DOMAIN           = localhost
HTTP_PORT        = 3000
ROOT_URL         = http://example.org:3000/
DISABLE_SSH      = false
SSH_PORT         = 22
LFS_START_SERVER = true
LFS_CONTENT_PATH = /home/git/gitea/data/lfs
LFS_JWT_SECRET   = plgd0f1J4RlmWFnk9K4oHeV6Wey_vI55x7uC81Rp5Mc
OFFLINE_MODE     = false

müssen einige Änderungen vorgenommen werden. Die Schlüssel PROTOCOL, CERT_FILE und KEY_FILE müssen hinzugefügt und die ROOT_URL angepasst werden. Danach sollte die server-Sektion in etwa so aussehen:

[server]
SSH_DOMAIN       = localhost
DOMAIN           = localhost
HTTP_PORT        = 3000
PROTOCOL         = https
CERT_FILE        = custom/https/cert.pem
KEY_FILE         = custom/https/key.pem
ROOT_URL         = https://example.org:3000/
DISABLE_SSH      = false
SSH_PORT         = 22
LFS_START_SERVER = true
LFS_CONTENT_PATH = /home/git/gitea/data/lfs
LFS_JWT_SECRET   = plgd0f1J4RlmWFnk9K4oHeV6Wey_vI55x7uC81Rp5Mc
OFFLINE_MODE     = false

Nachdem die Konfiguration gespeichert wurde muss das passende Zertifikat erzeugt werden:

cd /home/git/gitea/custom/
mkdir https
cd https
./gitea cert -ca=true -duration=8760h0m0s -host=example.org

Alternativ und in den meisten Fall sinnvoller ist es allerdings an dieser Stelle Zertifikate von Let’s Encrypt einzubinden. Dazu müssen die Zertifikate für die Domain im ersten Schritt erzeugt werden:

letsencrypt certonly

Anschließend muss die app.ini angepasst werden:

nano /home/git/gitea/custom/conf/app.ini

Dort werden die Werte für CERT_FILE und KEY_FILE so konfiguriert das sie auf die Let’s Encrypt-Zertifikate zeigen:

CERT_FILE    = /etc/letsencrypt/live/example.org/fullchain.pem
KEY_FILE     = /etc/letsencrypt/live/example.org/privkey.pem

Damit ist Gitea nach einem Neustart des Service per HTTPS und damit verschlüsselt erreichbar.