chp:handleiding:nginx-phpfpm

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

chp:handleiding:nginx-phpfpm [2020/05/20 05:30] (current)
Line 1: Line 1:
 +====== 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.
 +
 +===== Algemene voorbereidingen =====
 +
 +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''​
 +
 +**Run.sh:**
 +<code bash>#​!/​bin/​sh
 +
 +docroot=/​var/​www/​html/​
 +
 +if [ ! -d ${docroot} ]; then
 +  mkdir -p ${docroot}
 +fi
 +
 +cp -Rv /tmp/src/* ${docroot}</​code>​
 +
 +===== Uitrol via de CLI =====
 +
 +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:
 +
 +<code bash>
 +
 +oc create secret generic git-secret \
 + --from-file=ssh-privatekey=/​home/​tim/​.ssh/​openshift-keys/​hens-demo \
 + --type=kubernetes.io/​ssh-auth
 +
 +</​code>​
 +
 +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:
 +
 +<code bash>
 +
 +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 -
 +
 +</​code>​
 +
 +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
 +
 +===== Extra acties =====
 +
 +==== 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: [[chp:​handleiding:​letsencrypt|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:
 +
 +<code yaml>
 +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
 +</​code>​
 +
 +Je kan dan bij ''​specials.ini''​ (onder ''​data''​) extra PHP modules aanzetten. Dat komt er na het wijzigen dan ongeveer zo uit te zien:
 +
 +<code yaml>
 +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
 +</​code>​
 +
 +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: 2020/05/20 05:30
  • (external edit)