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.
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:
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
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,
#!/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
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:
#!/bin/sh echo "# Starting rails server..." exec rackup -p /tmp/rack-custom.pid --host 0.0.0.0 --port 3000
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:
oc create secret generic git-secret \ --from-file=ssh-privatekey=/home/tim/.ssh/openshift-keys/ror-sample \ --type=kubernetes.io/ssh-auth
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:
my-app).registry.npohosting.nl/npohosting/nginx) die gebruikt gaat worden (Default: latest).registry.npohosting.nl/npohosting/ruby) die gebruikt gaat worden (Default: latest).git-secret).Met deze gegevens kunnen we de applicatie uitrollen:
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 -
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:
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
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.
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