Feb88b7eea9daa5b90f6051418732235
Jules Welsch
28 nov. 2013

Configurer un serveur DigitalOcean pour accueillir Rails 4 (avec RVM, MySQL, Puma et Nginx)

Capture d%e2%80%99%c3%a9cran 2013 11 28 %c3%a0 10.44.11

Postulat

  • Ce tuto est rédigé pour les utilisateurs de Mac OS
  • Vous voulez créer le site mon-super-site.com
  • Votre application Rails s'appelle mon_super-site
  • Vous avez un compte Digital Ocean
  • Vous avez créé un Droplet DigitalOcean (serveur VPS) avec Ubuntu 12.04 (x64) comme image
  • Vous avez reçu par mail l'adresse IP de votre serveur. Nous poserons dans cet exemple que l'IP est 123.456.7.8
  • Vous avez lié votre clé publique SSH avec votre compte DigitalOcean pour accéder avec votre serveur via Terminal

Dépôt du nom de domaine mon-super-site.com

La première chose à faire est de déposer votre nom de domaine. Personnellement j'utilise souvent 1and1.com pour faire ce dépôt, mais il existe des tas de fournisseurs! Libre à vous de choisir le votre en fonction de vos besoins!

Gardez à l'esprit qu'il y a 3 principales caractéristiques qui doivent rentrer en compte dans votre choix

  • l'extension : .fr - .com - .immo - .tv Tous les fournisseurs n'offrent pas les mêmes extensions. Par exemple si vous utilisez un fournisseur américain, il est peu probable qu'il vous offre la possibilité de déposer un .paris ou .sarl...

  • l'hébergement : La quasi totalité des fournisseurs de noms de domaine proposent des solutions d'hébergement allant du simple serveur mutualisé à quelques euros par mois au serveur VPS performant coutant plusieurs centaines d'euros par mois. Dans ce tuto, nous allons choisir d'utiliser un serveur VPS sur DigitalOcean pour héberger notre site.

  • le service de mail : Comme pour les hébergements les fournisseurs de nom de domaines proposent des outils plus ou moins performants pour la gestion des mails allant avec votre nom de domaine. Nous ne configurerons pas la gestion des mails dans ce tuto. Je vous conseille de ne pas utiliser les services proposés par votre fournisseur de nom de domaine mais d' externaliser la gestion des mails (Google Mail par exemple).

Gestion des DNS (sur votre fournisseur de nom de domaine)

Quelque soit votre choix de fournisseur, il y a toujours la possibilité de rediriger votre nom de domaine vers un autre serveur. Ici nous allons le rediriger vers les serveurs de DigitalOcean.

Cliquez sur l'édition des réglages DNS de mon-super-site.com et réglez les tels que

DNS SETTINGS Custom
Name server 1 ns1.digitalocean.com
Name server 2 ns2.digitalocean.com
Name server 3 ns3.digitalocean.com

La propagation des DNS peut prendre plusieurs heures en fonction de votre fournisseur...

Gestion des DNS (sur DigitalOcean)

À l'heure actuelle quand vous tapez mon-super-site.com dans votre navigateur, le nom de domaine pointe sur les serveurs de DigitalOcean mais DigitalOcean ne sait pas encore que c'est sur votre serveur que le nom doit être dirigé.

Dans le menu d'administration de DigitalOcean

  • Cliquez sur 'DNS', puis sur 'Add Domain'
  • Entrez mon-super-site.com comme 'name' et entrez 123.456.7.8 comme 'IP' puis cliquez sur 'create domain'

La propagation des DNS sur DigitalOcean prends un vingtaine de minutes.

Facultatif : Réglage des 'reccords' pour la gestion des sous-domaines

De nos jours, avoir un bon référencement est une chose primordiale pour un site internet. Il est de plus en plus courant d'articuler les différents parties de son site autour des sous-domaines. Dans l'état actuelle, seul le domaine principale pointe sur le serveur.

Il est facilement possible d'indiquer par vos réglages DNS que vous voulez utiliser des sous-domaines. Dans notre exemple, nous voulons gérer le sous-domaine www www.mon-super-site.com mais aussi un sous domaine blog blog.mon-super-site.com.

Cliquer sur 'Add Record'

  • Sélectionnez un record de type 'CNAME'
  • Entrez www comme 'name' et @ comme 'hostname'

Pour la création du sous domaine blog, il faut créer un nouveau 'Record'.Cliquez sur 'Add Record'

  • Sélectionnez un record de type 'A'
  • Entrez blog comme 'hostname' et 123.456.7.8 comme 'IP'

Configuration du serveur

Connexion ssh au serveur

Si vous avez correctement ajouté votre clé SSH à votre compte DigitalOcean, vous pouvez vous connecter à votre serveur via la commande suivante

ssh root@123.456.7.8

Packages utiles

Afin de pouvoir manager correctement votre serveur, vous aurez besoin de quelques packages très utiles :

  • git pour la gestion des versions de votre application
  • curl pour installer des packages via les commandes curl
  • vim pour pouvoir éditer facilement des fichiers textes à travers votre Terminal
  • python (utile pour l'installation de Nginx)
  • screen pour pouvoir créer des 'onglets' à la volée sur votre serveur
apt-get update
apt-get install git-core curl vim python-software-properties screen
apt-get update

TIPS: Dans Terminal tapez cmd+k pour effacer le contenu de l'écran

Remplacement de bash par ZSH/oh-my-zsh(Facultatif!)

J'ai pris l'habitude d'utiliser ZSH et oh-my-zsh sur mes serveurs et sur mon Mac. Mais c'est vraiment un choix personnel. Il est principalement motivé par le fait qu'il existe des thèmes pour oh-my-zsh! et que c'est vraiment plus sympa d'avoir un thème cool quand on passe plusieurs heures par jour sur le terminal. Si vous n'êtes pas intéressé par la customisation de votre terminal, vous pouvez passer cette section.

apt-get install zsh
sudo chsh -s $(which zsh) $(whoami)
exit
ssh root@ 123.456.7.8
#le Shell est en place
curl -L https://github.com/robbyrussell/oh-my-zsh/raw/master/tools/install.sh | sh
exit
ssh root@ 123.456.7.8
#oh-my-zsh est en place

Pour changer le thème de oh-my-zsh

vim ~/.zshrc
#Tapez i pour renter en mode insert puis changez le thème theme ->ZSH_THEME="nebirhos"
#Tapez Escape puis :wq (pour sauvergarder et quitter)

RVM : Ruby 2.0.0, Rails4

Ruby Version Manager (RVM) est un outil en ligne de commande qui permet d'installer et de travailler facilement avec plusieurs environnements Ruby. Chaque environnement se compose d'un interpréteur Ruby et d'un ensemble de gems.

sudo \curl -L https://get.rvm.io | bash -s stable --ruby=2.0.0
source /usr/local/rvm/scripts/rvm
rvm gemset create mon-super-site
rvm use ruby-2.0.0-p353@mon-super-site --default
gem install rails --no-rdoc --no-ri

TIPS : rvm list # permet de lister et de voir la version de ruby : ici ruby-2.0.0-p353

MySQL

apt-get install mysql-server mysql-client libmysqlclient-dev

TIPS : Choisissez un mot de passe sécurisé mais notez le quelque part!!!

À partir de cette étape, vous êtes capable de vous connecter à votre base de données. J'utilise le logiciel gratuit Sequel Pro.
Choisissez l'onglet SSH et connectez vous avec les données suivantes

SEQUEL PRO SSH
Hôte MYSQL 127.0.0.1
Utilisateur root
Mot de passe your_password
Base
Port
Hôte SSH 123.456.7.8
Utilisateur SSH root
Clé SSH ~/.ssh/id_rsa.pub
Port SSH

JavaScript Runtime

Pour fonctionner correctement, Rails a besoin d'un moteur Javascript. Pour une application Rails, le plus simple est d'installer Node.js

apt-get install nodejs

Imagemagick

ImageMagick est très utile pour le travail sur les images. C'est une bonne chose de penser à l'installer sur son serveur dès le début

sudo apt-get install imagemagick

NGINX (1.4.x)

cd /etc/apt
vim sources.list
#Tapez i pour renter en mode 'insert'
#Placez vous à la fin du texte et ajoutez la ligne
#deb http://nginx.org/packages/ubuntu/ precise nginx
#Tapez Escape puis :wq (pour sauvergarder et quitter)
deb http://nginx.org/packages/ubuntu/ precise nginx

Ajouter la clé du serveur de Nginx comme clé sûre

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys ABF5BD827BD9BF62
sudo apt-get update
sudo apt-get install nginx
nginx -v # 1.4.x
sudo service nginx start

TIPS:

  • sudo service nginx stop => stop Nginx
  • sudo service nginx retart => rédmarre Nginx
  • sudo service nginx status => donne l'état de Nginx

Voila c'est presque fini!
Si vous vous rendez sur mon-super-site.com, vous devriez arriver sur une page 'Welcome to Nginx'. Tout fonctionne correctement

Configuration Nginx

Configuration générale de Nginx

cd /etc/nginx
vim nginx.conf (vous pouvez laisser la configuration par défaut)

Configuration de votre site sur Nginx

cd /etc/nginx/conf.d
vim default.conf
upstream mon-super-site {
server unix:///var/run/super-site-sock.sock;
}

server {
listen 123.456.7.8:80;
server_name *.mon-super-site.com;

#charset koi8-r;
access_log /var/log/nginx/nginx.access.log main;
error_log /var/log/nginx/nginx.error.log info;


location = /robots.txt {
root /srv/apps/mon-super-site/current/public;
}

location = /500.html {
root /srv/apps/mon-super-site/current/public;
}

location ~ ^/(assets)/ {
root /srv/apps/mon-super-site/current/public;
expires max;
add_header Cache-Control public;
}

location / {
root /srv/apps/smon_super_site/current/public;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
# rewrite ^ $scheme://mon-super-site.com permanent;

if (-f $request_filename) {
break;
}

if (!-f $request_filename) {
proxy_pass http://mon-super-site;
break;
}
}
}

Il ne reste plus qu'à redémarrer Nginx

sudo service nginx restart

Vous devriez tomber sur une page '502 Bad Gateway', si vous visitez votre site.
Votre serveur est prêt à recevoir votre application Rails


0 commentaire