WordPress lokaal installeren kan een goed idee zijn, wanneer je bijvoorbeeld verschillende dingen wilt uitproberen, of wilt uitproberen of een upgrade wel helemaal goed zal gaan. In mijn blogartikel over de noodzaak van Staging (en nog in vele andere blogartikelen) heb ik dat uitgebreid besproken.
Wanneer ik alleen een update wil testen, of andere dingen wil uitproberen dan doe ik dat het liefst online. Binnen het Plesk panel wat ik gebruik kan ik makkelijk een staging site maken.
Maar wanneer ik daadwerkelijk aan het programmeren sla, dan werk ik toch het liefst lokaal. En tot voor kort gebruikte ik hiervoor graag de ‘DesktopServer‘, een makkelijke manier om snel lokaal een hostingomgeving voor WordPress op te zetten.
Helaas maakt ‘DesktopServer’ gebruik van ‘XAMPP’, een open source bundel van Apache, MySQL en PHP die inmiddels niet meer onderhouden wordt. Op zich geen ramp… want het werkt nog steeds prima, tot je op een gegeven moment een wel heel grote site wilt importeren.
Toen ik voor een klant met een website met een totaal gecomprimeerde grootte van 5 GB wilde importeren met behulp van All in One WP Migration – een op zich prima plugin – kreeg ik een foutmelding van PHP. Het bestand was te groot om met de 32 bits versie van PHP uit te pakken. Helaas is er echter geen 64 bits versie van XAMPP beschikbaar.
Ik kon natuurlijk met de hand een compleet nieuwe omgeving opzetten, maar ik bedacht me iets anders.
Virtual Machines
In mijn verhaal over Virtual Private Servers heb ik al het nodige verteld over ‘virtualisatie’. En binnenkort zal ik er meer over vertellen, maar op het moment ben ik daar eigenlijk behoorlijk actief mee.
Bij deze ‘virtualisatie’ gebruik ik Docker. Docker is wat men tegenwoordig zo mooi noemt een ‘ecosysteem’ waarbinnen -onder meer- taak gerichte ‘virtual machines’ ontwikkeld worden.
Allemaal een mond vol met mooie woorden, maar in de praktijk kan je het best naar Docker kijken als een systeem waarmee je -bijvoorbeeld- een ‘kastje’ met Linux op jouw lokale PC kan installeren. Het werkt overigens even goed -of eigenlijk beter zelfs- op de Apple.
Het idee is eigenlijk heel simpel. Allereerst moet je het ‘Docker’ programma downloaden. Heb je dat gedaan, dan kan je een ‘opdracht’ geven op een ‘Image’ (geen foto, maar een ‘disk image’, de indeling van een computerdisk) down te loaden en op te starten.
En dan heb je zomaar ineens een WordPress op je lokale computer staan. Of eigenlijk helemaal niet! Want dat is het leuke. Heb je jouw testjes gedaan en besluit je, dat je de site niet meer nodig heb, dan verwijder je deze gewoon. Want je kan zo’n ‘Image’ het best zien als een enkel bestand. Die kan je dus makkelijk verwijderen, zonder allerlei ‘rommel’ achter te laten.
Toch wel enige uitdaging…
Er is echter wel enige uitdaging bij het installeren van WordPress via Docker. Tenminste, wanneer je Windows Home gebruikt. Je moet namelijk ‘WSL2′, het Windows Subsystem for Linux’ installeren. Gebruik je Windows Professional, Enterprise of Student, dan is WSL2 al ‘inbegrepen’.
En wanneer je een Mac hebt… tja je operating system is al een afgeleide van Linux.
Maar eigenlijk alleen het installeren van WSL is enigzins een uitdaging, voor de rest wordt het toch wel heel makkelijk gemaakt.
Wil je Docker downloaden, dan moet je wel een (gratis) account aanmaken.
Het downloaden en installeren van Docker wijst zichzelf. Na de installatie wordt het pas echt leuk.
Wat kan je met Docker?
Het grappige van Docker is, dat de meeste mensen aan wie je vraagt wat Docker is hier totaal verschillende antwoorden op geven. Vraag je diezelfde mensen, wat je met Docker kan doen, dan geven de meeste mensen toch wel gelijkluidende antwoorden.
Je kan met Docker namelijk een kant en klare set up voor enorm veel -hoofdzakelijk internet gerelateerde- open source toepassingen downloaden.
Wil ik bijvoorbeeld WordPress downloaden, dan download ik niet een zip bestand met alle files erin, maar een ‘Image’ met Linux, Apache en WordPress alvast voorgeïnstalleerd.
Wanneer je aardig oplettend bent, dan heb je ongetwijfeld gemerkt, dat hier ook iets ontbreekt. MySQL. En dat ontbreekt ook met opzet. Want MySQL (of MariaDB) kan je in een aparte ‘kant en klare’ Image downloaden.
Wanneer je zo’n ‘image’ opstart, heet het overigens ineens een ‘Container’. Je moet het eigenlijk zo zien, dat een ‘Image’ het best te vergelijken is met je harddisk. Op het moment, dat je computer niet aan staat, is er ook niets actief. De ‘Container’ is het resultaat van een image, wanneer zo’n image geactiveerd wordt.
En het aardige is, is dat zo’n ‘Container’ wel binnen de context van je computer draait, maar de rest van je computer helemaal ongemoeid laat. Het is eigenlijk een kleine linux server binnen jouw computer.
De Bitnami Image
Die images kunnen door verschillende partijen gemaakt worden. Zo is er een officiële WordPress image, afkomstig van WordPress.org zelf. Daar ben ik zelf mee aan de slag gegaan, en na enige tijd lukte het mij zomaar om alles draaiend te krijgen.
Alleen daar moest ik zoveel handelingen voor verrichten en zoveel uitzoeken, dat ik besloot, dat het wel een heel slecht idee was om dit via een blogpost proberen uit te leggen. Al was het alleen al vanwege het feit, dat ik eigenlijk niet eens zeker ben, waarom het in eens wel werkte. (Het probleem was overigens niet met de installatie van de image zelf, maar de pogingen om de container met MySQL en de container met WordPress met elkaar te laten praten).
Gelukkig was er nog een andere image. Die van Bitnami. Nu heeft Bitnami in de wereld van de virtual machines een goede naam, dus ik wilde nog wel wat meer tijd besteden in een poging ‘Bitnami’ aan de praat te krijgen.
En dat is mij wonderwel gelukt.
Docker is overigens wel helemaal ‘command line oriented’. Je moet dus niet bang zijn om het één en ander in het Windows Command venster of in de Terminal van je Mac in te tikken.
Ik ga ervan uit, dat je Docker hebt geinstalleerd.
Stap voor stap WordPress lokaal installeren met Docker
/
Uitgangspunten zijn dat je Docker hebt geïnstalleerd, een Docker account hebt en daarop ook bent ingelogd. De Docker server is actief. Mocht je dat niet zeker weten, start dan de ‘Docker Desktop’ applicatie op.
1. Een virtueel netwerk definiëren
Om beide containers (WordPress en MariaDB) met elkaar te kunnen laten praten, moet je een virtueel netwerk definieren. Dat doe je met het commando
docker network create wordpress-network
2. Opslag voor MariaDB aanmaken
Docker moet bij het aanmaken van de image weten, dat er data opgeslagen moet gaan worden, zodat in de virtuele machine een map wordt aangemaakt, waarbinnen deze data wordt opgeslagen.
docker volume create --name mariadb_data
3. MariaDB downloaden en configureren en opstarten.
Op zich lijkt de code hieronder heel ingewikkeld, maar dat valt eigenlijk best wel mee. Wat hier echter belangrijk is te realiseren, is dat je inlog en database gegevens zoals hieronder aangegeven moet vervangen met gegevens die je zelf wilt gaan gebruiken voor het inloggen van WordPress. Let er op, dat de tekst hieronder allemaal op één regel moet staan.
docker run -d --name mariadb
--env ALLOW_EMPTY_PASSWORD=yes --env MARIADB_USER=wordpressdb --env MARIADB_PASSWORD=supergeheim --env MARIADB_DATABASE=wordpressdb --network wordpress-network --volume mariadb_data:/bitnami/mariadb bitnami/mariadb:latest
In de code hierboven zeg je eigenlijk ‘Docker, start voor mij MariaDB eens op met de volgende kenmerken.
Omdat Docker helemaal nog geen MariaDB heeft, zal dit eerst worden gedownload en geïnstalleerd.
Als deze opdracht klaar is (de eerste keer kan dat even duren) kan je door naar de volgende stap.
4. Opslagruimte voor WordPress definieren
docker volume create --name wordpress_data
5. WordPress downloaden, configureren en opstarten
Dit is weer zo’n hele lange regel. Wat hier belangrijk is, is dat je dezelfde gegevens voor de database gebruikt, als je hierboven onder 3. hebt aangegeven. Onder 3. heb je namelijk tegen de MariaDB container gezegd, dat je die gegevens wilt gaan gebruiken om in te loggen.
Met ‘-p 8080:8080’ zeg je in feite, dat je de website via poort 8080 wilt benaderen. Maak je straks verbinding met de server, dan moet je dus jouw lokale IP adres met daarachter ‘:8080’ ingeven.
Je kan er eventueel ook voor kiezen de standaard poort te nemen, dat is 80, dus dan geef je in plaats van -p 8080:8080 in -p 80:8080
docker run -d –name wordpress -p 8080:8080 -p 8443:8443 –env ALLOW_EMPTY_PASSWORD=yes –env WORDPRESS_DATABASE_USER=wordpressdb –env WORDPRESS_DATABASE_PASSWORD=supergeheim –env WORDPRESS_DATABASE_NAME=wordpressdb –network wordpress-network –volume wordpress_data:/bitnami/wordpress bitnami/wordpress:latest
6. Start de ‘gewone WordPress installatie’ in de browser
Je website is toegankelijk op http://<jouw-ip-adres>:8080/ of -indien je daarvoor gekozen hebt op http://<jouw-ip-adres>/
Wat je IP adres is kan je op Windows achterhalen door op de commandline in te tikken :
ipconfig
Gebruik je de Mac, dan denk ik (ik ben zelf geen Mac gebruiker), dat het commando
ifconfig
zou zijn, dat is in ieder geval het vergelijkbare commando voor Linux. Mocht het toch wat anders zijn, en je weet wat dat is, zou het leuk zijn als je het in de commentaren hieronder even aan wilt geven.
Is jouw IP bijvoorbeeld 192.168.1.1, dan geef je in in de browser : http://192.168.1.1/
Nu kom je in de standaard installatiepagina van WordPress. Gebruik je favoriete migratie plugin om je website van je live omgeving naar deze testomgeving te verplaatsen.
Denk erom, dat beide ‘Containers’ geheugen en processorcapaciteit gebruiken. Ben je klaar? Gebruik dan de Docker Desktop applicatie om de containers te stoppen, of om ze later weer op te starten.
Tot slot
Windows lokaal installeren is op deze manier wellicht wat complexer dan de eerder besproken Desktop Server, maar -in ieder geval op mijn computer- de uiteindelijke site is een stuk sneller.
Je vraagt je misschien af, waarom je een gebruikersaccount aan moest maken. Het aardige van Docker is echter, dat je jouw ‘images’ ook kan uploaden. Nu zal je er zelf niet veel behoefte aan hebben om een kopie van jouw website (met mogelijk data van jouw klanten in de database) publiekelijk te uploaden, maar wanneer je een betaald account hebt, dan kan je ook meerdere images privé uploaden. (En terwijl ik dit schrijf besef ik hoe raar het klinkt, wanneer ik het heb over mijn ‘privé images uploaden’… nogmaals, we hebben het hier over disk images 😉
Wanneer je -zoals ik- aan maardere sites werkt, is dit een handige functionaliteit.