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.

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,

#!/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

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:

#!/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:

  • 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:

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.

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

  • chp/handleiding/nginx-ruby.txt
  • Last modified: 2019/07/11 08:01
  • (external edit)