Comment installer Rails sur un serveur FreeBSD ?

Ceux qui voudraient s’émanciper du noyau Linux et goûter à d’autres variétés d’Unix, tout en restant sur PC, ont la possibilité d’installer FreeBSD sur une machine virtuelle (VirtualBox) pour s’essayer à cet Unix très performant, sécurisé, et, finalement, pas si compliqué à utiliser.

La première chose à faire est de télécharger l’ISO depuis le site officiel, puis de créer une nouvelle machine virtuelle et de booter sur l’ISO.

Une fois FreeBSD démarré, choisissez de l’installer sur le disque de votre machine virtuelle. Ne vous posez pas trop de questions lorsque qu’il s’agit de choisir un bootloader, un format de fichier, etc; les choix proposés par défaut sont parfaits pour une utilisation classique.

Une fois connecté en tant qu’utilisateur root créé, on peut commencer l’installation des paquets nécessaires au fonctionnement de Ruby on Rails, à savoir Ruby, Sqlite3, NodeJS, etc…

RUBY ON RAILS


$ pkg install rubygem-puma

$ pkg install rubygem-sqlite

$ pkg install node

$ gem install bundler

$ gem install rails

$ rails new testapp

$ rake db:migrate

$ rails c  

$ rails s -b IP ou 0.0.0.0

Vérifier que Rails fonctionne en allant sur http://ip:3000

Celebrate !

APACHE PASSENGER

$ pkg install rubygem-passenger-apache-5.3.5

Une fois passenger installé, il faut modifier la configuration de Apache pour activer Passenger

$ apachectl -V

HTTPD_ROOT = "/usr/local"

SERVER_CONFIG_FILE = "etc/apache24/httpd.conf"

$ ee /usr/local/etc/apache24/httpd.conf"

LoadModule passenger_module /usr/local/lib/ruby/gems/2.4/gems/passenger-5.3.5/buildout/apache2/mod_passenger.so

PassengerRoot /usr/local/lib/ruby/gems/2.4/gems/passenger-5.3.5

PassengerRuby /usr/local/bin/ruby24

  • uncomment la ligne qui active les VistualHosts

VirtualHost

Ajoutez “apache24_enable=”YES” au fichier /etc/rc.conf (le créer s’il n’existe pas) et redémarrez

$ apachectl restart

Virtual hosts :

Chaque application Rails doit être connue d’Apache. Cette déclaration se fait dans le fichier httpd-vhosts

$ ee /usr/local/etc/apache24/extra/httpd-vhosts.conf

Une configuration classique :

<VirtualHost *:80>

    ServerName bornes-test.philnoug.com

    ServerAdmin philippe.nougaillon@gmail.com

    DocumentRoot /root/rubys/test/bornes/public/

    SetEnv SECRET_KEY_BASE "0123456789"

    <Directory /root/rubys/test/bornes/public >

        AllowOverride all

        Options -MultiViews

        Require all granted

    </Directory>

</VirtualHost>

Si le serveur rails ne veut pas se lancer en objectant une erreur “getaddrinfo”, vous devrez associer votre addresse IP locale à un nom d’hôte, comme suit :

$ ee /etc/hosts

127.0.0.1 freebsd  freebsd.philnoug.com

10.0.2.14 freebsd  freebsd.philnoug.com

Il faut aussi donner un nom à la machine en utilisant la commande hostname

$ hostname -d freebsd.philnoug.com

SSL

Il est temps maintenant de mettre en place l’accès aux applications via https:/ Le plus simple est d’utiliser les services de “Let’s Encrypt”, à savoir le certbot qui va nous simplifier la tâche.

$ pkg install py27-certbot

Avant de pouvoir créer les certificats il faut demander à Apache de prendre en charge la gestion de SSL au moyen d’un module “mod_ssl qu’il suffit d’activer dans le fichier de configuration Apache (dé-commentez la ligne LoadModule mod_ssl …)

$ ee /usr/local/etc/apache24/httpd.conf

Puis activez TTLS en créant ce fichier :

$ ee /usr/local/etc/apache24/modules.d/020_mod_ssl.conf

Listen 443

SSLProtocol ALL -SSLv2 -SSLv3

SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5

SSLPassPhraseDialog  builtin

SSLSessionCacheTimeout  300

Avant de se lancer dans la création du certificat, vérifiez les points suivants :

Le virtual host non HTTPS pour lequel nous allons créer le certificat doit exister dans /usr/local/etc/apache24/extra/httpd-vhosts.conf

Le host(ServerName) ne doit pointer que vers le serveur sur lequel on lance la création du certificat (supprimer les autres pointages éventuels)

Apache doit être stoppé :
$ apachectl stop

Pour créer le certificat, lancez la commande suivante :

$ certbot certonly --standalone -d sousdomaine.domaine.com

En retour, vous devriez obtenir le message suivant

  • Congratulations! Your certificate and chain have been saved at:

    /usr/local/etc/letsencrypt/live/sousdomaine.domaine.com/fullchain.pem

    Your key file has been saved at:

    /usr/local/etc/letsencrypt/live/sousdomaine.domaine.com/privkey.pem

    Your cert will expire on 2019-03-05. To obtain a new or tweaked

    version of this certificate in the future, simply run certbot

    again. To non-interactively renew all of your certificates, run

    “certbot renew”

Modifiez maintenant le virtual host pour qu’il écoute le port 443

$ ee /usr/local/etc/apache24/extra/httpd-vhosts.conf

<VirtualHost *:443>

    ServerName sousdomaine.domaine.com

    ServerAdmin philippe.nougaillon@gmail.com

    DocumentRoot /root/rubys/sousdomaine.domaine.com/public/

    SetEnv SECRET_KEY_BASE "YOURKEY"

    SSLCertificateFile "/usr/local/etc/letsencrypt/live/sousdomaine.domaine.com/cert.pem"

    SSLCertificateKeyFile "/usr/local/etc/letsencrypt/live/sousdomaine.domaine.com/privkey.pem"

    SSLCertificateChainFile "/usr/local/etc/letsencrypt/live/sousdomaine.domaine.com/fullchain.pem"


    <Directory /root/rubys/sousdomaine.domaine.com/public>

        AllowOverride all

        Options -MultiViews

        Require all granted

    </Directory>

</VirtualHost>

La configuration étant terminée, on peut relancer Apache pour vérifier que tout se passe bien :

$ apachectl restart

Pour voir si https est en écoute sur le port 443

$ sockstat -4 | grep http

Si tous les voyants sont au vert, on pourra maintenant accéder aux applications Rails via http://sousdomaine.domaine.com et surtout via https://sousdomaine.domaine.com

Vous pouvez utiliser la commande curl pour récupérer le contenu (code source) de la home page de votre application

$ curl https://sousdomaine.domaine.com

ou bien, si vous ne souhaitez pas voir le code source mais votre homepage en mode texte, utilisez lynx

$ lynx https://sousdomaine.domaine.com

Notez qu’il existe pléthore de paquets Linux installables sur FreeBSD. Pour savoir si le paquet que vous cherchez est disponible, allez sur la page FreeBSD Ports Search