De stand van zaken

Zoals ik in mijn vorige post al vertelde ben ik aan de slag gegaan met het migreren van mijn webserver annex reverse proxy server.

Reverse proxy

Voor wie niet weet wat een reverse proxy is, en dat is geen schande.
Een reverse proxy wordt gebruikt om een interne webserver, die niet rechtstreeks via het internet te benaderen is, op internet te publiceren.
Ook biedt het de mogelijkheid om meerdere websites via 1 publiek IP adres beschikbaar te maken op het internet. Op basis van de URL (hostnaam) wordt het verzoek doorgestuurd naar de juiste (web)server op het interne netwerk.

Toen ik deze webserver destijds ging opzetten leek het mij een goed idee om alle web gerelateerde zaken, zoals WordPress sites en reverse proxy, te combineren op 1 server.
Eigenlijk best simpel, 1 MySQL server waarop alle WordPress databases draaien, 1 HTTP server, met voor iedere website een aparte directory, en alle overige websites via de reverse proxy via diezelfde Apache HTTP server.
Omdat een aantal websites al bestond, was het vooral een kwestie van copy-paste om de configuratie over te zetten.

Ik had beter moeten weten.

Tijdens de installatie destijds ging het eigenlijk al fout. Ik was gewend om al mijn servers te draaien op CentOS, een variant van RedHat Linux die gratis te gebruiken is. En CentOs is inmiddels ook overgenomen door RedHat, maar dat terzijde. De versie die ik op dat moment geïnstalleerd heb was eigenlijk al verouderd. Op zich niet zo’n heel groot probleem, maar updates installeren was bijvoorbeeld al vrij snel niet meer mogelijk, en ook het installeren van de Zabbix Agent, nodig voor de monitoring van de server, lukte niet.
Als ik verstandig was geweest, dan had ik op dat moment al een plan B bedacht.

Maar ik was niet verstandig.

Ik ben doorgegaan op de ingeslagen weg met het idee: ik fix het later wel.
En dat fixen is nu, enkele jaren later.

Ik had simpelweg een nieuwe server kunnen installeren en 1 op 1 alles over kunnen zetten. Maar het leek me ook een goed moment om nog eens kritisch neer het “design” te kijken. Ik had al ervaren dat alles op 1 server best een nadeel is. Zodra de configuratie aangepast werd, en er was daarvoor een herstart nodig, dan raakte dat direct alle web sites. Niet alleen de web site die op de server draaien, maar ook alle web sites die achter de reverse proxy zitten.

Nieuw design

Er moest dus een nieuw ontwerp komen voor de architectuur van de omgeving.
Als het om architectuur gaat, is er vaak niet een beste oplossing. Meestal zijn er meerdere opties met ieder hun voor- en nadelen.
Zo ook in mijn geval. Een enkele server “die alles doet” is afgevallen.

Dan blijven de volgende opties over:

  • Aparte reverse proxy server, aparte webserver, aparte MySQL server.
  • Aparte reverse proxy server, webserver per website, aparte MySQL server.
  • Aparte reverse proxy server, aparte webserver inclusief MySQL server.

Ik heb de verschillende opties de revue laten passeren. Dat de reverse proxy server volledig los moet komen te staan van de web sites was voor mij al duidelijk. Mede omdat een aantal sites al op verschillende servers draaien.
Dan blijft over de keuze voor een centrale webserver en een centrale MySQL server.
Nu geldt natuurlijk, hoe minder servers, des te minder beheer er uitgevoerd hoeft te worden. Maar aan de andere kant, een centrale server betekent ook dat sommige configuratie instellingen voor de hele server gelden, en dus ook invloed kunnen hebben op andere web sites. En wanneer er een herstart nodig is, dat dit meerdere web sites raakt. Datzelfde geldt ook voor een centrale MySQL server.

De uiteindelijke keuze is geworden om voor iedere WordPress site een eigen Linux container te gebruiken. Als reverse proxy wordt niet meer een Apache HTTP server ingezet, maar dit is HAProxy geworden.
HAProxy is een open-source reverse proxy server en load-balancer. Daarnaast biedt het ook de mogelijkheid om automatisch SSL certificaten aan te vragen bij providers zoals Let’s Encrypt. Deze wordt nu ook dubbel uitgevoerd in een cluster setup. Dit betekent dat 1 van de HAproxy servers herstart kan worden zonder dat dit gevolgen heeft voor de web sites. De andere node neemt dan het werk over.

In eerste instantie zijn alle web sites gemigreerd naar een eigen Linux containers en zijn de overige entries uit de reverse proxy over gezet naar HAProxy en zijn alle ssl certificaten omgezet naar Let’s Encrypt. Mijn huidige wildcard certificaat verloopt in december en ik wil het liever niet meer vernieuwen. Niet alleen vanwege de kosten, maar ook omdat de geldigheid teruggebracht is naar 200 dagen en in de toekomst nog verder teruggebracht wordt.

Standaard gebruikt HAProxy een configuratiebestand waar handmatig alles aan toegevoegd moet worden. Toen ik hier mee bezig was kwam ik er achter dat er een additioneel product is, HAProxy-manager, dat een web based interface biedt om alles binnen HAProxy aan te maken en te configureren.

Nadat alles handmatig geconfigureerd was in de tekst based configuratie file, is alles direct gemigreerd naar HAProxy cluster manager.
HAProxy cluster manager heeft bovendien het voordeel dat het een aantal zaken standaard aan boord heeft, die ik eerder zelf allemaal moest regelen via custom scripts, zoals het aanvragen van de certificaten bij Let’s Encrypt en deze vervolgens distribueren naar de andere node. HAProxy cluster manager doet dit automatisch.

Behalve de migratie van de webserver, annex reverse proxy server, is er gelijk nog een aantal andere zaken opgepakt, waaronder het opzetten van een nieuwe Zabbix server voor het monitoren van alle omgevingen. Ik zal daar later nog een aparte post aan weiden omdat daar ook wat maatwerk en aanpassingen in zit.

Migratie web sites

Voor de web site heb ik gekozen voor LAMP containers. LAMP staat voor Linux, Apache MySQL en PHP. Alle producten die je nodig hebt om een WordPress web site op te kunnen zetten. Of in mijn geval, te migreren.

Turnkey biedt een kant-en-klare Linux container hiervoor aan in Proxmox. Echter is deze gebaseerd op Debian 12. Inmiddels is Debian 13 beschikbaar. Het leek mij niet verstandig om te starten met een verouderde versie van het OS. Dat was nu net de situatie waar ik vandaan kwam. Ik heb op basis van deze template een container aangemaakt, deze ge-upgrade naar de laatste versie van Debian, en vervolgens een eigen template gemaakt die ik gebruikt heb om alle containers op te zetten.
Overigens had ik er achteraf spijt van dat ik niet direct de Zabbix Agent in de template meegenomen heb. Deze moest ik achteraf alsnog overal installeren.

Volgende stappen

Het opzetten van nieuwe containers, het migreren van bestaande web sites naar nieuwe containers is een ding. Maar alles up-to-date houden is een ander ding. Oftewel het beheer en onderhoud wan de servers en containers. Zeker in de huidige tijd is het van belang om servers regelmatig te updaten en te voorzien van de laatste software updates, (security)patches en fixes. Nu zijn mijn web sites geen high profile web sites, maar voor sommige kwaadwilligen maakt dat niet uit, die hacken alles wat ze tegenkomen.

Nu kan ik er natuurlijk iedere week een avond voor uittrekken om alles langs te gaan en te voorzien van de laatste updates, en indien nodig, te herstarten. Maar nog handiger is het als dit automatisch gebeurd. Maar dan wel gecontroleerd.
Op de meeste servers en containers heb ik Webmin geïnstalleerd. Webmin is een web-based tool om Linux servers te beheren. Ook kan Webmin automatisch updates installeren. Maar dat gebeurd dan op volkomen willekeurige momenten. En dat is eigenlijk iets dat je niet wil. Vandaar dat ik gekozen heb voor een andere oplossing: Ansible.

Ansible is een product van RedHat da gebruiktwordt voor het centraal beheren van servers. Ongeacht of dit nu Windows of Linus servers zijn. Ansible kan gebruikt worden voor het installeren en updaten van software packages, maar ook voor het aanpassen van e configuratie van software of het OS.

Met Ansible is het relatief eenvoudig om in een keer meerdere servers te updaten, of nieuwe software uit te rollen op groepen van servers of individuele servers. Het vergt wat werk om het allemaal op te zetten, maar eenmaal opgezet pluk je er de vruchten van.

Daarnaast wil ik gebruik maken van een Gitlab server waar de scripts en Ansible playbooks opgeslagen worden, zodat ik versie beheer kan doen op de bestanden.
De Ansible en Gitlab server zijn inmiddels geïnstalleerd, en de eerste stappen zijn gezet voor het opzetten van de benodigde componenten.

To Do

Er is nog een lijstje met een aantal zaken die ik in de toekomst op wil pakken. Er is niet echt een harde deadline wanneer een en ander klaar moet zijn. Wel gaat mijn SSL certificaat, dat op de webmail server gebruikt wordt, in december verlopen. Dit certificaat wil ik voor die tijd vervangen hebben door een Let’sEncrypt certificaat. Op zich niet zo ingewikkeld. Ik kan dit zo configureren op de server. Of ik kan de webmail ook achter de HAProxy plaatsen en daar het certificaat laten beheren. Maar op de server draait ook een IMAP server die zijn eigen certificaten gebruikt. Althans, hetzelfde certificaat, maar geïnstalleerd op een andere locatie. Dat wordt nog een uitzoekklusje.

  • Upgraden, dan wel vervangen van de DNS servers.
  • Updaten van de Raspberry PI die de slimme meter uitleest.
  • Vervangengen van de Oodo sever, een financieel pakket.
  • SSL certificaten op de mail\webmail server vervangen door Let’s Encrypt certificaten.
  • Upgraden mail gateway.
  • Elastic Search installeren en configureren opde wiki server.

Een teken van leven

Je zou bijna denken dat ik deze website vergeten ben, ik plaats niet of nauwelijks updates.
Vergeten ben ik hem niet, maar er was eigenlijk weinig te melden. Tot afgelopen week.

Datacenter

Ik heb thuis een mini data-center draaien, 2 Proxmox servers die samen een Proxmox cluster vormen. Voor wie niet weet wat Proxmox is, en dat is geen schande, het is virtualisatie software. Oftewel software die je kunt gebruiken om virtuele servers te draaien. Met een paar klikken heb je een virtuele server in de lucht en Proxmox regelt dan alles er omheen, zoals netwerk en ook het maken van een back-up van de virtuele server.

Maar Proxmox kan meer, of liever gezegd, heeft meer. Je kunt in Proxmox naast virtuele servers draaien ook Linux containers draaien. Zo’n Linux Container is eigenlijk een uitgeklede server waarin alleen het meest noodzakelijke aanwezig is om een applicatie te kunnen draaien.
Deze Linux containers gebruiken daardoor ontzettend weinig resources. De meeste Linux containers hebben al genoeg aan 8GB storage (disk space), 1 of 2 CPU’s, en 1 à 2 GB geheugen. Uiteraard volledig afhankelijk van de applicatie die in de container gebruikt wordt.

Toen ik een paar jaar geleden begon met Proxmox was dat als vervanging van mijn VMware ESX omgeving, die bestond uit een paar zeer oude Dell servers, die zeer luidruchtig waren en enorm veel stroom verbruikten.
De servers die ik nu gebruik zijn een stuk zuiniger wat elektriciteitsverbruik betreft, ontzettend stil, en ze produceren weinig warmte.
Het zijn in feite 2 stevige PC’s met een gaming moederboard, een CPU met 20 cores en veel geheugen. Heel veel geheugen. Voldoende om de servers die ik op mijn ESX omgeving had draaien ook hier te kunnen draaien.

Nu zul je je misschien afvragen, wat moet zo’n jongen met al dat speelgoed?
En op zich is dat een goede vraag.
In eerste instantie had ik het plan om een OpenShift cluster te installeren, omdat dat vanuit mijn werk iets is waar ik mij mee bezig houdt. En ik thuis een omgeving wilde hebben waar ik wat kennis en ervaring mee op kan doen, en een en ander uit kan testen en proberen. Maar aangezien we op mijn werk gekozen hebben voor gehoste OpenShift omgevingen, was de noodzaak om thuis te kunnen “spelen” niet meer aanwezig. Maar ik heb nog wel een aantal websites die ik host. Onder andere deze site, maar ook websites zoals autonoom.info en youriplate.info. Daarnaast fungeert de webserver ook als reverse proxy voor een aantal websites en web-based applicaties. In feite voor alles wat thuis draait. Of op een virtuele server, of op een Raspberry PI en een web-based interface heeft..

Containers

En Proxmox heeft containers. Althans, je kunt er Linux containers op draaien. En er zijn diverse out-of-the-box templates beschikbaar die je kunt gebruiken om bepaalde applicaties te draaien. Er zijn al een aantal templates beschikbaar via Proxmox die je toe kunt voegen aan je eigen Proxmox omgeving. Vooral gericht op een OS zonder applicaties. Daarnaast zijn er templates beschikbaar van Turnkey.
Turnkey biedt diverse templates aan die je als ISO bestand kunt downloaden en daarmee een server kunt installeren, er zijn ook een aantal templates voor Linux containers beschikbaar. Deze templates bevatten een geïnstalleerde applicatie op Debian.

De images die je download via de site zijn server images, de containers zijn alleen beschikbaar via Proxmox. Het aanbod in containers is beperkter.

Maar nu even terug naar mijn eigen omgeving.
Toen ik met Proxmox begon heb ik een server opgezet om al mijn, hoofdzakelijk op WordPress gebaseerde websites, te kunnen draaien.
De keuze die ik toen gemaakt heb was eigenlijk op dat moment een logisch vervolg op mijn vorige webserver, CentOS met Apache als HTTP server. Het voordeel was dat ik de configuratie bijna 1 op 1 over kon zetten.

Op dat moment leek dat een goede keuze. Achteraf niet. Om een of andere reden had ik problemen met de meest recente versie van CentOS die op dat moment beschikbaar was, versie 9, en was ik min of meer gedwongen om CentOs versie 8 te gebruiken. Die op dat moment al vrij oud was.
Ik had natuurlijk voor een andere distro kunnen kiezen, maar ik was nu eenmaal verknocht aan CentOS, en had daar de meeste ervaring mee.

Dat het niet zo’n goede keuze was, bleek al vrij snel nadat ik de server geïnstalleerd en geconfigureerd had. Nadat alle sites en configuraties van virtuele hosts overgezet waren, wilde ik nog wat additionele zaken oppakken, zoals het installeren van de Zabbix agent zodat de server ook meegenomen wordt in de monitoring.
Nu weet ik niet meer wat exact het probleem was. Of het lukte niet om de Zabbix agent te installeren, of de Agent was te oud om met de Zabbix server te communiceren. In ieder geval monitoren van de server was niet mogelijk. Best wel balen als je kort daar voor een nieuwe server opgetuigd hebt.

Al een tijdje loop ik met het plan om de webserver te gaan vervangen en een nieuwe server in te richten. Ergens zie ik best wel tegen het werk op. Daarnaast was ik ook niet echt tevreden over de keuze die ik in het verleden gemaakt had, alle websites op 1 webserver die ook nog eens als reverse proxy fungeert voor andere omgevingen.
Wanneer ik onderhoud uit moet voeren op de server, of aan de website en de HTTP server moet hiervoor herstart worden, dan heeft dat effect op alle websites.

Aangezien Proxmox LXC containers ondersteunt leek het mij beter om de websites te migreren naar aparte LXC containers. Per website een Linux container met daarin een HTTP server en een database server. Aangezien de meeste websites gebaseerd zijn op WordPress wordt dat dan MySql of MariaDB.

Proxy server

Daarnaast leek het mij ook wel handig om de revesrse proxy als dedicated reverse proxy te laten fungeren, en bij voorkeur dubbel uitgevoerd zodat er bij onderhoud, of een technische storing, altijd een soort van back-up aanwezig is.
Voor dat laatste heb ik een oplossing gevonden in de vorm van HAProxy.
HAProxy is een high performance TCP/HTTP load balancer. Het maakt gebruik van een virtueel IP adres (VIP) dat aan de actieve node toegewezen wordt. De clients maken een connectie met het VIP en komen op die manier op een van de beschikbare proxy servers uit.

Hoe de installatie en configuratie uitgevoerd is, is iets voor een volgende blog.

De draad oppakken

Sinds het opzetten van deze website en het plaatsten van het eerste bericht zijn er geen nieuwe berichten van mijn hand verschenen. Ook niet van iemand anders hand.

Inmiddels merk ik dat ik af en toe de behoefte heb om een bericht te delen met de rest van de wereld en social media kanalen zoals X of Bluesky minder geschikt voor zijn. En het bericht ook niet thuishoort op een van de andere web sites die ik beheer, autonoom.info en youriplate.info.
Vandaar dat ik deze site maar weer een beetje afgestoft heb en zal gebruiken om mijn hersenspinsels de wereld in te sturen.

Er zal de komende tijd ook nog wel wat aan de web site gesleuteld worden. De initiële opzet was vrij simpel en bevat de meest basale functionaliteit.
Of het thema van de website, wat de look & feel bepaald, nog veranderd weet ik nog niet. Ik geef de voorkeur aan een redelijk simpele layout voor een web site als deze. Het is geen web site van een bedrijf, wat als visitekaartje moet dienen, of een gelikte webshop waar geld mee verdient moet worden. Het gaat vooral om de inhoud.

Wat ik waarschijnlijk wel toe ga voegen, is knoppen om een bericht te delen op social media en eventueel integratie met andere mediabronnen. Verder sta ik open voor suggesties. Mis je iets, heb je een goede tip, aarzel niet en laat een reactie achter.

Een nieuwe website

Eens moest het er van komen, afscheid nemen van mijn Lotus Domino Server.
Ruim 20 jaar heb ik mijn eigen Lotus Domino Server die dienst doet als mijn mail server en webserver, maar het einde is in zicht. Sinds IBM Lotus Notes\Domino verkocht heeft aan HCL software heb ik geen toegang meer tot de software en de huidige versie die ik gebruik is oud. Erg oud.
Bovendien moet de hardware waarop de server draait vervangen worden. De Domino Servers is een virtuele server, maar oppakken en verplaatsen is er niet bij. Eigenlijk is alles verouderd. De Domino server draait op Linux, CentOs om precies te zijn, en upgraden is niet mogelijk. Alleen een nieuwe installatie van het OS is mogelijk. Dit betekent ook een nieuwe installatie van de Domino Server. Nu kan ik via een oud-collega nog wel aan de software komen, maar de Lotus Notes client voor Linux bestaat niet meer. Dat betekent dat ik aangewezen ben op de browser voor de mail en dat ik mijn Windows laptop nodig heb als ik iets aan de configuratie wil wijzigen of iets moet aanpassen aan de website Eigenlijk een goed moment om afscheid te nemen van de Domino Server. Met pijn in het hart, dat wel. Voor mijn e-mail ben ik al een tijd geleden over gegaan naar Kolab, een Open Source product voor e-mail en calendaring, dat ook de mogelijkheid heeft de mail op een smartphone te lezen met de standaard e-mail App.