13/02/2020

Transformer sa Freebox Delta en serveur Ruby on Rails

Rails
Server
Freebox

Avec l'apparition de la gestion des VMs dans la dernière version majeure de freeboxOS (4.1), il devient tout à fait envisageable de transformer son serveur FreeBox Delta en un petit serveur Rails qui vous rendra bien des services.

L'investissement initial est mimimum; une barrette de 8Go (environ 35€)
Crucial CT8G4SFS824A 8Go (DDR4, 2400 MT/s, PC4-19200, Single Rank x8, SODIMM, 260-Pin). On pourra ensuite ajouter un disque dur supplémentaire pour activer le mode RAID et ainsi avoir un mimium de sécurité sur le stockage.

Une fois la barrette installée, il suffit d'aller sur http://mafreebox.freebox.fr, puis dans VMs pour commencer la création du serveur.

Créer une VM

Dans VMs, choisissez 'Ajouter une VM', placez le curseur CPU sur 2 et augmentez la quantité de RAM à son maximum.

Cochez 'Choisir un système d'exploitation pré-installé', puis 'Ubuntu 20'. Il faut ensuite coller votre clé publique qui se trouve dans .ssh/id_rsa.pub. Si vous n'en vez pas, créez en une avec ssh-keygen.

Une fois la nouvelle VM créée, il faut aller dans 'Réseau' pour créer un bail statique pour cette nouvelle VM. Une adresse IP sera proposée, il suffit de valider.

Se connecter à la VM

Si la VM démarre correctement (vous pouvez voir les messages de boot en activant la 'console') pour devriez pouvoir vous connecter comme suit:

$ ssh freebox@192.168.0.45

Installer Rails et ses pré-requis

Pour installer Rails, procédez de la manière habituelle:

Mise à jour des paquets ~~~~ $ sudo apt-get update $ sudo apt-get upgrade ~~~~

NodeJS

Installation de ce complément devenu indispensable, NodeJS

$ sudo bash nodesource_setup_10.sh $ curl -sL https://deb.nodesource.com/setup_10.x -o nodesource_setup.sh $ sudo bash nodesource_setup.sh $ sudo apt-get install nodejs $ nodejs -v

Ruby 2.6

Ici on installe Ruby depuis les sources. Ce n'est pas le plus simple mais c'est plus économique et optimisé. On peut préférer l'installation de RVM, le gestionnaire de versions de Ruby. A vous de voir.

$ curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add - $ echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list $ sudo apt update && sudo apt install yarn $ sudo apt-get install autoconf bison build-essential libssl-dev libyaml-dev libreadline-dev zlib1g-dev libncurses5-dev libffi-dev libgdbm-dev libsqlite3-dev $ wget https://cache.ruby-lang.org/pub/ruby/2.6/ruby-2.6.0.tar.gz $ tar -xzvf ruby-2.6.0.tar.gz $ cd ruby-2.6.0/ $ ./configure $ make $ sudo make install $ ruby -v

Rails 6.0

$ sudo gem install rails

Unicorn

$ mkdir RailsApps $ cd RailsApps/ $ rails new testapp $ cd testapp/ $ sudo gem install unicorn $ nano config/unicorn.rb

le fichier unicorn.rb doit ressembler à ça:

# set path to the application app_dir = File.expand_path("../..", __FILE__) shared_dir = "#{app_dir}/shared" working_directory app_dir # Set unicorn options worker_processes 2 preload_app true timeout 30 # Path for the Unicorn socket listen "#{shared_dir}/sockets/unicorn.sock", :backlog => 64 # Set path for logging stderr_path "#{shared_dir}/log/unicorn.stderr.log" stdout_path "#{shared_dir}/log/unicorn.stdout.log" # Set proccess id path pid "#{shared_dir}/pids/unicorn.pid"

Maintenant il faut créer quelques répertoires qui seront utiles plus tard ~~~~ $ mkdir -p shared/pids shared/sockets shared/log ~~~~

NGINX

$ sudo apt-get install nginx $ sudo nano /etc/nginx/nginx.conf $ sudo rm /etc/nginx/sites-enabled/default $ sudo nano /etc/nginx/sites-available/testapp

le fichier testapp doit contenir la configuration de site comme suit:

server { listen 80; server_name testapp.philnoug.com; root /home/freebox/RailsApps/testapp; try_files $uri/index.html $uri @rails; location @rails { proxy_pass http://rails; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_redirect off; } error_page 500 502 503 504 /500.html; client_max_body_size 4G; keepalive_timeout 10; }

On peut maintenant activer le site et relancer Nginx

$ sudo ln -s /etc/nginx/sites-available/testapp /etc/nginx/sites-enabled $ sudo service nginx restart

$ cd RailsApps/testapp/ $ sudo unicorn -c config/unicorn.rb -E development -D

Et voilà ! Chapeau bas si vous êtes arrivé jusque là ! Bravo :o)

PS: Notez que si voulez que votre site soit accesible depuis internet, il va vous falloir une IP fixe V4. Heureusement chez Free il suffit d'en faire la demande depuis le portail Free, rubrique 'Mon compte'.