Heute ist der 31.12.2020 und ich habe mich entschlossen, in 2021 einen Technologie-Blog zu starten.
Mein Name ist Thorsten Marsen und ich bin CEO eines kleinen Software- und Beratungshauses im schönen Hamburg. Wir entwickeln komplexe Unternehmensanwendungen für unsere Kunden, zumeist in Java-Technologie.
Im Rahmen unserer Tätigkeit kommen wir ständig mit neuen Technologien in Berührung: Über Virtualisierungslösungen wie WMware und Citrix XenServer, über Containerisierung mit Docker und Kubernetes, dem Aufbau von CI/CD Pipelines im Entwicklungsprozess mit BitBucket, GitLab, Jenkins, Artifactory und Nexus, den diversen Frameworks in der Entwicklung für Frontend- und Backend-Lösungen, bei Microservices unter Verwendung von Middleware-Technologien wie ActiveMQ, RabbitMQ oder Kafka und Datenbanken wie Mysql, Postgres oder auch Redis, bis hin zum operativen Betrieb dieser Anwendungen unter Einsatz von ELK, Prometheus und Grafana. Fast täglich kommen neue Technologien hinzu, die wir einsetzen oder für unsere Kunden evaluieren. Bisher habe wir alles in unsere internes Wiki dokumentiert. Für 2021 haben wir uns vorgenommen, Erfahrungen in diesem Blog zu teile und gerne auch mit anderen zu diskutieren. Los geht’s!
Technologieauswahl
Für den Blog kamen verschiedene Plattformen in Betracht. Derzeit benutzen wir für unser internes Wiki und auch für den Internetauftritt unter www.tdm-consult.com das Produkt Atlassian Confluence, das auch ein kleines Blog-Modul beinhaltet. Wenngleich wir mit dem Produkt als Wiki sehr zufrieden sind, möchten wir für diesen Blog eine neue Technologie ausprobieren. Dabei lag der Focus auf Open Source Projekten. Folgende Kandidaten kamen in die engere Auswahl:
- WordPress.org
- Drupal
- Ghost
- Joomla
Im Internet gibt es diverse Artikel, die sich mit der Bewertung und Gegenüberstellung der Lösungen befassen – das wollen wir hier nicht machen. Stattdessen ist es unser Ziel, alle Lösungen einmal installiert und ausprobiert zu haben. Den Anfang soll WordPress machen. Alle Installationen sollen In-House betrieben werden.
Betrieb als Container
Seit geraumer Zeit betreiben wir alle unsere Installationen als Docker-Container entweder in einem Kubernetes Cluster oder einfach über docker-compose auf einer dedizierten VM. Als Virtualisierungslösung kommt bei uns Citrx XenServer zum Einsatz. Wenn möglich nehmen wir offizielle Images aus Docker Hub. Sofern notwendig führen wir ein Customizing durch, indem wir eigene Images über Dockerfiles erzeugen und in eine interne Docker Registry speichern: Hierfür nehmen wir JFrog. Alle Artefakte (Dockerfile, docker-compose.yml, etc. ) werden über ein Git Repository verwaltet. Bewegungsdaten werden auf Volumes gehalten und täglich gesichert.
en und ausprobieren und anfangen wollen wir mit WordPress. Wir werden die Lösung in-haus betreiben, und zwar zunächst als Docker-Container, später ziehen wir möglicherweise in ein Kubernetes-Cluster um. Das aber erst, nachdem wir uns für eines der o.g. Lösungen entschieden haben. Bis dahin genügt der Betrieb über eine simple docker-compose Lösung.
WordPress mit Docker
Um ein erstes Ergebnis zu erzielen erzeugen wir eine neue VM über XenCenter, die wir mit einer CPU und 2G RAM bestücken. Als Basisimage kommt bei uns aktuelle die Ubuntu Distribution in Version 18.04 zum Einsatz. Unser vordefiniertes Template, aus dem wir Clonen, bringt uns Docker, Git und einen SSH-Zugang über Zertifikate mit, so dass wir unmittelbar beginnen können. Unser lokales Netz ist das 192.168.1.0/24. Wir tragen in unseren DHCP die MAC Adresse der neuen VM ein und weisen dort die IP 192.168.1.24 zu. Nach einem Restart der VM können wir uns mit SSH auf die Maschine einloggen und können beginnen.
Unter Ubuntu haben wir leider noch nicht herausgefunden, wir der vom DHCP gelieferte Hostname (option host-name) automatisch übernommen werden kann, vermutlich geht das in der Version von Netplan nicht, die mit Ubuntu 18.04 kommt. Daher müssen wir in /etc/cloud/cload.cfg den Wert von
preserve_hostnameauftruestellen und dann den Hostnamen manuell festlegen:sudo hostnamectl set-hostname wordpress.
Jetzt erzeugen wir ein neues Verzeichnis mkdir -p docker/docker_wordpress && cd docker/docker_wordpress und legen dort ein neues File docker-compose.yml an. Interessanterweise bezieht sich die Dokumentation von docker-compose auf genau diesen Anwendungsfall, so dass wir den ersten Wurf von dort übernehmen können: https://docs.docker.com/compose/wordpress. Weil wir auf einer eigenen VM laufen, muss bei uns der Port nicht gemappt werden, so dass wir den Port 80:80 direkt durchleiten. Das sieht dann etwa so aus:
version: '2'
services:
db:
image: mysql:5.5.47
volumes:
- db_data:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: xxx
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: yyy
wordpress:
depends_on:
- db
ports:
- "80:80"
restart: always
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: yyy
WORDPRESS_DB_NAME: wordpress
volumes:
db_data: {}
Nach docker-compose up startet die Mysql Datenbank und der Apache Webserver mit WordPress hoch und der Blog ist unter http://192.168.1.24 erreichbar und die initiale Konfiguration kann durchgeführt werden.
Im Teil 2 des Tutorials werden wir den Blog öffentlich zugängig zu machen und dabei gleich die SSL Terminierung über unseren NGINX Reverse Proxy mit einem Zertifikat von Let’s Encrypt konfigurieren.
Schreibe einen Kommentar