Differences

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

Link to this comparison view

chp:handleiding:nginx-ruby [2020/03/06 07:53] (current)
Line 1: Line 1:
 +====== Deploy een Ruby omgeving met het NPO Hosting template ======
 +
 +Voor het uitrollen van een Ruby website op het OpenShift platform van NPO Hosting hebben we een template ontwikkeld die gebruik maakt van onze eigen ontwikkelde Ruby en Nginx containers. Dit template en deze containers worden ondersteund door NPO Hosting en hieronder een handleiding hoe je deze kan gebruiken.
 +
 +Note: voor deze instructie gebruiken we een simpele app. 
 +
 +===== 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
 +  * custom-run (optioneel)
 +
 +Deze scripts zijn nodig voor het deployen van de code en het neerzetten van de code op de juiste plek. Let op de namen van deze scripts, die kunnen niet afwijken.
 +
 +De templates zijn te vinden in onze Git repository: https://​github.com/​npohosting/​openshift-templates/​tree/​master/​ruby
 +
 +==== deploy.sh ====
 +
 +Dit script is verantwoordelijk voor het plaatsen van de sourcecode op de juiste locatie (standaard in /​var/​www/​html),​ ook kan het gebruikt worden om de benodigde gems te installeren. Een voorbeeld van een deploy.sh voor Ruby is hieronder te zien,
 +
 +<code bash>
 +
 +#!/bin/sh
 +
 +cp -Rv /tmp/src/* /​var/​www/​html
 +
 +# Run bundle install only when running in a ruby container.
 +if [ -f /​usr/​local/​bin/​bundle ]; then
 + cd /​var/​www/​html;​ bundle install
 + chmod -v 775 /​var/​www/​html/​tmp /​var/​www/​html/​log
 +fi
 +
 +</​code>​
 +
 +==== custom-run ====
 +
 +Dit script is optioneel, en kan worden gebruikt om te specificeren hoe de Ruby applicatie gestart dient te worden, standaard voert de container het commando ''​exec rackup -p /​tmp/​rack.pid --host 0.0.0.0 --port 3000''​ uit.
 +
 +Een voorbeeld hoe een custom-run script eruit kan zien is hieronder te zien:
 +
 +<code bash>
 +
 +#!/bin/sh
 +
 +echo "# Starting rails server..."​
 +exec rackup -p /​tmp/​rack-custom.pid --host 0.0.0.0 --port 3000
 +
 +</​code>​
 +
 +===== Uitrol via de CLI =====
 +
 +Voordat we beginnen met de uitrol hebben we in OpenShift een Project nodig waarin we dit gaan uitrollen. De naam van dit project moet uniek zijn en beginnen met de naam van de omroep/​afdeling. Wij gebruiken voor nu de naam "​hens-demo"​. Het project kan aangemaakt worden met het commando ''​oc new-project'':​
 +
 +  * ''​oc new-project hens-demo''​
 +
 +Daarna hebben we een "​Secret"​ nodig met daarin de SSH Key die de code uit de Git repository kan halen. Het keypair heb ik al aangemaakt en het secret kan worden aangemaakt met het commando ''​oc create secret'':​
 +
 +<code bash>
 +oc create secret generic git-secret \
 + --from-file=ssh-privatekey=/​home/​tim/​.ssh/​openshift-keys/​ror-sample \
 + --type=kubernetes.io/​ssh-auth
 +</​code>​
 +
 +In bovenstaande voorbeeld heb ik het Secret de naam "​git-secret"​ gegeven, dit omdat dit de standaard waarde is die het template straks verwacht.
 +
 +Nu moeten we het template downloaden of de repository clonen naar een plek waar we het terug kunnen vinden. Het template heeft vervolgens een aantal parameters die gebruikt moeten worden, sommigen van deze hebben een standaard waarde:
 +
 +  * 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''​).
 +  * RUBY_VERSION:​ De versie van ruby (''​npohosting/​ruby''​) 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''​).
 +
 +Met deze gegevens kunnen we de applicatie uitrollen:
 +
 +<code bash>
 +oc process -f ruby-nginx.yml \
 + -p SOURCE_REPOSITORY_URL=git@github.com:​tsterk/​ror-sample.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, met name de installatie van Gems kan enige tijd duren.
 +
 +Met het commando ''​oc status''​ kan je zien of de deployment klaar is:
 +
 +<code bash>
 +
 +oc status
 +
 +In project hens-demo on server https://​master.chp.npohosting.nl:​443
 +
 +http://​ruby-demo.chp.npohosting.nl (svc/​ruby-nginx-svc)
 +  dc/​ruby-nginx deploys istag/​ruby-nginx:​latest <-
 +    bc/​ruby-nginx source builds git@github.com:​tsterk/​ror-sample.git on docker.io/​npohosting/​nginx:​latest ​
 +    deployment #1 deployed 2 minutes ago - 1 pod
 +
 +svc/​ruby-ruby-svc - 172.30.131.184:​3000
 +  dc/​ruby-ruby deploys istag/​ruby-ruby:​latest <-
 +    bc/​ruby-ruby source builds git@github.com:​tsterk/​ror-sample.git on docker.io/​npohosting/​ruby:​latest ​
 +    deployment #1 deployed 43 seconds ago - 1 pod
 +
 +</​code>​
 +
 +Wanneer deze klaar is kan de applicatie benaderd worden via de url http://​hens-demo.chp.npohosting.nl,​ mits dit DNS record natuurlijk bestaat en staat ingesteld naar het OpenShift cluster.
 +
 +===== 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]]
  
  • chp/handleiding/nginx-ruby.txt
  • Last modified: 2020/03/06 07:53
  • (external edit)