De Magento 2 DevBox container is een eerste antwoord geweest op het feit dat Magento 2 niet goed werkbaar is te krijgen op MacOS en Windows platformen. Uit onderzoek is gebleken dat in 2016 gemiddeld 75% van alle webontwikkelaars de voorkeur legt bij één van de twee besturingssystemen, waarbij aangenomen kan worden dat dit aantal alleen maar gegroeid is. Ondanks dat deze Docker container nog in beta fase verkeerd, biedt het voor Magento ontwikkelaars een goede oplossing zonder (geforceerd) over te moeten stappen naar een native Linux omgeving.

Een stukje voorgeschiedenis laat zien dat we sinds de eerste release van Magento 2, Windows al vrij snel hebben laten vallen. Dit kwam mede door de omarming van Composer. Voor een aantal was native Linux het juiste alternatief waarbij de overige ontwikkelaars de keuze hebben gemaakt om te gaan werken op een Macbook. Voor die groep heeft MAMP PRO gefungeerd als een stabiele basis. Een aantal specifieke configuratie aanpassingen in combinatie met een extern gehoste database bracht een ‘redelijk’ werkbare omgeving maar niet om over naar huis te schrijven.

Los van het feit dat er basiskennis Docker vereist is, leek de release van de officiële Magento DevBox container op het eerste gezicht het juiste alternatief. Zonder hier al te ver op in te zoomen, was het voor ons simpelweg niet wat we ervan verwacht hadden. Dit resulteerde ook gelijk in de gedachtegang om bedrijfsbreed over te stappen naar Linux-only waardoor we af konden stappen van de onnodig zware Apple schil.

De combinatie van onze T.T.L., de teambrede intrinsieke motivatie en de komst van één van onze nieuwe ontwikkelaars, hebben we een nginx configuratie kunnen ontwikkelen die ideaal lijkt voor Magento 2 op Macbook’s. Door de getoonde interesse en het willen verbeteren van deze configuratie, delen we graag onderstaande tutorial.

Requirements

  • Homebrew v1.2.4
  • PHP v7.0.20 (FPM)
  • Percona Server
  • NGINX v1.12.0
  • Dnsmasq v2.77 (optioneel)

Stap 1 – Homebrew

Homebrew kan worden vergeleken met APT op Linux. Zoals ze op de officiële website al aangeven, is het de ontbrekende pakketbeheerder voor MacOS. Homebrew installeert “dingen die je nodig hebt” die Apple standaard niet levert. De installatie is relatief eenvoudig en kan geheel via de command-line.

/usr/bin/ruby -e “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)”

Stap 2 – Homebrew configureren

Om ervoor te zorgen dat de pakketten die geïnstalleerd worden via Homebrew als primair kunnen worden gebruikt, moeten we de PATH variabele van het systeem aanpassen. Dit gaan we doen binnen het .bash_profile bestand.

sudo nano ~/.bash_profile

Voeg onderstaande regel toe, sla het bestand op en herstart de terminal.

export PATH=“/usr/local/sbin/:$PATH”

Stap 3 – Installeer NGINX

Vervolgens kan Nginx geïnstalleerd worden. Nginx is volledig open source en staat bekend om zijn goede prestaties, simpele configuraties en stabiliteit. Om Nginx native te installeren op een Macbook voer je onderstaande uit binnen de terminal.

brew install nginx

Let op: voer geen brew commando’s uit als superuser (sudo) behalve als je een service start of herstart gaat uitvoeren.

Stap 4 – NGINX configureren voor Magento 2

In deze stap gaan we er voor zorgen dat Nginx juist is geconfigureerd voor zowel MacOS als Magento 2. In een opvolgende tutorial gaan we dieper in op de configuratie voor Magento 1 om beide platformen makkelijk naast elkaar te kunnen draaien.

Standaard draait Nginx op poort :8080, dit gaan we aanpassen naar :80. Navigeer binnen de terminal naar de installatie folder van Nginx en open het configuratiebestand.

nano /usr/local/etc/nginx/nginx.conf

Pas binnen het bestand de configuratie “listen 8080” aan naar “listen 80”. Na het opnieuw opslaan van het bestand kan Nginx voor het eerst opgestart worden.

sudo brew services start nginx

De reden waarom we een start of herstart uitvoeren als superuser is omdat we nginx onder poort 80 draaien. Alle poorten onder 1024 moeten met superuser rechten gestart of herstart worden.

Om Magento 2 te kunnen draaien moeten we een speciale configuratie toevoegen aan de Nginx folder. Dit configuratiebestand genaamd nginx.conf.sample, wordt standaard door Magento geleverd met zowel het Open Source als Commerce pakket.

nano /usr/local/etc/nginx/magento2.conf

Plak de configuratie en sla het bestand op. In deze tutorial noemen we de configuratie specifiek magento2.conf. Deze naam is niet bindend en mag indien gewenst ook anders genoemd worden. Het nginx.conf bestand is daarentegen wel naamsgebonden.

Om meerdere projecten te kunnen draaien, is het noodzakelijk om per project een extra configuratie toe te voegen aan de servers folder. Maak deze folder aan indien deze folder niet bestaat binnen de nginx folder. Op deze manier kun je o.a. domeinnamen toewijzen per project.

cd /usr/local/etc/nginx

mkdir servers (optioneel)

cd servers

In dit voorbeeld gaan we een configuratie aanmaken voor het domein http://opensource.mii. De .mii extensie gebruik ikzelf voor alle Magento 2 projecten en kan prima aangepast worden naar bijvoorbeeld .dev of .development. Maak de configuratie aan, plak deze inhoud in datzelfde configuratiebestand en sla het bestand vervolgens op. Zoals je wellicht ziet, laden we onderaan de configuratie ook gelijk de voorheen aangemaakt magento2.conf in.

Herstart de Nginx service om de configuratie in te laden.

sudo brew services restart nginx

Let op: gebruik wederom de superuser rechten. Wanneer je dit niet doet zal Nginx de configuratie niet juist oppakken.

Indien je geen gebruik gaat maken van Dnsmasq (optioneel), zul je per project apart nog het betreffende domein moeten toevoegen aan je hosts bestand.

sudo nano /etc/hosts

Voeg de volgende lijn toe aan het bestand:

127.0.0.1 opensource.mii www.opensource.mii

Stap 5 – Installeer PHP (FPM) Homebrew repository

Om de standaard Homebrew uit te breiden willen we het toegang geven tot extra repositories. Binnen Homebrew kan dit gedaan worden door middel van het zogenoemde “tapping”. Voor deze tutorial willen we zowel “PHP” als “dupes” tappen.

brew tap homebrew/dupes

brew tap homebrew/php

Om Magento 2 optimaal te laten draaien, hebben we PHP 7.0 (v7.1 werkt niet met Magento 2.1.x) nodig en installeren we ook direct alle cruciale extensies. Optioneel adviseren we ook gelijk de xdebug extensie voor PHP 7.0 te installeren.

brew install php70

brew install php70-intl

brew install php70-mcrypt

brew install php70-xdebug (optioneel)

Stap 6 – PHP extensies configureren

De geïnstalleerde extensies zullen out of the box niet geïnitialiseerd worden voor PHP-FPM. Hiervoor moeten we symlinks aanmaken voor de PHP7 configuratie bestanden. Navigeer hiervoor naar PHP-FPM config folder.

cd /usr/local/etc/php/7.0/php-fpm.d/

ln -s ../conf.d/ext-inlt.ini

ln -s ../conf.d/ext-mcrypt.ini

ln -s ../conf.d/ext-xdebug.ini (optioneel)

Indien je optioneel gekozen hebt voor het extra installeren van xdebug (voor o.a. PHPStorm), is het noodzakelijk om direct de juiste configuratie hiervoor in te stellen.

nano ext-xdebug.ini



zend_extension="/usr/local/opt/php70-xdebug/xdebug.so"

xdebug.remote_enable=1

xdebug.remote_port=9009

xdebug.profiler_enable=0

xdebug.remote_host=localhost

xdebug.idekey=PHPSTORM

xdebug.max_nesting_level=500

xdebug.profiler_output_dir="/tmp/xdebug.log"

xdebug.remote_autostart=1

xdebug.remote_connect_back=1

Stap 7 – Installeer Percona

Percona Server voor MySQL is een gratis, verbeterde, open source vervanging voor MySQL, die goede prestaties en schaalbaarheid biedt. Hiervoor hebben we een afweging moeten maken tussen Percona en MariaDB. De keuze is mede gebaseerd op het feit dat Magento het zelf aanraad om als server te gebruiken. Desondanks is MariaDB een prima alternatief mocht je dit al geïnstalleerd hebben.

Om Percona te installeren en standaard in te stellen als primaire database voer je het volgende uit in de terminal.

brew install percona-server

brew link percona-server

mysql --initialise --datadir=/usr/local/var/mysql --user={MacOS-gebruikersnaam}

Let op: Mocht je een foutmelding krijgen over dat een MySQL data folder niet bestaat of kan worden gevonden, maak dan een MySQL log folder aan en voer hetzelfde commando nogmaals uit. Onderaan het logbestand vind je direct je root wachtwoord.

mkdir /usr/local/var/mysql

Optioneel: Mocht je voor deze tutorial binnen je projecten gebruik maken van een standaard wachtwoord, dan kan het handig zijn om je root wachtwoord daarnaar aan te passen zodat je niet al je projecten bij langs hoeft. Om dit wachtwoord te kunnen aanpassen log je eerst in op de nieuwe Percona MySQL server. Hiervoor heb je het wachtwoord nodig wat onderaan het logbestand stond.

mysql -uroot -p{logbestand-wachtwoord}

ALTER USER ‘root’@‘localhost’ IDENTIFIED WITH mysql_native_password BY ‘{wachtwoord}’;

Ter afronding

Veel succes en vooral plezier met native NGINX voor Magento 2 op. We zijn dagelijks op zoek naar verbeteringen om deze configuratie te verbeteren. De ideeën zijn eindeloos en we hopen daarom ook op feedback vanuit de community!

Let op: de risico’s van bovenstaande configuratie zijn relatief klein. We adviseren voorafgaand backups en snapshots te maken!