In diesem Artikel soll es darum gehen ein kleines Netzwerk aus Containern für den Webhook Service zu erstellen. Am Ende möchte ich zumindest einen kleinen Web Server auf Fastify Basis zum Testen fertig haben.
Im letzten Artikel habe ich einen groben Fahrplan gegeben was hier wie entstehen soll und wie es funktionieren soll. In diesem hier soll es darum gehen ein kleines Netzwerk aus Container zu erstellen. Am Ende möchte ich zumindest einen kleinen Web Server auf Fastify Basis zum Testen fertig haben.
Ein Basis Image
Wir werden aus dem Node:current Image ein Basis Image bauen woraus dann das eigentliche Image entstehen soll. Das hat sich beim Testen als vorteilhaft herausgestellt, da das Installieren der nötigen Compiler Werkzeuge und Node Module sich als zeitraubend erwiesen hat.
Nach dem update der installierten Linux Pakete installieren wir neben den Build Werkzeugen, Entwicklerbibliotheken für alle üblichen Bildformate. Das brauchen wir damit Sharp kompiliert werden kann. Nginx installieren wir um es als Reverse Proxy nutzen zu können. So ist bei bedarf auch ein Gatsby Development Server zu erreichen.
Sharp ist ein hoch performantes natives Modul für Node.js zum manipulieren von Bilddateien, die wir von Instagram runterladen. Außerdem wird Sharp auch von Gatsby für die im gatsby-plugin-image integrierte Bildoptimierung benötigt.
Danach installieren wir mit Yarnglobal gatsby-cli, sharp und pm2.
Die nächsten Befehle sind zum Erstellen der Source Verzeichnisse, das initiale Kopieren des Quellcodes für Gatsby und den Webhook Service und das anschließende Setzen der Zugriffsrechte. Alles nur um die Node.js Abhängigkeiten hier installieren zu können und das nicht bei jedem Recreate neu durchlaufen zulassen.
Danach kann das Image mit dem folgenden Befehl erstellt werden:
Das zweite Image wird durch die Nutzung Ersteres nun deutlich schneller erzeugt.
Es werden lediglich die Konfiguration für nginx, ein Shell Script für den Start und eins zum Kopieren des Gatsby ./public Verzeichnisses hinzugefügt. Danach werden die Dateirechte der beiden Shell Scripts um das Ausführen erweitert. Als letztes wird der Port 80 der Docker Engine zugänglich gemacht und angewiesen das run.sh Script beim Start auszuführen.
Eine Komposition für Docker
Das Container Netzwerk wird vorerst lediglich aus zwei Container bestehen. Zum einem wird aus der vorab erstellten Dockerfile.dev unser persönlicher Container erzeugt und zum Anderen laden wir das Image für Redis und lassen docker-compose auch ein Container Netzwerk zur internen Kommunikation zwischen den Containern erstellen.
Die in dem Container laufende nginx Instanz ist dann auf dem lokalen Loopback über den Port 10001 zu erreichen. Redis steht hingegen nur für das interne Netzwerk zur Verfügung. Die im Container liegenden Verzeichnisse /var/www, /usr/lib/api und /usr/lib/gatsby werden zu den auf dem Host liegenden Verzeichnisse ./www, ./src/api und ./src/gatsby gemapped.
Nun kann man das ganze mit folgenden Befehl starten:
sudo docker-compose --name anne up -d
Falls es nötig sein sollte eine Shell im Container zu starten um darin selbst rum zuwerkeln, dann kann man das mittels
sudo docker exec -it anne-gatsby /bin/bash
bewerkstelligen.
Fastify nur zum Testen
Damit wir auch was zum Testen haben fangen wir mit einem kleinen Programmabschnitt an, welcher Fastify instanziiert und in den "Lauschmodus" versetzt.