Ruby on Rails est un framework web populaire pour Ruby qui a été développé pour augmenter la productivité d'un programmeur. Cependant, faire fonctionner ensemble diverses gemmes et dépendances peut parfois être difficile. Ce guide vous aidera à configurer un environnement Rails complet prêt pour la production, y compris les gemmes et les dépendances couramment utilisées.
Exigences
- Instance Vultr avec au moins 512 Mo de RAM (1024 Mo de préférence).
- Instance Vultr exécutant Ubuntu 17.04.
Pile utilisée dans ce guide
- Nginx : un serveur web rapide et puissant. (ver 1.10.3)
- Passenger : un serveur d'application qui aidera Nginx à servir votre application Ruby. (ver 1.5.1.8)
- Rbenv : un gestionnaire de version Ruby. (ver 1.1.1-2)
- Ruby : (ver 2.4.1)
- MariaDB : une branche open source du serveur MySQL (ver 10.2)
- Certificat SSL de Let's Encrypt
Installation
Ajouter un utilisateur Sudo
Remarque : Il est fortement recommandé de ne pas installer l'un de ces services en tant que root, car vous pourriez vous exposer à une attaque. La configuration d'un utilisateur deploy
ou app
est une convention courante:
sudo adduser deploy
sudo adduser deploy sudo
su deploy
Système de mise à jour et de mise à niveau
Assurez-vous que vous exécutez tous les derniers packages sur votre machine virtuelle Ubuntu:
sudo apt-get update && sudo apt-get upgrade -y
Installer le système de construction
Afin de pouvoir compiler Ruby en utilisant rbenv et d'autres gemmes, divers packages doivent être installés. Selon la version de Ruby dont vous aurez besoin, certains packages peuvent ne pas être nécessaires.
Compilation
sudo apt-get install -y curl zlib1g-dev build-essential libssl-dev libreadline-dev libyaml-dev
sudo apt-get install -y libsqlite3-dev sqlite3 libxml2-dev libxslt1-dev libcurl4-openssl-dev
sudo apt-get install -y python-software-properties libffi-dev
sudo apt-get install -y build-essential openssl libreadline6 libreadline6-dev libreadline-dev
sudo apt-get install -y automake libtool bison pkg-config bison autoconf libc6-dev ncurses-dev
sudo apt-get install -y libapr1-dev libaprutil1-dev libx11-dev libffi-dev tcl-dev tk-dev
Packages pour le support SSL
Ceux-ci sont nécessaires pour compiler plusieurs gemmes, telles que Passenger:
sudo apt-get install -y zlib1g zlib1g-dev libssl-dev libyaml-dev libcurl4-openssl-dev libruby
Versioning
La communauté Ruby utilise Git comme SCM de choix; mais d'autres, comme Mercurial ou Subversion, peuvent également être installés:
sudo apt-get install -y git git-core
Pilotes de base de données pour MySQL / MariaDB
sudo apt-get install -y libmysqld-dev mysql-client libmysqlclient-dev
Nokogiri
Requis pour plusieurs gemmes populaires qui nécessitent des bibliothèques XML natives:
sudo apt-get install -y libxml2-dev libxslt-dev
Node.js
Ajoutez des référentiels officiels à partir de Node avec la dernière version car les référentiels Ubuntu par défaut ont tendance à être à la traîne par rapport à quelques versions majeures:
curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
sudo apt-get install -y nodejs
Forfaits optionnels
Ces packages ne sont pas requis pour que le système fonctionne, mais ils sont utiles si vous devez utiliser certaines gemmes.
Graphiques et images
Ces bibliothèques ne sont pas nécessaires et peuvent être ignorées sauf si vous prévoyez d'utiliser des gemmes de manipulation d'image; comme Rmagick:
sudo apt-get install -y imagemagick libmagickwand-dev libvips-dev
Pilotes de base de données pour SQLite et PostgreSQL
Installez les pilotes pour SQLite ou PostgreSQL si vous devez vous connecter à d'autres bases de données ou préférez une base de données locale simple:
sudo apt-get install -y libsqlite3-dev sqlite3 libpq-dev postgresql postgresql-contrib
Outils
Utilitaires qui ne sont normalement pas préinstallés lors d'une nouvelle installation d'Ubuntu. N'hésitez pas à installer l'éditeur de texte de votre choix:
sudo apt-get install -y iotop htop nano vim
Installer le serveur MariaDB
MariaDB est un serveur SQL relationnel puissant, entièrement compatible avec MySQL. La façon la plus simple d'installer la dernière version de MariaDB est d'utiliser les dépôts officiels:
sudo apt-get install software-properties-common
sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8
sudo add-apt-repository 'deb [arch=amd64,i386] http://ftp.utexas.edu/mariadb/repo/10.2/ubuntu zesty main'
sudo apt update
sudo apt install -y mariadb-server
Suivez les invites et configurez un mot de passe root. Après, vérifiez que vous pouvez accéder à votre nouvelle installation:
mysql -V
Il affichera une ligne similaire à celle-ci:
mysql Ver 15.1 Distrib 10.2.8-MariaDB, for debian-linux-gnu (x86_64) using readline 5
Connectez-vous au shell MySQL:
mysql -h localhost -u root -p
Remarque : utilisez \q
pour quitter.
Installer Rbenv et Ruby
Rbenv
Installez Rbenv en utilisant git. Il s'agit de la méthode d'installation la plus simple et elle permet des mises à jour faciles plus tard. Installez également ruby-build
, il est responsable de la compilation des différentes versions de Ruby:
cd
git clone https://github.com/rbenv/rbenv.git ~/.rbenv
git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build
Remarque : lorsque vous devez mettre à jour simplement cd ~/.rbenv
et git pull
.
Rendez Rbenv et Ruby-build disponibles dans le shell. Pour vous assurer que les lignes d'exportation sont insérées au début du .bashrc
fichier, ce qui est important pour les commandes bash non interactives, utilisez ces lignes:
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.temp_bashrc
echo 'eval "$(rbenv init -)"' >> ~/.temp_bashrc
echo 'export PATH="$HOME/.rbenv/plugins/ruby-build/bin:$PATH"' >> ~/.temp_bashrc
cat ~/.temp_bashrc ~/.bashrc > ~/.combined_bashrc && mv ~/.combined_bashrc ~/.bashrc && rm ~/.temp_bashrc
exec $SHELL
Vérifiez si Rbenv et Ruby-build sont installés et sont disponibles dans le shell:
rbenv install --list
Si rbenv
n'est pas reconnu, déconnectez-vous et reconnectez-vous dans le shell.
Créez un ~/.bash_profile
fichier et pointez-le vers la source de votre ~/.bashrc
fichier. Si vous devez exécuter des commandes shell non interactives à partir de votre application Rails, telles que les tâches cron configurées par la whenever
gemme, elle utilisera la même version de Ruby que votre shell interactif. Cela peut aider à éviter des erreurs étranges. Ajoutez cette ligne au ~/.bash_profile
fichier:
if [ -f $HOME/.bashrc ]; then
source $HOME/.bashrc
fi
Rubis
Installez Ruby 2.4.1:
rbenv install 2.4.1
Remarque : Ce processus peut prendre 5 à 15 minutes selon les ressources de votre machine virtuelle et il n'y a pas de barre de progression.
Rendez Rbenv disponible partout.
rbenv global 2.4.1
Passager et Nginx
Ajoutez la clé PGP et le support HTTPS pour apt:
sudo apt-get install -y dirmngr gnupg
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 561F9B9CAC40B2F7
sudo apt-get install -y apt-transport-https ca-certificates
Ajoutez le référentiel Passenger:
sudo sh -c 'echo deb https://oss-binaries.phusionpassenger.com/apt/passenger zesty main > /etc/apt/sources.list.d/passenger.list'
sudo apt-get update
Installez les modules Passenger + Nginx:
sudo apt-get install -y nginx
sudo apt-get install -y libnginx-mod-http-passenger
Visitez votre instance Vultr en utilisant son nom de domaine ou son IP pour les tester à ce stade. S'ils fonctionnent, votre page affichera la page d'accueil Nginx par défaut.
Configurer Rails, l'application et configurer le passager
Installez Bundler et Rails:
gem install bundler rails --no-ri --no-rdoc
La convention Ubuntu / Debian consiste à configurer votre application dans /var/www
. Par défaut, il n'est accessible en écriture que par root. Pour que la configuration fonctionne, donnez la propriété à l'utilisateur sudo deploy
:
sudo chown deploy:deploy /var/www -R
Générez l'application rails dans /var/www/
. Si vous avez déjà une application que vous souhaitez déployer, git clone
cliquez ici, puis exécutez bundle
:
cd /var/www
rails new example --database=mysql
Configurez Passenger pour pointer vers l'application.
-
Prep Nginx.
sudo nano /etc/nginx/nginx.conf
-
Changez d'utilisateur en deploy
.
user deploy;
-
Dans la http
section de la configuration, il devrait y avoir une ligne qui indique à Nginx de charger les modules, y compris passager. S'il est manquant, vous pouvez l'ajouter juste après le Virtual Host Configs
titre, mais avant sites-enabled
.
include /etc/nginx/conf.d/*.conf;
-
Modifiez / créez le passenger.conf
fichier.
sudo nano /etc/nginx/conf.d/mod-http-passenger.conf
-
Dites au passager d'utiliser notre configuration Rbenv. Il peut contenir une ligne pointant vers la version Ruby incluse avec Passenger, il suffit de la supprimer ou de la commenter.
passenger_ruby /home/deploy/.rbenv/shims/ruby;
passenger_root /usr/lib/ruby/vendor_ruby/phusion_passenger/locations.ini;
-
Configurez l'hôte virtuel pour pointer vers l'application /var/www/example/
.
sudo nano /etc/nginx/sites-enabled/example.conf
server {
listen 80;
server_name example.com www.example.com;
root /var/www/example/public;
passenger_enabled on;
# When you are ready to switch to production mode - change this to `production`
passenger_app_env development; # <-- !important
}
-
Redémarrez Nginx.
sudo service nginx restart
À ce stade, votre application est prête à être utilisée en mode développement. Pour passer en mode production, vous devez revenir à votre configuration Nginx et modifier le rails_env
paramètre sur production
.
Avant de passer en mode de production, vous aurez toujours besoin de configurer votre base de données de production example_production
, database.yml
et clé secrète. Découvrez un outil comme Capistrano ou Mina pour accélérer votre processus de déploiement d'applications. C'est une bonne pratique d'utiliser des variables ENV avec un bijou comme dotenv
, et de ne pas valider vos mots de passe, clés secrètes et autres dans votre référentiel git.
Configurer SSL
Il existe plusieurs services offrant des certificats SSL pour votre domaine, beaucoup sont payants et un couple est gratuit. Configurez SSL quel que soit le service que vous utilisez. Let's Encrypt est très facile et gratuit à utiliser. Let's Encrypt est une organisation à but non lucratif soutenue par de nombreux géants de la technologie.
Installation
Exécutez les commandes suivantes et suivez les invites.
sudo apt-get update
sudo apt-get install software-properties-common
sudo add-apt-repository ppa:certbot/certbot
sudo apt-get update
sudo apt-get install python-certbot-nginx
sudo certbot --nginx
sudo certbot renew --dry-run
Si vous accédez à votre instance Vultr en utilisant maintenant HTTPS
, vous verrez un site Web sécurisé.
Renouvellement
Votre certificat nouvellement délivré expirera et devra être renouvelé périodiquement. La façon la plus simple de procéder consiste à configurer un travail cron.
sudo crontab -e
30 2 * * 1 /usr/bin/certbot renew
En tant qu'étape finale, mais facultative, redémarrez votre machine virtuelle et assurez-vous que tous les services redémarrent comme prévu.