Installer un serveur web sous Raspberry Pi pour RoR sous Apache

Voici un tutoriel expliquant comment installer sur une Raspberry Pi un serveur Apache permettant de faire tourner Ruby on Rails grâce à Phusion Passenger. Ces commandes doivent être exécutées sur la Pi (directement avec un clavier branché en USB ou alors en SSH). Cette installation a été réalisée sous Raspbian, un OS dérivé de Debian pour Raspberry Pi.

Installation des prérequis

Nous aurons besoin de cURL afin de télécharger les binaires à installer, ainsi que de NodeJS pour satistaire le JavaScript runtime voulu par Rails.

Exécutez donc ces commandes :

$ sudo apt-get install curl libcurl4-openssl-dev #install curl
$ sudo apt-get install nodejs #install nodejs

Installons aussi Apache dès maintenant avec les dépôts dev (nécessaires lors de l’installation de Passenger).

1
$ sudo apt-get install apache2 apache2-mpm-prefork apache2-prefork-dev

Installation de Ruby

Nous avons besoin d’installer Ruby, cette étape peut prendre un peu de temps sur votre Pi, surtout si vous n’avez pas une carte SD de classe 10. Afin de lancer l’installation :

$ curl -L https://get.rvm.io | bash -s stable --ruby
$ source /home/pi/.rvm/scripts/rvm #permet de commencer à utiliser RVM dans le shell actuel

Installation de Passenger

Passenger est un module compatible sur les serveurs http Apache et ngix. Il va nous permettre d’exécuter des applications Ruby on Rails. Nous allons passer par RubyGems, un gestionnaire de package, un peu de la même manière que Nuget. Pour cela, lancez la commande suivante afin de récupérer les fichiers à installer :

$ gem install passenger

Une fois les fichiers récupérés, nous pouvons lancer l’installation par le biais de la commande suivante :

$ passenger-install-apache2-module

Celle-ci va d’abord réaliser un ensemble de vérifications pour que l’installation se déroule correctement. Si un package est manquant, l’installeur vous le signalera avant que l’installation à proprement parlé ne commence. Une fois finie, vous devez éditer votre configuration de Apache. Pour cela, nous allons créer un fichier .load et un .conf dans le dossier des modules Apache : /etc/apache2/mods-enabled/.

Le fichier .load :

sudo nano /etc/apache2/mods-enabled/passenger.load

Et insérez-y cette ligne :

LoadModule passenger_module /home/pi/.rvm/gems/ruby-2.0.0-p247/gems/passenger-4.0.21/buildout/apache2/mod_passenger.so

Le fichier .conf :

sudo nano /etc/apache2/mods-enabled/passenger.conf

Insérez-y ces 2 lignes :

PassengerRoot /home/pi/.rvm/gems/ruby-2.0.0-p247/gems/passenger-4.0.21
PassengerDefaultRuby /home/pi/.rvm/wrappers/ruby-2.0.0-p247/ruby

Afin de prendre en compte la nouvelle configuration de Apache, on redémarre ce dernier :

$ sudo /etc/init.d/apache2 restart

Installation de Rails

Il ne nous reste maintenant plus qu’à installer Rails avant de pouvoir enfin démarrer la création de notre application. Pour cela, lancer cette commande (celle-ci peut prendre un peu de temps) :

$ gem install rails --no-ri --no-rdoc

Rails est installé, nous pouvons créer notre application. Nous allons la mettre dans le dossier /var/www/. Afin de créer une nouvelle application, voici la commande à exécuter (app est le nom de notre application) :

$ rails new app

Cela a créé un dossier app/ sur lequel nous allons changer les droits afin qu’Apache puisse exécuter notre application :

$ sudo chmod -R 755 app/

Dernière étape, modifier la configuration Apache afin d’ajouter un VirtualHost, c’est à dire notre site. Pour cela, ajoutez un fichier dans sites-enabled d’Apache (le nom du fichier peut être différent, ici nous l’avons également appelé app mais toto ferait parfaitement l’affaire) :

$ sudo nano /etc/apache2/sites-enabled/app

Dans celui-ci nous ajoutons notre VirtualHost en faisant pointer le DocumentRoot vers le dossier public de notre application :

<VirtualHost *:80>
    ServerName app
    DocumentRoot /var/www/app/public
    <Directory /var/www/app/public>
        Allow from all
        Options -MultiViews
    </Directory>
</VirtualHost>

On redémarre Apache afin de prendre une nouvelle fois notre configuration en compte :

$ sudo /etc/init.d/apache2 restart

En se rendant sur notre navigateur à l’IP de notre Pi, voici le résultat :

app

Et oui, il s’agit de la page 404 de Rails. Mais cela est normal, aucune route ne pointe encore vers la page d’index. Dans le dossier de notre application /var/www/app/, ajoutons un contrôleur grâce à la commande suivante :

$ rails generate controller home index

Rendez-vous sur http://votreip/home/index/, et vous aurez si tout s’est bien passé le résultat par défaut suivant :

app