Nous allons découvrir dans cet article comment avoir un serveur clé en main, idéal comme machine virtuelle.
Installer et mettre à jour Ubuntu Server 12.10
Téléchargez Ubuntu Server 12.10 et installez le système à votre guise.
Pour ma part, j’ai fait l’installation dans une machine virtuelle Parallels 8 à partir de l’image disque Ubuntu officielle.
Afin d’accéder à la machine à distance, pensez à installer le serveur OpenSSH.
Ensuite, une mise à jour des paquets ne peut pas faire de mal.
Installer RVM
Pour installer RVM, une simple ligne de commande suffit.
curl -L get.rvm.io | bash -s stable |
Ensuite, chargez RVM.
source ~/.profile |
Puis activez RVM autolibs.
rvm autolibs enable |
Lancez RVM requirements afin de mettre à jour automatiquement votre système.
rvm requirements |
Installer Ruby
RVM permet d’installer plusieurs versions de Ruby sur une même machine. Nous allons donc installer la dernière en date : Ruby 2.0.0.
rvm install 2.0.0 |
Puis nous allons définir cette version comme version à utiliser par défaut.
rvm --default 2.0.0 |
Vérifiez l’installation. Vous devriez voir 2.0.0.
ruby --version |
Parfois, il faut se déconnecter et se reconnecter afin que RVM soit bien rechargé.
Installer RubyGems
Pour continuer d’utiliser RVM afin d’installer les gems Ruby, utilisez la commande suivante.
rvm rubygems current |
Installer Rails
Nous allons utiliser gems afin d’installer Rails dans sa dernière version (3.2 à ce jour)
gem install rails |
L’environnement Ruby on Rails est maintenant installé.
Il va maintenant falloir faire en sorte de pouvoir l’exécuter sur un serveur de production.
Installer Passenger
Passenger permet d’exécuter une application Rails au sein d’un serveur apache ou nginx.
gem install passenger |
Tant que la version 4.0 n’est pas stable, installez-la via la commande suivante.
gem install passenger --version 4.0.0.rc6 |
Installer nginx et son module Passenger
RVM permet de simplifier l’installation du serveur nginx et du module Passenger.
Tout d’abord, installez les bibliothèques nécessaires.
sudo apt-get install libcurl4-openssl-dev |
Ensuite, lancez l’assistant.
rvmsudo passenger-install-nginx-module |
Pressez « Entrer ».
Prenez le choix par défaut en tapant « 1″, puis pressez la touche « Entrer ».
Validez le répertoire par défaut.
Laissez le système faire la suite : ça peut durer une petit moment. (5-10 minutes)
Lancer automatiquement nginx au démarrage
Première étape : arrêter toute instance éventuelle de nginx.
sudo kill `cat /usr/local/nginx/logs/nginx.pid` |
Ensuite, éditez le fichier /etc/init.d/nginx
#! /bin/sh ### BEGIN INIT INFO # Provides: nginx # Required-Start: $all # Required-Stop: $all # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: starts the nginx web server # Description: starts nginx using start-stop-daemon ### END INIT INFO PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/opt/nginx/sbin DAEMON=/opt/nginx/sbin/nginx NAME=nginx DESC=nginx test -x $DAEMON || exit 0 # Include nginx defaults if available if [ -f /etc/default/nginx ] ; then . /etc/default/nginx fi set -e case "$1" in start) echo -n "Starting $DESC: " start-stop-daemon --start --quiet --pidfile /opt/nginx/logs/$NAME.pid \ --exec $DAEMON -- $DAEMON_OPTS echo "$NAME.\n" ;; stop) echo -n "Stopping $DESC: " start-stop-daemon --stop --quiet --pidfile /opt/nginx/logs/$NAME.pid \ --exec $DAEMON echo "$NAME.\n" ;; restart|force-reload) echo -n "Restarting $DESC: " start-stop-daemon --stop --quiet --pidfile \ /opt/nginx/logs/$NAME.pid --exec $DAEMON sleep 1 start-stop-daemon --start --quiet --pidfile \ /opt/nginx/logs/$NAME.pid --exec $DAEMON -- $DAEMON_OPTS echo "$NAME.\n" ;; reload) echo -n "Reloading $DESC configuration: " start-stop-daemon --stop --signal HUP --quiet --pidfile /opt/nginx/logs/$NAME.pid \ --exec $DAEMON echo "$NAME.\n" ;; *) N=/etc/init.d/$NAME echo "Usage: $N {start|stop|restart|force-reload}\n" >&2 exit 1 ;; esac exit 0 |
Rendez ce fichier exécutable.
sudo chmod +x /etc/init.d/nginx |
Mettez à jour les runlevels des scripts lancés au démarrage.
sudo /usr/sbin/update-rc.d -f nginx defaults |
Vous pouvez également ajouter /opt/nginx/sbin/ à votre PATH.
Ajoutez ensuite un utilisateur nginx à votre système.
sudo adduser --system --no-create-home --disabled-login --disabled-password --group nginx |
Redémarrez votre serveur pour être bien sûr que tout fonctionne.
Si vous vous connectez via un navigateur web à votre serveur, vous devriez être accueilli par le message « Welcome to nginx! ».
Liez votre serveur web à votre app
Si ce n’est déjà fait, installez NodeJS. Certaine dépendances sont nécessaires au bon fonctionnement de Rails (en particulier grâce à la bibliothèque Javascript V8).
sudo apt-get install nodejs |
Editez le fichier de configuration de nginx, /opt/nginx/conf/nginx.conf, en particulier la partie serveur :
server { listen 80; server_name demo.com; passenger_enabled on; root /var/www/app/public; } |
Créons le répertoire /var/www et positionnons-nous à sa racine.
sudo mkdir -p /var/www && cd /var/www && chmod -R 777 . |
Installons bundler.
gem install bundler |
Il ne reste plus qu’à créer l’app de test.
rails new app && cd app |
Pré-compilez les assets.
RAILS_ENV=production rake assets:precompile |
Accédez à votre serveur depuis un navigateur : vous arriverez sur l’écran d’accueil de Rails.
Initialiser un dépôt git
Nous allons supprimer le contenu de l’app de test sur le serveur pour réinitialiser le répertoire /var/www/app.
Depuis le répertoire /var/git/app.git (nouvellement créé), initialisons le dépôt git.
git init --bare |
Allons sur notre machine de développement.
Ajoutons le répertoire distant. (à personnaliser)
git remote add virtual ssh://ubuntu@192.168.1.39/var/git/app.git |
Envoyons le contenu du code sur le serveur.
git push virtual master |
Il vous suffit alors de cloner votre dépôt dans le répertoire /var/www/app et le tour est joué !
Si vous voulez faire plus simple…
Dans l’exemple d’aujourd’hui, vous avez vu la méthode « douloureuse » du déploiement Ruby on Rails. C’est formateur mais parfois indigeste.
Si vous n’avez pas trop de temps à perdre, passez par des solutions plus simples et au moins aussi efficaces telles que Heroku.
