Comment déployer une application Rails avec Passenger et Nginx sur Ubuntu 14.04

introduction

Si vous êtes un développeur Ruby on Rails, vous avez probablement besoin d’un serveur Web pour héberger vos applications Web. Ce didacticiel explique comment utiliser Phusion Passenger en tant que serveur Web convivial pour Rails. Passenger est facile à installer, à configurer et à entretenir et peut être utilisé avec Nginx ou Apache. Dans ce tutoriel, nous allons installer Passenger with Nginx sur Ubuntu 14.04.

Une autre méthode pour déployer votre application Rails est la suivante: https://www.digitalocean.com/community/tutorials/how-to-use-the-1-click-ruby-on-rails-on-ubuntu-14-04 -image [Installation en 1 clic] utilisant Nginx avec Unicorn, un serveur HTTP capable de gérer plusieurs demandes simultanément.

À la fin de ce didacticiel, vous aurez une application de test Rails déployée sur votre serveur Web Passenger / Nginx et accessible via un domaine ou une adresse IP.

Première étape - Créez votre gouttelette

Créez un nouveau Droplet Ubuntu 14.04. Pour les sites plus petits, il suffit de prendre le plan de 512 Mo.

image: https: //assets.digitalocean.com/articles/Rails_Passenger_Nginx/1.png [Taille de la gouttelette]

Vous voudrez peut-être choisir l’image Ubuntu 32 bits en raison d’une consommation de mémoire inférieure (les programmes 64 bits utilisent environ 50% de mémoire supplémentaire par rapport à leurs homologues 32 bits). Toutefois, si vous avez besoin d’une machine plus grosse ou s’il y a une chance que vous passiez à plus de 4 Go de RAM, vous devez choisir la version 64 bits.

image: https: //assets.digitalocean.com/articles/Rails_Passenger_Nginx/2.png [Image de la gouttelette]

Deuxième étape - Ajouter un utilisateur Sudo

Une fois le Droplet créé, des tâches supplémentaires d’administration système sont nécessaires. Vous devez créer un utilisateur système et sécuriser le serveur.

Suivez l’article Initial Server Server.

Dans ce tutoriel, vous devez créer un utilisateur de base avec des privilèges sudo. Nous allons utiliser l’utilisateur rails dans cet exemple. Si votre utilisateur a un autre nom, veillez à utiliser les chemins d’accès corrects dans les étapes suivantes.

Troisième étape (facultatif) - Configurez votre domaine

Afin de garantir la visibilité et la visibilité de votre site, vous devez configurer vos enregistrements DNS afin de diriger votre nom de domaine vers votre nouveau serveur. Vous pouvez trouver plus d’informations sur https://www.digitalocean.com/community/tutorials/how-to-set-up-a-host-name-with-digitalocean configuration d’un nom d’hôte] en suivant le lien.

Cependant, cette étape est facultative, car vous pouvez accéder à votre site via une adresse IP.

Quatrième étape - Installer Ruby

Nous installerons Ruby manuellement à partir des sources.

Avant de faire quoi que ce soit, nous devrions exécuter une mise à jour pour nous assurer que tous les packages que nous souhaitons installer sont à jour:

sudo apt-get update

Ensuite, installez des dépendances. Cela devrait rendre l’installation aussi fluide que possible:

sudo apt-get install build-essential libssl-dev libyaml-dev libreadline-dev openssl curl git-core zlib1g-dev bison libxml2-dev libxslt1-dev libcurl4-openssl-dev nodejs libsqlite3-dev sqlite3

Créez un dossier temporaire pour les fichiers source Ruby:

mkdir ~/ruby

Déplacer vers le nouveau dossier:

cd ~/ruby

Téléchargez le dernier code source stable de Ruby. Au moment d’écrire ces lignes, il s’agit de la version 2.1.3. Vous pouvez obtenir la dernière version actuelle sur le site Web Download Ruby. Si une version plus récente est disponible, vous devrez remplacer le lien dans la commande suivante:

wget http://cache.ruby-lang.org/pub/ruby/2.1/ruby-2.1.3.tar.gz

Décompressez le fichier téléchargé:

tar -xzf ruby-2.1.3.tar.gz

Sélectionnez le répertoire extrait:

cd ruby-2.1.3

Exécutez le script. Cela prendra un certain temps car il vérifie les dépendances et crée un nouveau * Makefile *, qui contiendra les étapes à suivre pour compiler le code:

./configure

Exécutez l’utilitaire qui utilisera le Makefile pour générer le programme exécutable. Cette étape peut prendre un peu plus de temps:

make

Maintenant, exécutez la même commande avec le paramètre. Il essaiera de copier les fichiers binaires compilés dans le dossier + / usr / local / bin +. Cette étape nécessite un accès root pour écrire dans ce répertoire. Cela prendra aussi un peu de temps:

sudo make install

Ruby devrait maintenant être installé sur le système. Nous pouvons le vérifier avec la commande suivante, qui devrait imprimer la version de Ruby:

ruby -v

Enfin, nous pouvons supprimer le dossier temporaire:

rm -rf ~/ruby

Cinquième étape - Installer Passenger et Nginx

Auparavant, la méthode privilégiée pour installer Passenger consistait à utiliser une installation générique via RubyGems (+ passagers-install-nginx-module +).

Cependant, vous pouvez maintenant installer Passenger sur Ubuntu avec l’outil Advanced Packaging Tool (APT), ce que nous allons utiliser. De cette manière, l’installation et, plus important encore, le processus de mise à jour de Passenger with Nginx, sont très simples.

Commencez par installer une clé PGP:

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 561F9B9CAC40B2F7

Créez un fichier source APT (vous aurez besoin des privilèges sudo):

sudo nano /etc/apt/sources.list.d/passenger.list

Et insérez la ligne suivante dans le fichier:

deb https://oss-binaries.phusionpassenger.com/apt/passenger trusty main

Appuyez sur * CTRL + x * pour quitter, tapez * y * pour enregistrer le fichier, puis appuyez sur * ENTER * pour confirmer l’emplacement du fichier.

Changez le propriétaire et les permissions pour ce fichier:

sudo chown root: /etc/apt/sources.list.d/passenger.list
sudo chmod 600 /etc/apt/sources.list.d/passenger.list

Mettez à jour le cache APT:

sudo apt-get update

Enfin, installez Passenger with Nginx:

sudo apt-get install nginx-extras passenger

Cette étape remplacera notre version Ruby par une version plus ancienne. Pour résoudre ce problème, supprimez simplement l’emplacement Ruby incorrect et créez un nouveau lien symbolique vers le fichier binaire Ruby approprié:

sudo rm /usr/bin/ruby
sudo ln -s /usr/local/bin/ruby /usr/bin/ruby

Sixième étape - Configurer le serveur Web

Ouvrez le fichier de configuration Nginx:

sudo nano /etc/nginx/nginx.conf

Recherchez les lignes suivantes dans le bloc:

# passenger_root /usr/lib/ruby/vendor_ruby/phusion_passenger/locations.ini;
# passenger_ruby /usr/bin/ruby;

Décommentez les deux. Mettez à jour le chemin dans la ligne. Ils devraient ressembler à ceci:

passenger_root /usr/lib/ruby/vendor_ruby/phusion_passenger/locations.ini;
passenger_ruby /usr/local/bin/ruby;

Enregistrez et quittez le fichier.

Étape sept - déployer

À ce stade, vous pouvez déployer votre propre application Rails si vous en avez déjà une. Si vous souhaitez déployer une application existante, vous pouvez télécharger votre projet sur le serveur et passer à l’étape + / etc / nginx / sites-available / default +.

Pour ce tutoriel, nous allons créer une nouvelle application Rails directement sur le droplet. Nous aurons besoin de la gem * rails * pour créer la nouvelle application.

Déplacez-vous dans le répertoire personnel de votre utilisateur (sinon, vous obtiendrez l’erreur + Aucun fichier ou répertoire de ce type - getcwd +) -

cd ~

Installez le * rails * gem (sans documentation supplémentaire pour l’installer plus rapidement). Cela prendra encore quelques minutes:

sudo gem install --no-rdoc --no-ri rails

Maintenant, nous pouvons créer une nouvelle application. Dans notre exemple, nous utiliserons le nom. Si vous souhaitez utiliser un autre nom, veillez à utiliser les chemins corrects. Nous allons ignorer l’installation de Bundler car nous voulons l’exécuter manuellement ultérieurement.

rails new testapp --skip-bundle

Entrez le répertoire:

cd testapp

Nous devons maintenant installer un environnement d’exécution JavaScript. Il peut être installé comme le joyau. Pour l’installer, ouvrez le * Gemfile *:

nano Gemfile

Trouvez la ligne suivante:

# gem 'therubyracer',  platforms: :ruby

Et décommentez le:

gem 'therubyracer',  platforms: :ruby

Enregistrez le fichier et lancez Bundler:

bundle install

Nous devons désactiver la configuration par défaut de Nginx. Ouvrez le fichier de configuration Nginx:

sudo nano /etc/nginx/sites-available/default

Trouvez les lignes:

listen 80 default_server;
listen [::]:80 default_server ipv6only=on;

Commentez-les, comme ceci:

# listen 80 default_server;
# listen [::]:80 default_server ipv6only=on;

Enregistrez le fichier.

Maintenant, créez un fichier de configuration Nginx pour notre application:

sudo nano /etc/nginx/sites-available/testapp

Ajoutez le bloc + serveur + suivant. Les paramètres sont expliqués ci-dessous.

server {
 listen 80 default_server;
 server_name ;
 passenger_enabled on;
 passenger_app_env development;
 root ;
}

Dans ce fichier, nous activons l’écoute sur le port 80, définissons votre nom de domaine, activons Passenger et définissons la racine sur le répertoire public de notre nouveau projet. Cette ligne est celle que vous souhaitez modifier pour correspondre à l’emplacement de téléchargement de votre application Rails.

Si vous ne souhaitez pas attribuer votre domaine à cette application, vous pouvez ignorer la ligne ou utiliser votre adresse IP.

Pour tester notre configuration, nous souhaitons voir la page Rails * Welcome on Bord *. Toutefois, cela ne fonctionne que si l’application est démarrée dans l’environnement de développement. Passenger démarre l’application dans l’environnement de production par défaut. Nous devons donc modifier cela avec l’option + passenger_app_env +. Si votre application est prête pour la production, vous souhaiterez laisser ce paramètre.

Enregistrez le fichier (* CTRL + x *, * y *, * ENTER *).

Créez un lien symbolique pour cela:

sudo ln -s /etc/nginx/sites-available/testapp /etc/nginx/sites-enabled/testapp

Redémarrez Nginx:

sudo nginx -s reload

Le site Web de votre application devrait maintenant être accessible. Accédez au domaine ou à l’adresse IP de votre Droplet:

http://droplet_ip_address

Et vérifiez le résultat:

image: https: //assets.digitalocean.com/articles/Rails_Passenger_Nginx/3.png [Page de test]

Vous devriez voir l’application de test Rails en direct sur votre serveur.

Huitième étape - Mettre à jour régulièrement

Pour mettre à jour Ruby, vous devez compiler la dernière version, comme indiqué à la quatrième étape de ce didacticiel.

Pour mettre à jour Passenger with Nginx, vous devez exécuter une mise à jour système de base:

sudo apt-get update && sudo apt-get upgrade

Cependant, si une nouvelle version du système Ruby est disponible, elle écrasera probablement notre Ruby (installé à partir du code source). Pour cette raison, vous devrez peut-être réexécuter les commandes permettant de supprimer la version existante de Ruby et de créer un nouveau lien symbolique vers le fichier binaire Ruby. Ils sont répertoriés à la fin de la cinquième étape de ce didacticiel.

Après le processus de mise à jour, vous devrez redémarrer le serveur Web:

sudo service nginx restart