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.

Dienste unter Windows auf der Kommandozeile steuern

In einem Windows-System sind eine Reihe von Diensten aktiv. Die können über die entsprechende Diensteverwaltung gestartet oder gestoppt werden. Das Steuern der Dienste ist allerdings auch auf der Kommandozeile möglich. Genutzt wird hierzu das Kommando sc. Mit der Option start wird ein Dienst gestartet:

sc start OneSyncSvc_1c4e1f

Soll der Dienst gestoppt werden so muss die Option stop genutzt werden:

sc stop OneSyncSvc_1c4e1f

Eine Liste aller Dienste erhält der Nutzer mithilfe des Befehls:

sc query

Mit dem Kommando sc können daneben weitere Dinge erledigt werden. So ist es z.B. mögliche Dienste mithilfe des Kommandos zu erstellen.

Services unter systemd einrichten

Das Init-System systemd ist mittlerweile in vielen Linux-Distributionen angekommen. Auch unter Ubuntu ist es seit Version 15.04 integriert. Ein Vorteil des neuen Systems ist, das Services, im Gegensatz zum alten Init-System, relativ unkompliziert erstellt werden können. Dazu muss eine sogenannte Unit erstellt werden. Bei einer Unit handelt es sich um eine Textdatei mit einer entsprechenden Konfiguration. Neben den Units für die Konfiguration eines Services existieren weitere Unit-Typen wie z.B. die Typen mit der Endung .path oder .network. In diesem Artikel soll es allerdings nur um die Units vom Typ Service gehen.

Die Units liegen in unterschiedlichen Orten im Dateisystem. Die vom System vorinstallierten Units sind im Ordner /lib/systemd/system/ zu finden. Eigene Services werden im Ordner /etc/systemd/system/ hinterlegt. Hier können allerdings nur Nutzer mit administrativen Rechten entsprechende Service hinterlegen. Soll ein nicht privilegierter Nutzer eine Unit angelegen, so muss er diese im Verzeichnis ~/.config/systemd/user/ hinterlegen. In den meisten Fällen werden Units für Services im Dateisystem unter dem Pfad /etc/systemd/system/ angelegt. In diesem Ordner soll nun eine Datei für die Unit angelegt werden:

nano languagetool.service

Beispielhaft könnte eine solche Unit wie folgt aussehen:

[Unit]
Description=LanguageTool
After=syslog.target
After=network.target

[Service]
Type=simple
User=languagetool
Group=languagetool
WorkingDirectory=/home/languagetool/server
ExecStart=/usr/bin/java -cp /home/languagetool/server/languagetool-server.jar org.languagetool.server.HTTPServer --config languagetool.cfg --port 3001 --allow-origin "*"
Restart=always
Environment=USER=git HOME=/home/languagetool

[Install]
WantedBy=multi-user.target

Die Unit unterteilt sich in unterschiedliche Bereiche, in diesem Beispiel sind dies Unit, Service und Install. Der Bereich Service ist hierbei nur in Units vom Typ Service zu finden. Im Bereich Unit sind eine kurze Beschreibung des Services und die Abhängigkeiten der Unit hinterlegt. Dabei wird definiert, welche Systeme bereits gestartet sein müssen, bevor der Service gestartet wird. Ein Target entspricht dabei einer Gruppe von Diensten, meist mit einer bestimmten Bedeutung, wie z.B. das Target für die Herstellung der Netzwerkkonnektivität (network-online.target).

In der Service-Gruppe wird der Typ des Services und der Nutzer und die Gruppe definiert, mit welchem bzw. welcher er starten soll. Daneben wird das Arbeitsverzeichnis und die Kommandozeile zur Ausführung des Services definiert. Weiterhin kann das Verhalten des Service, über den Parameter Restart, weiter definiert werden. So kann angegeben werden, dass der Service nach seiner Beendigung wieder neugestartet wird.

In der Install-Sektion wird angeben, wann der Service gestartet werden soll. Das multi-user.target entspricht dem klassischen Start eines normalen Linux-Systems. Ist die Unit definiert, kann sie aktiviert und der Service gestartet werden:

systemctl enable languagetool
systemctl start languagetool

Die Option enable sorgt dafür das die entsprechende Unit aktiviert wird. Dies führt dazu das sie je nach Konfiguration z.B. automatisch beim Systemstart oder bei dem Anschluss bestimmter Hardware gestartet wird. Unter bestimmten Systemen wie Ubuntu, kann der Service auch über das service-Kommando gestartet werden:

service languagetool start

Neben den Optionen enable und start für systemctl, existieren weitere Optionen zur Steuerung der Units. Dies sind unter anderem stop, zum Stoppen des Services und disable zur Deaktivierung der Unit. Mit der Option status, kann der Status eines Service erfragt werden:

systemctl status languagetool

Anschließend erhält der Nutzer den aktuellen Status des Service. Eine weitere wichtige Option ist restart um einen Service manuell neuzustarten. Mithilfe der systemd-Units lassen sich somit schnell Services in ein Linux-System einbinden.

Wie alt siehst du aus?

Microsoft benötigte eine Demo für eine Keynote auf der Build2015-Konferenz. Herausgekommen ist die Webseite How Old Do I Look? welche einige Azure Services und APIs nutzt. Diese Webapplikation ermittelt aus einem Bild das Geschlecht und das Alter der dargestellten Personen. Die Erkennung des Alters ist dabei allerdings meist mit kleineren Fehlern behaftet.

Die Demo-Applikation anhand eines Beispiels

Die Demo-Applikation anhand eines Beispiels

Bei Microsoft hoffte man auf ein paar hundert Benutzer um die Echtzeit-Statistik zu testen. Im Endeffekt hat man sich um einige Größenordnungen verschätzt. Bereitgestellt hat Microsoft die Demo-Applikation unter how-old.net – dazu passend gibt es noch einen Blog mit Hintergründen.