philnoug@home:~$

Transformer sa Freebox Delta en serveur Ruby on Rails

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 pour commencer est mimimum, une barrete 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 barette installée, il suffit d’aller dans mafreebox.freebox.fr, puis dans VMs pour commencer la création du serveur.

Créer une VM

Dans VMs, choissisez ‘Ajouter une VM’, placer le curseur CPU sur 2 et augmenter 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éer 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, procedez comme de la manière habituelle:

$ sudo apt-get update $ sudo apt-get upgrade

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

$ 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 resembler à ç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"

$ 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;
}

$ 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à !

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/ mon compte.