seo-approving empty image

In dit artikel neemt Jef Vermeire, PHP Developer bij Starring Jane je mee in het proces om het Akeneo PIM-systeem succesvol te deployen met behulp van PHP-deployer. 
 

Waarom?

Een goed Product Information Management (PIM) wordt gebruikt als verzamelplaats voor producten en alle informatie die nodig is voor verkoop via verschillende kanalen. De producten kunnen manueel ingegeven worden of je kan kiezen voor een koppeling met een ERP-systeem.  

Vanuit een PIM-systeem blijft jouw informatie steeds foutloos en actueel. Je kan het gebruiken om jouw webshop op te bouwen (de favoriet binnen ons team is Magento 2), een externe webshop te gebruiken, producten verkopen via sociale media of het printen van een catalogus.

.gist-data svg, .gist-data .flash {display: none!important;}

Tip: bekijk de instellingen voor de virtual host 

In dit geval moest de docroot voor de vhost verwijzen naar /current/public omdat het deployer systeem de meest recente release bijhoudt in de current map. De instellingen voor de vhost moeten als volgt ingesteld worden.

Het deploy script

Wat is deployer

Deployen is het klaarmaken van je website of applicatie voor gebruik. Met deployer automatiseren we het proces om jouw applicatie online te zetten. Deployer is een package geschreven in PHP en bestaat uit een deployscript dat in elk project kan worden toegevoegd. Op deze manier weet deployer welke versies van jouw ontwikkeling naar waar gepusht moeten worden en in welke staat (production? staging?). 

Het volledige proces gebeurt via SSH. Er wordt een beveiligde verbinding gemaakt met de server waarna alle gedefinieerde commands uit het deploy script uitgevoerd worden in een nieuwe release map.

Voordelen van deployer

Zero down time
Voor elke nieuwe release wordt een nieuwe map aangemaakt op de server waarop de site wordt deployed. Pas als het volledige proces succesvol is afgerond, wordt de nieuwe release gelinkt aan de huidige versie. Loopt er dan toch wat mis, kan er gemakkelijk teruggekeerd worden naar vorige versies.  

Vooraf gedefinieerde commando’s
Voor bekende frameworks van bijvoorbeeld Magento (2), Laravel of Symphony kan je gebruik maken van recipes. Recepts zorgen er voor dat je vooraf gedefinieerde commando’s kan uitvoeren om op een juiste manier up and running te krijgen op de server.  

Minder werk
Via de gedeelde mappen kunnen bestanden die gedeeld worden tussen verschillende releases gedefinieerd worden. Je hoeft dus niet telkens het enviroments bestand aan te maken. Bij WordPress hoef je de uploads-map maar één keer aan te maken. Hierdoor worden grote bestanden en afbeeldingen maar één keer opgeslagen op de server.

Opzet deployer voor Akeneo

Deployer kan op twee manieren geïnstalleerd worden voor gebruik:

  • Globaal: dit wil zeggen dat deployer in globaal commando is op je computer en je dit niet per project dient toe te voegen.
  • Per project via composer

Voor dit project is gebruik gemaakt van deployer versie 6.8.

Het hart van deployer is het deploy.php script dat je toevoegt in de root van je project. Aan de hand van dit bestand weet deployer welke tasks moeten uitgevoerd worden en naar welke server het project gedeployed wordt. Je kan dit bestand manueel aanmaken en invullen of je kan gebruik maken van het commando 'php vendor/bin/dep init’ (of gewoon dep init als je deployer globaal hebt geïnstalleerd). Als je gebruik maakt van het commando worden een aantal configuratie vragen gesteld en na het doorlopen van de vragen wordt het deploy.php bestand aangemaakt (let wel: de tasks zal je wel nog manueel moeten toevoegen).

Deploy script in Akeneo

Naast de standaard commando’s van deployer zijn er een aantal custom commando’s toegevoegd om het pim systeem te deployen.  

Directory js
Dit commando zorgt ervoor dat er in de public map een nieuwe directory toegevoegd wordt met de naam js. Dit is nodig omdat het volgende commando anders een foutmelding geeft dat deze folder niet bestaat. Het volgende commando maakt een bestand aan in de js folder met absolute paden naar packages in de vendor map. 

Front-end assets
Dit commando voegt de frontend assets toe aan het project.

Opbouw 
Dit commando bouwt de frontend van het pim systeem op. 

Compileren in front-end productiemodus
Dit commando compileert de frontend in productiemodus.  

Na het doorlopen van de custom commando’s neemt symphony over voor de migration van de database. Symfony is een PHP-framework en verzameling van herbruikbare PHP-components. Het doel van Symfony is het versnellen van webapplicatie en het aantal repetitieve stukken code te verminderen.

Concreet alle stappen van het deploy script

Stappen na het succesvol deployment 

Eens het PIM-systeem online staat, beginnen we aan enkele configuraties.  

Instellen van de cron jobs 
Een cron job is een is een geplande taak die een script uitvoert op specifieke tijdsintervallen. Akeneo lijstte alle jobs op.

Opstarten daemon 
Om er voor te zorgen dat alle jobs op de achtergrond worden uitgevoerd starten we een daemon op. Hiervoor moet eerst supervisor geinstalleerd zijn en moet je volgende configuratie toevoegen: 

Welke issues kunnen zich voordoen

Elasticsearch 
Één van de belangrijste zaken is Elasticsearch. Elasticsearch is een open source oplossing die, kort gezegd, vooral gebruikt wordt om snel grote hoeveelheden data te kunnen doorzoeken en analyseren. We hebben dit nodig voor de zoekmachines gunstig te stellen. DE makkelijkste manier om het funcrioneren ervan te checken is door volgend commando uit te voeren. Hopelijk ontvang je dan ook de juiste output. Indien niet, start de service opnieuw op door op de linux server ‘sudo systemctl restart elasticsearch uit te voeren. Het effectieve commando dat je moet uitvoeren is 'curl localhost:9200'.

Ontbreken van packages of PHP-extensies  
Het kan zijn dat er enkele packages of PHP-extensies op de server ontbreken. Controleer dit door door ‘apt –list installed’ uit te voeren voor de packages en ‘php -m’ voor de php extensies die gebruikt worden. 

Data ontbreekt uit de database 
Nog een vaakvoorkomend issue is dat, er (nodige) data ontbreekt in de database. Hiervoor voorziet Akeneo twee seeders. Eén die het minimale aan data voorziet en één die de database vult met test data (producten, attributen, families…). Voer dit commando uit in de root van het project om de database met de minimale data te seeden: 

php bin/console pim:installer:db --catalog vendor/akeneo/pim-community-dev/src/Akeneo/Platform/Bundle/InstallerBundle/Resources/fixtures/minimal