Deploy een PHP omgeving met het NPO Hosting template

Voor het uitrollen van een PHP website op het OpenShift platform van NPO Hosting hebben we een template ontwikkeld die gebruik maakt van onze eigen ontwikkelde PHP en Nginx containers. Dit template en deze containers worden ondersteund door NPO Hosting en hieronder een handleiding hoe je deze kan gebruiken.

Voor het uitvoeren van een deployment is het noodzakelijk dat de code in een private git repository staat, en dat je daarvan in het bezit bent van een SSH Keypair. Tevens worden de volgende twee scripts verwacht in de root van de repository:

  • deploy.sh
  • run.sh

Deze scripts zijn nodig voor het deployen van de code en het neerzetten van de code op de juiste plek.

deploy.sh

Dit script wordt aangeroepen bij het bouwproces van de container, en kan dus gebruikt worden voor acties die tijdens het deployment nodig zijn, bijvoorbeeld het uitvoeren van composer install. Deze acties worden allemaal uitgevoerd in een tijdelijke directory: /tmp/src.

Let op: Het verplaatsen van de code naar /var/www/html kan NIET in dit script gedaan worden. Dit komt omdat /var/www/html uiteindelijk nog wordt overschreven. Gebruik voor het verplaatsen van de code het run.sh script.

run.sh

Het run.sh script wordt aangeroepen bij het opstarten van de container, en dit script kan gebruikt worden om de code te verplaatsen van /tmp/src naar /var/www/html

Voordat we beginnen met de uitrol hebben we in OpenShift een Project nodig waarin we dit gaan uitrollen. Ik ga hiervoor de naam “hens-demo” gebruiken, en ik heb hem aangemaakt met het commando:

  • oc new-project hens-demo

Daarna is er een “Secret” nodig met daarin de SSH Key die gebruikt kan worden om met de Git repository te authenticeren, deze kan je aanmaken met het volgende commando:

oc create secret generic git-secret \
	--from-file=ssh-privatekey=/home/tim/.ssh/openshift-keys/hens-demo \
	--type=kubernetes.io/ssh-auth

Ik geef in het bovenstaande commando de naam git-secret mee aan het secret, omdat dit de default ingestelde waarde is in het template. Uiteraard kan hier ook wat anders worden opgegeven, maar dan moet dat ook later worden opgegeven in het verwerken van het template.

Als laatste moeten we het template downloaden en op een plek neerzetten waar we hem kunnen vinden. De templates zijn te vinden in onze Git repository:

https://github.com/npohosting/openshift-templates/tree/master/php

Het template heeft een aantal “Parameters” die aangepast kunnen en moeten worden:

  • NAME: De naam van alle objecten die aangemaakt worden (Default: my-app).
  • SOURCE_REPOSITORY_URL: De url van de Git repository, deze heeft geen default en moeten we dus straks opgeven.
  • SOURCE_REPOSITORY_REF: Hiermee kan je een branch opgeven. Dit is niet verplicht en heeft geen default.
  • APPLICATION_DOMAIN: De url waarmee de applicatie straks beschikbaar is van buitenaf. Wordt deze niet opgegeven dan wordt er wat gemaakt.
  • NGINX_VERSION: De versie van nginx (npohosting/nginx) die gebruikt gaat worden (Default: latest).
  • PHPFPM_VERSION: De versie van phpfpm (npohosting/php-fpm) die gebruikt gaat worden (Default: latest).
  • GIT_IDENTITY_KEY: De naam van het secret waar je SSH Key in staat voor Git (Default: git-secret).

Om onze applicatie uit te rollen gaan we het volgende commando uitvoeren:

oc process -f nginx-phpfpm.singlepod.template.yml \
	-p SOURCE_REPOSITORY_URL=git@github.com:tsterk/demo.git \
	-p APPLICATION_DOMAIN=hens-demo.chp.npohosting.nl \ 
	-o yaml | oc create -f -

Hoe lang de deployment duurt is afhankelijk van wat er allemaal moet gebeuren en hoe groot de applicatie is. De status kan bekeken worden met het commando oc status. Wanneer de deployment klaar is, kan hij benaderd worden via de url http://hens-demo.chp.npohosting.nl, mits deze natuurlijk in de DNS bekend is en naar het OpenShift cluster staat

SSL

Na het uitvoeren van een deployment kan het gewenst zijn om deze ook te voorzien van een SSL certificaat. Hoe dit kan worden ingesteld kan je hier lezen: SSL Certificaten via LetsEncrypt

Aanpassen PHP instellingen

Voor het aanpassen van PHP instellingen, met name het toevoegen van extra modules, moet een “ConfigMap” worden aangepast, deze is al aangemaakt met de deployment en heeft de naam <naam van de app>-phpfpm-config (bijvoorbeeld my-app-phpfpm-config).

Via de CLI kan je de ConfigMap bewerken met het commando oc edit cm my-app-phpfpm-config, onderstaande configuratie wordt dan geopend:

apiVersion: v1
data:
  specials.ini: ;extension=<name of extension>.so
kind: ConfigMap
metadata:
  annotations:
    description: Create a configmap with some basic php configuration.
  labels:
    app: my-app
  name: my-app-phpfpm-config

Je kan dan bij specials.ini (onder data) extra PHP modules aanzetten. Dat komt er na het wijzigen dan ongeveer zo uit te zien:

apiVersion: v1
data:
  specials.ini: |-
    extension=gd.so
    extension=pdo_mysql.so
kind: ConfigMap
metadata:
  annotations:
    description: Create a configmap with some basic php configuration.
  labels:
    app: my-app
  name: my-app-phpfpm-config

Het is na het aanpassen nog nodig om de Deployment opnieuw uit te rollen. Dit kan met het commando oc rollout, je hebt hiervoor de naam van het Deployment nodig, in dit voorbeeld is het my-app. Je kan dan het commando als volgt uitvoeren:

  • oc rollout latest dc/my-app
  • chp/handleiding/nginx-phpfpm.txt
  • Last modified: 2019/07/11 08:18
  • (external edit)