Python-Skripte als systemd-user-service

11. Mar 2019

Development | Ops

Wer kennt das nicht, da hat man ein Python-Skript geschrieben, zum Beispiel einen kleinen Webserver in Flask, oder irgendein Test-Protokoll-Server mit Twisted. Diesen will man nun schnell auf einem Server oder Raspberry Pi starten, und ist durch unseren Post Systemctl Services unter Ubuntu auf den systemd-Geschmack gekommen. Das Python-Skript Folgendes schreibt man an den Anfang seines Python-Skripts. Wir nennen es hier jetzt mal main.py. #!/bin/sh -e "exec" "`dirname $0`/.env/bin/python" "$0" "$@" def start_server(): # .

#Ubuntu #Service #systemctl #Python #systemd #user #venv #virtualenv

Dependency Injection mit Kotlin und Spring

5. Dec 2018

Knowledge Base | Development

Das Spring Framework ermöglicht drei Arten von Dependency Injection: Field Injection Setter Injection Constructor Injection Als Guter Entwickler™ verwendet ihr natürlich Constructor Injection und keine Field Injection. Doch manchmal gibt es Situationen, in denen das nicht passt. In dem Fall steht mit Setter Injection eine gute Alternative zur Verfügung - dafür ein Beispiel mit Kotlin zu finden ist aber gar nicht so einfach. Field Injection Field Injection ist erstmal sehr einfach und wird deswegen - leider - häufig in der Lehre verwendet.

#Dependency-Injection #Kotlin #Spring #Setter

Kong - Das Api-Gateway

4. Dec 2018

Development | Architecture

Kong ist ein auf Nginx basierendes Api Gateway. Das besondere an Kong ist, neben der sehr schnellen Verarbeitungszeiten, dass man über Plugins problemlos und sehr einfach weitere Funktionalität hinzufügen kann. Zum Beispiel Open ID Connect oder Rate Limits per Request. Kong startet auf zwei unterschiedlichen Ports. Port 8001 ist für die Admin API reserviert und Port 8000 ist der Endpunkt für konsumierende Dienste und Clients. Service und Routen einrichten Nachdem wir Kong installiert und gestartet haben wollen wir eine einfache Route zu unserem User Microservice über die Admin API erstellen.

#Api-Gateway #Kong #Routing #Reverse Proxy #Proxy

Systemctl Services unter Ubuntu

4. Dec 2018

Development | Ops

Um ein Executeable als Service einzurichten, musst du unter /etc/systemd/system/ eine neue Datei erzeugen. Sinnvollerweise nennst du sie nach deinem Executable. Wollen wir zum Beispiel einen Nginx Webserver als Service einrichten, wäre der Name nginx.service. [Unit] Description=Nginx Webserver [Service] Type=simple ExecStart=/usr/bin/nginx [Install] WantedBy=multi-user.target Jetzt musst du deinen neuen Service nur noch aktivieren. sudo systemctl enable nginx.service Anschließend kannst du ihn starten. sudo systemctl start nginx.service

#Ubuntu #Service #Systemctl

Monads in Typescript

3. Dec 2018

Development | Best Practice

Beim Zugriff auf Objekte und Variablen gibt es immer wieder kleine Pitfalls. Manchmal ist das Objekt leer, wir lesen aber eine Property daraus und bekommen dann natürlich cannot read property 'x' of undefined. Einige dieser Pitfalls sind: Der Wert könnte oder könnte nicht existieren Der Wert könnte existieren, aber es gibt mehr als einen Um den Wert zu bekommen sind I/O Operationen notwendig Der Wert könnte eventuell in der Zukunft existieren Der Wert könnte einen Fehler produzieren Der Wert hängt von einem State ausserhalb ab … Ein Monad verhält sich wie ein Container der dieses Verhalten abstrahiert und uns die Möglichkeit gibt uns mehr auf das zu fokussieren was wir wirklich tun wollen: Mit den Werten arbeiten.

#Typescript #Monads #tsmonad #Either #Maybe