Dreamisle.net Blog

Java, Rails, Security and so many ...

Applications Rails en Production Avec Nginx Et Unicorn Et Déployée Avec Capistrano

| Comments

Un peu d’infra aujourd’hui! Tout d’abord un grand merci à Bertrand Paquet de m’avoir formé à ces outils.


Pour faire tourner une application rails en production, on utilise souvent le duo passenger/apache. Personnellement j’ai lâché apache depuis longtemps pour Nginx. On ne va pas rentrer dans le débat du pourquoi mais essentiellement car Nginx est plus léger et plus performant.

Du coup pour mes applications rails j’utilisais le module nginx passenger. Sauf que celui ci est plein de bugs et très gourmand en ressources. La solution : unicorn.

Unicorn est un serveur rails léger pouvant être en écoute sur une socket unix. L’idée est donc de faire en sorte que Nginx et Unicorn communiquent à travers une socket unix. Un autre avantage du duo unicorn/nginx est qu’il permet d’heberger des applications rails sur autre chose que la racine d’un nom de domaine (par exemple dreamisle.net/monappli), hors avec passenger c’est très compliqué à faire.

Mais voyons un peu un exemple, admettons que je souhaite héberger une application Rails sur /monappli dans sur l’url mesapplis.dreamisle.net.

Nginx

Voyons déjà la configuration Nginx

La partie interessante se situe dans le location /monappli. L’idée ici est que si nginx ne trouve pas le fichier demandé, il forward la requête sur la socket unix. la déclaration de la socket unix en haut du fichier de configuration est tout ce qu’il y a de plus classique.

Unicorn

Site officiel d’unicorn :

Unicorn est en fait une commande shell pour lancer un serveur rails que l’on configure via un script ruby. Configurons maintenant Unicorn.

Script de configuration unicorn

Celui-ci se configure via un script ruby. Voici un exemple de configuration.

Script de lancement d’unicorn

Notez le RAILS_RELATIVE_ROOT_URL qui indique à unicorn l’url relative utilisée.

Capistrano

Capistrano est un outil de gestion de déploiement distribué. L’idée est de pouvoir depuis son poste local, taper “cap deploy” pour deployer l’application en production. Capistrano peut aussi être utilisé en mode multistage pour utiliser plusieurs serveurs/environnements différents pour déployer. Je vous invite à découvrir l’outil ici : Capistrano. Ce fichier nommé deploy.rb doit être placé dans le repertoire config/ de votre application rails. Il vous permettra une fois la gem install (gem install capistrano), de lancer en local “cap deploy” pour déployer.

Si vous n’utilisez pas RVM il faut bien entendu supprimer tous les appels à celui-ci.

Comments