Debian On Rails : Apache 2.2 + MySQL + Ruby + Rails + PHP + Mongrel + Mongrel_cluster + Subversion + Trac + Capistrano
Il y a quelques mois de cela je louais un serveur dédié avec comme but initial d’héberger mes propres sites et ceux de quelques amis. Je pensais alors que l’installation et la configuration de mon serveur ne serait qu’une formalité [modeste]au vue de mon expérience[/modeste]… Je me trompai alors dans les grandes largeurs !
Effectivement ce n’est que quelques mois plus tard et au bout de multiples expériences plus ou moins avortées avec différents panels d’administration que j’arrive enfin avec une installation que je qualifierai de presque correcte de mon serveur web…
Je vais donc vous faire part dans cet article des étapes que j’ai suivies pour en arriver là.
- Objectifs
- Installation système et applications
- Installation – Debian et utilitaires
- Installation – Apache 2.2 & PHP5 (ou 4)
- Installation – MySQL
- Installation – Subversion
- Installation – Ruby, Rails and friends
- Installation – Mongrel, Mongrel_cluster, Capistrano
- Installation – Trac
- Etude de cas : « monappli.com »
- Création du repository Subversion
- Configuration Trac & Accès Subversion
- Import de « monappli » dans Subversion
- Configuration de Capistrano
- Configuration Apache/Mongrel/Mongrel_Cluster
- Mise en ligne !
- Limites et idées d’amélioration
- Sources
1 – Objectifs
L’objectif numéro un de cette installation est d’obtenir un environnement d’hébergement d’un (ou plusieurs) projets RubyOnRails. Ceci devra inclure un serveur Apache récent couplé au serveur Mongrel, le projet devra être versionné en utilisant Subversion et il devra être géré en utilisant Trac (Wiki/Ticket d’incidents/WebSVN).
Le second objectif de cette installation est d’obtenir un environnement facile à administrer, ainsi nous utiliserons au maximum des paquets de la distribution Debian (sauf pour Rails installé par les gems). Cet objectif implique un choix stratégique sur la distribution, effectivement seule les Debian Etch et Sid (par opposition à Sarge) incluent une version suffisamment récente de Apache (2.2). L’installation sera donc faite sur une Debian Sarge mise à jour vers une Debian Etch. (Pour information, j’ai réalisé l’installation sur ma dédibox, je suis en train de la répéter pour écrire cet article sur une machine virtuelle vmware, la partie « déploiement » de cet article doit pouvoir s’adapter chez un hébergeur gratuit tel que Hostingrails.)
Je n’expliquerai pas ici la gestion des DNS (nom de domaines), si vous avez lu le plan, vous avez probablement vu que l’étude de cas portera sur « monappli.com », un domaine fictif. Le seul prérequis donc est d’avoir votre propre nom de domaine fonctionnel, pointant sur votre serveur. Pour les besoins de l’article j’ai donc ajouté « monappli.com » à mon fichier /etc/hosts sur ma station de travail (Ubuntu) en le faisant pointer vers mon serveur (debian en vmware). (De mémoire le fichier hosts porte le même nom sous Windows, par contre je ne sais plus où il se trouve…)
Edit : Le fichier host sous W$ est ici C:WINDOWSsystem32driversetc, merci Tarax.
2 – Installation système et applications
2.1 – Installation – Debian et utilitaires
Le but de cet article n’est pas d’expliquer comment installer une débian, pour cela Google devrait pouvoir vous aider. Nous allons donc commencer juste après l’installation du système, pour les utilisateurs dédibox comme moi, vous venez d’installer une Debian Sarge, il faut donc passer en « testing » (etch).
(NB : Je n’ai pas testé la procédure d’upgrade suivante sur ma dédibox car je suis en SID actuellement mais je reviendrai en Etch rapidement, je compléterai alors l’article. Dans tout les cas cette procédure devrait fonctionner car elle a marché sur ma machine virtuelle.)
(NB2 : Ca y est je suis en train de refaire l’installation sur ma dédibox, alors il semble que la mise à jour du noyau ne soit pas nécessaire, car déjà en 2.6.18. Utilisateurs de dédibox vous pouvez donc directement lancer le « dist-upgrade » après la modification du sources.list !)
Avant tout nous allons installer un éditeur texte et un petit utilitaire qui a fait la popularité de Ubuntu : sudo.
su
apt-get install vim
apt-get install sudo
Editez le fichier sudoers :
vi /etc/sudoers
Ajoutez ceci : (user étant le nom de votre user)
user ALL=(ALL) ALL
Vous pouvez alors quitter le shell root et exécuter une commande « en tant que root » en la préfixant par « sudo ». Ouvrons donc le fichier (/etc/apt/sources.list) :
sudo vi /etc/apt/sources.list
Modifiez le fichier en changeant les occurrences de stable en etch (le tag testing peut fonctionner aussi mais n’est pas recommandé, en effet lorsque debian changera de version, Sid passera en testing et Etch en stable ce qui fait que votre serveur changera de version vers SID sans que vous le souhaitiez réellement !)
Ensuite mettez à jour votre liste de sources :
sudo apt-get update
Nous allons maintenant commencer par mettre à jour le noyau avant de mettre à jour le reste de la distribution, choisissez le noyau qui vous convient parmi la liste obtenue en tapant la commande suivante :
sudo apt-cache search linux-image
Une fois que vous avez choisit le votre (linux-image-486 pour ma machine virtuelle), installez le avec ses headers, puis rebootez.
apt-get install linux-image-486 linux-headers-2.6.18-3-486
sudo reboot
Après le redémarrage il ne vous reste plus qu’a mettre à jour le reste de votre distribution :
sudo apt-get dist-upgrade
Vous pouvez vous servir un p’tit café pendant les téléchargements, vous en aurez probablement besoin pour la suite du tuto !
2.2 – Installation – Apache 2.2 & PHP5 (ou 4)
sudo apt-get install apache2 libapache2-mod-php5
(ou libapache2-mod-php4 si vous préférez php4 !)
Pour vérifier que l’installation s’est correctement déroulée vous pouvez ouvrir votre navigateur favoris Firefox à l’adresse www.monappli.com, un message indiquant « It works! » devrait apparaître.
2.3 – Installation – MySQL
sudo apt-get install mysql-server
Comme vous le dira Debconf (l’utilitaire de configuration Debian), il est fortement recommandé de mettre un mot de passe. Personnellement si j’étais debconf je l’obligerais
. Mettez donc un mot de passe (un vrai) et ne mettez pas le même que celui que vous utilisez partout…
Pour le tester faites la commande suivante :
mysql -u root -p
Entrez votre mot de passe, vous devriez alors avoir un prompt mysql, c’est bon, quittez.
mysql > quit
2.4 – Installation – Subversion
sudo apt-get install subversion subversion-tools libsvn-dev libsvn1 libapache2-svn
Personnellement je stockerai mes dépôt subversion dans le répertoire /var (partition séparée sur mon serveur dédié), il faut donc créé le répertoire /var/svn
sudo mkdir /var/svn/
sudo chown www-data:root -R /var/svn
2.5 – Installation – Ruby, Rails and friends
Attaquons nous maintenant à ce qui nous intéresse le plus Ruby, Ruby On Rails et les différentes librairies utiles. Avant tout il nous faut installer le paquet build-essential qui nous fournira les outils de compilation nécessaires à l’installation des gems.
sudo apt-get install build-essential
Installons ensuite Ruby (1.8) et ses pots
:
sudo apt-get install ruby1.8-dev ruby1.8 ri1.8 rdoc1.8 irb1.8 libreadline-ruby1.8 libruby1.8
Etant donné que ces paquets sont versionnés dans leur nom, il est nécessaire de créér leurs équivalents non versionnés afin de les utiliser ensuite, pour cela il suffit de créer 4 liens :
sudo ln -s /usr/bin/ruby1.8 /usr/local/bin/ruby
sudo ln -s /usr/bin/irb1.8 /usr/local/bin/irb
sudo ln -s /usr/bin/ri1.8 /usr/local/bin/ri
sudo ln -s /usr/bin/rdoc1.8 /usr/local/bin/rdoc
Il faut aussi installer les « bindings » Mysql pour ruby :
sudo apt-get install libmysql-ruby1.8
Je conseille aussi l’installation de la librairie de manipulation d’image « ImageMagick » pour ruby
sudo apt-get install librmagick-ruby1.8 libmagick9-dev
Passons maintenant à Rails : Rails existe dans les dépôts Debian, seulement ce n’est pas la méthode recommandé pour l’installer car Rails est fourni par un autre système de paquetages : les RubyGems. Avant d’installer Rails nous allons donc récupérer ce gestionnaire de paquetage pour Ruby (J’ai déjà décrit la procédure dans un précédent article, je la reprendrai donc tel quel ici.)
Récupération, décompression et installation de RubyGems :
cd
wget http://rubyforge.org/frs/download.php/11289/rubygems-0.9.0.tgz
tar xvfz rubygems-0.9.0.tgz
cd rubygems-0.9.0
sudo ruby setup.rb
cd ..
Installation de Rails
sudo gem install rails –include-dependencies
Installation de Rmagick :
sudo gem install rmagick
Enfin pour rester cohérent je placerai me sites rails dans le répertoire /var ainsi il faut créer le répertoire /var/rails
sudo mkdir /var/rails
sudo chown user:root -R /var/rails
(user étant votre nom d’utilisateur sur la machine, /var/rails a besoin de ces droits car le déploiement d’une application Rails depuis subversion grâce à Capistrano se fera sous l’autorité de user.)
2.6 – Installation – Mongrel, Mongrel_cluster, Capistrano
Mongrel, mongrel_cluster et Capistrano s’installent tous grâce aux fameuses gems :
sudo gem install daemons gem_plugin mongrel mongrel_cluster capistrano –include-dependencies
Il vous sera demandé de faire un choix pour mongrel, prennez le premier à priori.
Activez ensuite les modules Apaches nécessaires au bon fonctionnement de Mongrel et mongrel_cluster :
sudo a2enmod rewrite
sudo a2enmod proxy
sudo a2enmod proxy_balancer
sudo a2enmod proxy_http
2.7 – Installation – Trac
Pour ceux qui n’en ont jamais entendu parlé, Trac est un gestionnaire de projets dans le sens ou il fournit un wiki, un système de ticket d’incidents et une interface web à subversion. Il est (selon sa description) particulièrement adapté aux projets web.
sudo apt-get install trac libapache2-mod-python
Il vous faut répondre par l’affirmative lorsque debconf vous demandera d’activer le module python pour apache, sinon activez le ensuite à la main :
sudo a2enmod mod_python
Toujours par soucis de cohérence au niveau de l’arborescence de mes répertoires, mes projets trac seront installé dans /var/trac
sudo mkdir /var/trac/
sudo chown www-data:root -R /var/trac
3 – Étude de cas : « monappli.com »
Notre serveur est a priori installé mais… loin d’être configuré !
Nous allons donc maintenant nous attaquer à la partie la plus intéressantes de l’article, à savoir, comment mettre « monappli » sous contrôle subversion, sous gestion Trac et finalement en ligne grâce à la « magie » de Capistrano…
3.1 – Création du repository Subversion
La première étape consiste à créer le répository ou sera déposé le projet, ce dépôt se présente en général sous cette forme :
+monappli
|- trunk
|- branches
|- tags
Le répertoire trunk devra alors contenir la version de développement du projet, étant un tout récent utilisateur de subversion je ne saurais encore vous dire à quoi servent les répertoires branches et tags. (si quelqu’un peut m’éclairer, c’est pas de refus ! ). Le répertoire « trunk » sera créé plus tard lors de l’import du projet.
On va donc créer cette arborescence pour l’importer dans subversion, dans votre home directory tapez ces commandes :
mkdir ~/monappli
mkdir ~/monappli/tags
mkdir ~/monappli/branches
Ensuite on importe le tout dans subversion après avoir créez le dépôt :
sudo svnadmin create /var/svn/monappli
sudo chown -R www-data:root /var/svn/monappli
sudo svn import ~/monappli file:///var/svn/monappli -m « Création du projet, import de l’arborescence type »
Après le « -m » vient un commentaire, à vous de mettre ce que vous souhaitez ! Nous pouvons ensuite effacer le répertoire contenant l’arborescence importée :
rm -drf ~/monappli
Ensuite, éditez le fichier de configuration de votre dépôt svn :
sudo vi /var/svn/monappli/conf/svnserve.conf
Et modifiez le pour que les lignes suivantes aient ces valeurs :
anon-access = none auth-access = write authz-db = /etc/apache2/trac_svn_access.rules realm = Mon Appli Repository
(anon-access signifie accès anonyme, si vous voulez donc qu’un utilisateur anonyme puis récupérer les sources de votre dépot mettez cet accès à read)
Ok, donc maintenant on a un dépôt SVN avec une arborescence prête à accueillir votre petit projet sur lequel vous travaillez depuis un bout de temps. Avant de procéder à l’import de votre projet, nous allons configurer les accès à notre tout récent dépot.
Il y a différente façon d’accéder à un dépot svn, directement sur la machine, par connexion ssh pour beaucoup de sécurité ou encore par connexion http dans la plupart des cas. Nous allons nous interesser à la connexion http que nous allons mettre en place en même temps que Trac.
3.2 – Configuration Trac & Accès Subversion
Création du projet Trac
Trac est une application web, elle a donc besoin d’un serveur web pour fonctionner. Nous allons donc configurer Apache pour accéder à Trac. Pour des raisons de commodité trac sera accessible à l’adresse trac.monappli.com. Configurez donc vos DNS ou, si vous faites la manip pour tester comme moi en ce moment, modifiez le fichier /etc/hosts en conséquence.
Avant tout créez un nouveau projet Trac :
sudo trac-admin /var/trac/monappli initenv
Répondez aux questions comme ci dessous :
- Project Name [My Project]> Mon appli
- Database connection string [sqlite:db/trac.db]>
- Repository type [svn]>
- Path to repository [/path/to/repos]> /var/svn/monappli
- Templates directory [/usr/share/trac/templates]>
… et tout devrais bien se passer
Gestion des utilisateurs
Il est nécessaire ensuite de pouvoir gérer les utilisateurs de notre dépot subversion mais aussi de notre Trac, ainsi nous allons créer le fichier suivant :
sudo vi /etc/apache2/trac_svn_access.rules
et nous allons y ajouter le contenu suivant :
[groups] developpers = pierre, manuel [/] @developpers = rw
C’est assez lisible, ici, les utilisateurs pierre et manuel font parti du groupe « developpers », groupe qui possède les droits de lecture (r) et écriture (w) sur TOUT le dépot subversion. Plus d’information peut être trouvée à cette adresse concernant ce fichier.
Nous avons donc 2 utilisateurs auquels nous devons associer un mot de passe :
sudo htpasswd -c /etc/apache2/dav_trac_svn.passwd pierre
sudo htpasswd /etc/apache2/dav_trac_svn.passwd manuel
Nous devons informer Trac maintenant de l’existance d’un administrateur, prenons pierre :
sudo trac-admin /var/trac/monappli permission add pierre TRAC_ADMIN
Donnons les droits de création/modification aux développeurs :
sudo trac-admin /var/trac/monappli permission add developpers WIKI_CREATE WIKI_MODIFY TICKET_CREATE TICKET_MODIFY
Enfin interdisons la modification/création pour les anonymes
sudo trac-admin /var/trac/monappli permission remove anonymous WIKI_CREATE WIKI_MODIFY TICKET_CREATE TICKET_MODIFY
Ces droits pourrons être changés par la suite grâce à une interface d’administration plus conviviale !
Trac.ini
Nous avons maintenant besoin de faire un tour dans la configuration de notre instance Trac :
sudo vi /var/trac/monappli/conf/trac.ini
Modifiez alors les lignes suivantes :
[project] descr = Projet Mon Appli name = Mon appli url = http://trac.monappli.com/ [ticket] restrict_owner = true [trac] authz_file = /etc/apache2/trac_svn_access.rules
Configuration apache
Créons ensuite le fichier trac.monappli.com dans les sites disponibles de votre debian afin de pouvoir accéder à notre Trac.
sudo vi /etc/apache2/sites-available/trac.monappli.com
Mettez y la configuration suivante :
ServerAdmin votreemail@monappli.com
ServerName trac.monappli.com
DocumentRoot /var/trac/monappli
SetHandler mod_python
PythonHandler trac.web.modpython_frontend
PythonOption TracEnv /var/trac/monappli
PythonOption TracUriRoot /
PythonPath « sys.path + ['/var/trac/monappli']«
ErrorLog /var/log/apache2/error.trac.monappli.com.log
CustomLog /var/log/apache2/access.trac.monappli.com.log combined
DAV svn
SVNPath /var/svn/monappli
Access control policy
AuthzSVNAccessFile /etc/apache2/trac_svn_access.rules
only authenticated users may access the repository
Require valid-user
AuthType Basic
AuthName « Monappli Subversion repository »
AuthUserFile /etc/apache2/dav_trac_svn.passwd
Require valid-user
AuthType Basic
AuthName « Trac login »
AuthUserFile /etc/apache2/dav_trac_svn.passwd
Require valid-user
Apache a besoin d’accéder aux fichiers de trac, changez donc le propriétaire de votre instance trac :
sudo chown -R www-data:root /var/trac/monappli/
Ensuite, il ne vous reste qu’a activer le site et redémarrez Apache pour que toute votre configuration soit prise en compte :
sudo a2ensite trac.monappli.com
sudo /etc/init.d/apache2 restart
Si tout vas bien, trac devrait maintenant être disponible à l’adresse suivante : trac.monappli.com. On en a pas fini pour autant avec lui, effectivement il faut maintenant lui ajouter un module d’administration qui nous permettra d’éviter de le manipuler avec la ligne de commande
Trac WebAdmin
Nous allons récupérer un installeur, l’installer puis récupérer le plugin, le renommer et enfin l’installer !
wget http://peak.telecommunity.com/dist/ez_setup.py
sudo python ez_setup.py
wget http://trac.edgewall.org/attachment/wiki/WebAdmin/TracWebAdmin-0.1.2dev_r4240-py2.4.egg.zip?format=raw
mv TracWebAdmin-0.1.2dev_r4240-py2.4.egg.zip?format=raw TracWebAdmin-0.1.2dev_r4240-py2.4.egg
sudo easy_install TracWebAdmin-0.1.2dev_r4240-py2.4.egg
Pour activer ce plugin dans notre instance de trac, il nous faut éditer le fichier trac.ini :
sudo vi /var/trac/monappli/conf/trac.ini
et y ajouter à la fin la partie suivante :
[components]
webadmin.* = enabled
3.3 – Import de « monappli » dans Subversion
Personellement je travaille avec le couple Eclipse/Radrails (voir un précédent article pour savoir comment installer le tout), je présenterai donc comment importer un projet Rails existant grâce à Eclipse. Pour ceux qui travaille avec un autre environnement adaptez la démarche suivante
Un prérequis pour travailler avec Subversion depuis Eclipse est l’utilisation du fameux plugin Subclipse, un tutoriel sur son installation est disponible sur leur site internet.
Une fois que le plugin subversion est installé, ouvrez donc Eclipse, créez un nouveau projet Rails ou ouvrez le projet sur lequel vous travailliez déjà, faites un clic droit sur le nom du projet dans la fenêtre de gauche puis sélectionnez « Team > Share Project ». (Mon installation d’éclipse est en anglais, donc adaptez !). Dans la fenêtre suivante, sélectionnez un dépôt de type SVN, et ensuite créez en un nouveau.
Pour ce nouveau dépôt, entrez cette url : http://trac.monappli.com/svn puis cliquez sur suivant. Ensuite indiquez que vous voulez utiliser un nom de dossier particulier et entrez « trunk » (Vous pouvez aussi le sélectionner en « parcourant » le dépôt SVN, pour cela, il faudra vous identifiez avec les nom d’utilisateurs que vous avez créez précédemment.) Cliquez sur suivant, vous pourrez alors entrer un commentaire spécial pour votre « import » ou laisser celui par défaut. Ensuite éclipse devrait vous demander de sélectionner les fichiers à importer, à priori vous pouvez tout sélectionner sauf le fichier .project qui est propre à votre environnement, mettez un commentaire puis validez !
Maintenant vous devriez avoir votre projet sous contrôle subversion. Cela permettra de pouvoir travailler à plusieurs sur le projet, ou tout simplement de pouvoir travailler seul mais en gérant ses versions de fichiers.
Cependant, il reste un peu de configuration à faire. Effectivement certains fichiers n’ont pas besoins d’être sous contrôle subversion, il faut donc modifiez un peu la configuration SVN, il est possible de faire cette manipulation en mode graphique dans éclipse je vais donc essayer de l’expliquer ci dessous :
Gestion du fichier database.yml
Ce fichier est spécifique aux différents développeurs ainsi qu’au serveur, nous allons donc créer une version pour chacun.
- Copiez collez le fichier config/database.yml dans le même répertoire et renommez le en database.yml.prd (Version pour le serveur)
- Ajoutez ce fichierau contrôle de version. Clic droit > Team > Add To Version Control
- Renomez database.yml en database.yml.example. (Version pour les autres développeurs)
- Indiquez à subversion de ne plus versionner votre prochain database.yml : Clic droit sur le répertoire config > Team > Set property > Property name = svn:ignore, dans le champs texte tappez « database.yml »
- Mettez à jour votre serveur subversion. Clic droit sur le nom du projet > Team > Commit (Mettez un commentaire comme « Gestion du fichier database.yml »)
- Recréez votre database.yml en local dans le répertoire config (File > new > File).
- Conclusion : database.yml doit contenir la config de votre appli en local, database.yml.prd celle de votre serveur et database.yml.example une config type que pourrons utiliser les développeurs.
Gestion .project
Ce fichier est spécifique à éclipse, on peut donc indiquer à subversion de ne pas le prendre en compte. Sur le répertoire projet, clic droit > Team > Set property > Property name = svn:ignore, dans le champs texte tappez « .project ».
Commit ! (Quand je dis commit il faut faire clic droit sur le nom du projet > Team > Commit et entrer un commentaire…)
Gestion des logs
Les logs sont aussi des fichiers spécifiques à chaque environnement. Nous allons donc indiquer à subversion de les ignorer :
- Clic droit sur le répertoire log > Team > Set property > Property name = svn:ignore, dans le champs texte tappez « *.log »
- Commit !
Gestion des fichiers temporaires
Le répertoire tmp contient 3 sous répertoires temporaires spécifiques à chacun, on procède de la même manière pour indiquer à Subversion de les ignorer :
- Clic droit sur le répertoire tmp/cache > Team > Set property > Property name = svn:ignore, dans le champs texte tappez « * » (pour tout ignorer)
- Clic droit sur le répertoire tmp/sessions > Team > Set property > Property name = svn:ignore, dans le champs texte tappez « * » (pour tout ignorer)
- Clic droit sur le répertoire tmp/sockets > Team > Set property > Property name = svn:ignore, dans le champs texte tappez « * » (pour tout ignorer)
- Commit !
Voila ! Vous êtes OK avec Subversion, un nouveau développeur peut alors faire un « checkout » du projet, il récupérera lui aussi les propriétés que vous avez définies ici.
3.4 – Configuration de Capistrano
Quelques explications
Avant d’expliquer comment faire, je vais commencer par expliquer son utilité car, au début, j’ai eu du mal à comprendre ce qu’était Capistrano (
). Pour tout savoir je vous conseille de lire comme moi le manuel officiel, sinon je vais tenter en quelque lignes d’expliquer ce que cela va nous amener.
Capistrano est donc un « utilitaire » permettant de gérer le déploiement d’une application. Il n’est pas spécifique à RubyOnRails mais s’y adapte parfaitement. L’utilisateur de capistrano devra donc écrire une « recette » (fichier de configuration) indiquant comment va se dérouler le déploiement. L’avantage d’un tel outil est qu’en lançant une seule commande sur sa station de travail, un utilisateur va pouvoir « mettre en ligne » son application sur autant de serveur qu’il le souhaite, sans s’occuper de déplacer, modifier ou archiver manuellement l’existant.
Voici donc le fonctionnement de Capistrano (arrêtez moi si je me trompe, j’en suis à ma première utilisation !) :
- L’utilisateur lance le déploiement de son application sur sa station de travail (une ligne de commande), Capistrano lit alors la recette à suivre pour faire le déploiement.
- Capistrano checke le serveur subversion à la recherche de la dernière version.
- Capistrano archive monappli.com dans un répertoire daté
- Capistrano récupère la dernière version depuis le serveur subversion et la met à la place de la version archivée
- Capistrano exécute les tâches spécifiques comme la modification d’un fichier, la création de liens ou encore toute autre tâche que nous lui aurons indiquer. (On peut imaginer d’archiver la base de donnée, de réaliser des migrations ou encore plein d’autres choses.)
La magie est que cette opération peut être réalisée en même temps sur X serveurs identiques et qu’en plus elle est réversible. Imaginez que vous metttez la toute dernière version de votre application en ligne et que dans la minute qui suit vous vous apercevez d’un gros bug critique, en une seule commande, vous pourrez alors revenir dans une version précédente !
Adaptation pour monappli.com
Nous avons déjà installé capistrano, il ne nous manque qu’a écrire un fichier de recette en local. Ce fichier s’appelle deploy.rb et devra être créé dans le répertoire config de votre application. Cependant avant de le créer, nous allons indiquer à subversion de ne pas en tenir compte. (C’est un choix personnel, vous pouvez très bien le versionner et donc le fournir aux autres développeurs si vous le souhaitez…)
Dans éclipse, Clic droit sur le répertoire config > Team > Show properties > Clic droit sur l’existante > modify> et ajoutez « deploy.rb ».
Créez ensuite ce fichier dans le répertoire config, puis renseigner le comme suit :
############################# ####### Ma recette Capistrano ! #### ############################# ############################# ## Configuration ############################# require 'mongrel_cluster/recipes' # le nom de votre utilisateur SSH sur votre serveur set :user, 'user' # le nom de votre application set :application, "monappli.com" # le nom de votre user SVN set :svn_user, ENV['svn_user'] || "pierre" set :svn_password, Proc.new { Capistrano::CLI.password_prompt('SVN Password: ') } # la configuration du dépôt SVN set :repository, Proc.new { "--username #{svn_user} " + "--password #{svn_password} " + "http://trac.monappli.com/svn/trunk/" } # definition de variables role :web, application role :app, application role :db, application, :primary => true # Lieu ou va être déployée votre application (le répertoire /var/rails/monappli) set :deploy_to, "/var/rails/#{application}" # La configuration de votre cluster Mongrel. set :mongrel_conf, "#{current_path}/config/mongrel_cluster.yml" # Nous indiquons que nous utilisons sudo pour executer des commandes en tant que root set :use_sudo, true set :restart_via, :run # Le type de checkout SVN set :checkout, "export" ############################# ## Liste de tâches à exécuter ############################# #Tâche 1 #Réalisée après la création des liens symboliques necessaires. task :after_symlink, :roles => [:web, :app] do # Changer l'environnement de développement à production run "perl -i -pe "s/# ENV\['RAILS_ENV'\] \|\|= 'production'/ENV['RAILS_ENV'] ||= 'production'/" #{current_path}/config/environment.rb" # Renomer le fichier database.yml.prd run "cp #{current_path}/config/database.yml.prd #{current_path}/config/database.yml" # Conserver le même répertoire tmp qu'avant le déploiement, création de liens sympliques run "rm -drf #{current_path}/tmp" run "ln -s #{shared_path}/tmp #{current_path}/tmp" end #Tâche 2 #Exemple d'une tâche qui fait en sorte de conserver les même répertoire rep1 et rep2 avant et après déploiement #Utile pour un répertoire d'images uploadées par exemple. # task :after_update_code do # %w{rep1 rep2}.each do |share| # run "rm -drf #{release_path}/public/#{share}" # run "ln -s #{shared_path}/#{share} #{release_path}/public/#{share}" # end #end
Nous avons maintenant décris comment nous mettre en place notre application, il nous reste encore à configurer le serveur pour pouvoir afficher cette application !
3.5 – Configuration Apache/Mongrel/Mongrel_Cluster
Nous allons à nouveau travailler sur le serveur, reconnectez vous dessus et créons un nouvel hôte virtuel apache :
sudo vi /etc/apache2/sites-available/monappli.com
Voici son contenu, il faut savoir que cette configuraiton peut être améliorée, je ne maîtrise pas encore tous les secrets des proxy, des clusters, du mod_rewrite et du mod_deflate :
ServerName monappli.com
DocumentRoot /var/rails/monappli.com/current/public
Options FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
BalancerMember http://127.0.0.1:8000
BalancerMember http://127.0.0.1:8001
BalancerMember http://127.0.0.1:8002
Allow from localhost
RewriteEngine On
RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} -f
RewriteRule (.*) $1 [L]
ProxyPass / balancer://mongrel_cluster/
ProxyPassReverse / balancer://mongrel_cluster/
Deflate
AddOutputFilterByType DEFLATE text/html text/plain text/xml application/xml application/xhtml+xml text/javascript text/css
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4.0[678] no-gzip
BrowserMatch bMSIE !no-gzip !gzip-only-text/html
ErrorLog /var/log/apache2/error.monappli.com.log
CustomLog /var/log/apache2/access.monappli.com.log combined
Ensuite activez ce site et redémarrer apache :
sudo a2ensite monappli.com
sudo /etc/init.d/apache2 reload
Ne tenez pas compte du warning concernant l’existance du répertoire /var/rails/monappli/current/public il sera créé par le déploiement capistrano.
Un peu d’explication sur ce fichier : en fait nous indiquons à apache (et plus particulièrement à son mod_proxy) que les requêtes doivent être passée à un cluster de serveur mongrels écoutant sur les ports 8000, 8001et 8002.
Il nous faut donc maintenant configurer ces clusters, si vous jettez un oeil au fichier de recette capistrano, vous verrez qu’il fait référence à un fichier censé définir la configuration du cluster. Nous revenons donc dans éclipse et nous allons créer dans le répertoire config le fichier mongrel_cluster.yml contenant la configuration suivante :
--- cwd: /var/rails/monappli.com/current port: "8000" environment: production address: 127.0.0.1 pid_file: log/mongrel.pid servers: 3
Faites ensuite un commit afin de mettre ce fichier sous contrôle subversion.
Avant la mise en ligne, pour que capistrano fonctionne dans un environnement de test en local avec ma vmware, il faut ajouter ces lignes dans le fichier host du serveur si vous ne disposez pas d’un véritable nom de domaine. (elles sont normalement déjà dans votre host de la station de travail)
sudo vi /etc/hosts
192.168.2.101 monappli.com
192.168.2.101 trac.monappli.com
L’adresse ip étant celle de votre machine virtuelle
3.6 – Mise en ligne !
Avec capistrano la mise en ligne ne devrait être qu’une formalité, sur votre station de travail, à la racine de votre application entrez les commandes suivantes (vos mots de passe user ssh et svn vous serons demandés)
cap setup
… cela devrait générer l’environnement Capistrano sur votre serveur, puis faites :
cap deploy
… si tout vas bien, cela mettre votre application en ligne à partir des sources SVN et cela effectueras les différentes tâches de la recette capistrano !
4 – Limites et idées d’amélioration
Les limites de cet articles sont mes propres limites, en effet les configurations et les commandes que j’ai données ne sont le fruit que des très longues heures (et même journées) de recherche. Je ne détiens aucun vérité donc je suis ouvert à toutes remarques et/où idées d’améliorations !
NB : Si vous venez à bout de ce tuto, laissez moi un feedback pour me dire comment ça c’est passé
Script de lancement des process mongrel
Une première idée d’amélioration de cet article (que j’ai trouvée ici) est la création d’un script qui sera lancé à chaque démarrage du serveur et dont le rôle sera de lancer tout les process mongrels des sites installés dans /var/rails. Si vous l’utilisez n’oubliez pas de changer la variable suivante en début de script :
APP_DIR = ‘/var/rails/’
5 – Sources
Rendons à César ce qui est à César, sans tous ces très bons articles, blogs et sites, mon article n’aurait pas vu le jour, en vrac voici le contenu de mon répertoire de bookmarks « Serveur ROR » :
- Time For A Grown-Up Server: Rails, Mongrel, Apache, Capistrano and You
- Apache Best Practice Deployment
- Apache 2.2, mod_proxy_balancer, & Mongrel on Ubuntu 6.06
- Setting up Subversion and websvn on Debian
- Subversion 1.4.0 from source via Apache 2.2 on Ubuntu Dapper
- Access Control for Subversion with Apache2 and Authz
- Start and Stop All Your Mongrel_Cluster Processes
- Installer Subversion et Trac
- Installer et configurer Apache2, Trac et Subversion sur Ubuntu
- HowtoUseRailsWithSubversion
- About « Capistrano: Automating Application Deployment »
- Install Subclipse in Eclipse 3.x
- Déploiement d’une application Rails avec Capistrano
- The Trac User and Administration Guide
- SVN Book : Per-Directory Access Control

Merci, super article qui va beaucoup m’aider !!!!!!!!!!
guillaume
12 jan 07 at 12 h 31 min
Sidéral !
Je me l’attaque de suite… retours à venir.
Bien à toi
Jé
PS: le fichier host sous W$ est dans:
C:WINDOWSsystem32driversetc
Tarax
13 jan 07 at 4 h 15 min
Merci Tarax, je modifie !
Pierre Rigal
18 jan 07 at 10 h 19 min
J’ai suivi ton tutoriel pour installer tout ça sur ma dédibox (c’est exactement tout ce que je voulais installer ^^) et ça fonctionne très bien ! Par contre il faut toujours mettre debian etch car le kernel est en version 2.6.17 dans la version proposée à l’install. J’ai aussi utilisé le tutoriel de http://blog-perso.onzeweb.info/2006/12/16/rails-mongrel-apache-ubuntu-production/ pour ce qui est de mettre mongrel_cluster au démarrage.
Bref c’est un très bon tuto, je te remercie bien de l’avoir fait. Je ferais un petit billet sur mon blog
Nicolas Mérouze
19 jan 07 at 19 h 53 min
Salut,
pour les code à mettre dans les sites apache, il ne manque pas des ? Car je ne les vois pas et ça n’arrête pas de me donner comme erreur: DAV not allowed here
lighty
21 jan 07 at 19 h 19 min
Oula si ! Il manque plein de choses, la migration de Typo vers WordPress a provoqué des erreurs ! Je corrige ça au plus vite
Merci !
Edit : En fait WordPress ne gère pas les blocs de code de la même façon que Typo
, il a notament des problèmes avec les balises HTML …
Pierre Rigal
21 jan 07 at 22 h 13 min
Salut,
Merci d’avoir rapidement corrigé les tags pour Apache.
J’ai remarqué que lors de l’installation de rmagick (gem install rmagick) j’étais arrêté par une erreur « wpf2eps not found », j’ai dû faire un apt-get install libwmf-bin (après une petite recherche sur google) et hop c’était réglé
lighty
22 jan 07 at 16 h 35 min
Resalut,
lors du cap setup:
nemesis:/var/rails/bash$ cap setup
* executing task setup
* executing « mkdir -p -m 775 /u/apps/ /u/apps/releases /u/apps/shared /u/apps/shared/system &&n mkdir -p -m 777 /u/apps/shared/log &&n mkdir -p -m 777 /u/apps/shared/pids »
/usr/lib/ruby/gems/1.8/gems/capistrano-1.3.1/lib/capistrano/actor.rb:504:in `execute_on_servers’: The setup task is only run for servers matching {:except=>{:no_release=>true}, :desc=> »Set up the expected application directory structure on all boxes »}, but no servers matched (RuntimeError)
Une idée d’où ça peut venir ?
lighty
22 jan 07 at 17 h 59 min
Bonjour lighty et merci pour la remarque sur wpf2eps, je me suis permis de modifier un peu ton commentaire pour afficher le code conformément à la syntaxe Markdown.
Concernant l’erreur en elle même, je sais pas trop mais j’ai une piste: il semble que tu n’ai pas défini le serveur à mettre à jour, dans ta recette capistrano c’est le :application, si tu as mis un nom « non résolvable » il faut que tu modifie la variable :web …
Pierre Rigal
22 jan 07 at 19 h 05 min
Salut,
Merci ! C’est ok maintenant, par contre, je m’étais trompé en écrivant le commentaire, c’est wmf2eps, desolé
lighty
23 jan 07 at 16 h 54 min
Avant d’expliquer comment faire, je vais commencer par expliquer ce que c’est car j’ai eu du mal à comprendre au début ce que c’était que ce Capistrano.
Je préfererais :
Avant d’expliquer comment faire, je vais commencer par expliquer son utilité car, au début, j’ai eu du mal à comprendre ce qu’était Capistrano.
Voila, ça « coule » mieux ! Sinon excellent article
Pascal Gautherot
12 fév 07 at 13 h 51 min
J’avoue !
Je modifie
Pierre Rigal
12 fév 07 at 22 h 09 min
DebianOnRails : Apache2.2, MySQL, Ruby, Rails, PHP, Mongrel, Subversion, Trac, Capistrano…
Lobjectif numro un de ce tutoriel est dobtenir un environnement dhbergement dun (ou plusieurs) projets RubyOnRails. Ceci devra inclure un serveur Apache rcent coupl au serveur Mongrel, le projet devra tre versionn en utilisant Subversion et il devra tr…
Anonyme
14 fév 07 at 10 h 06 min
Salut Pierre,
J’ai des pépins pendant la mise à jour Sarge vers Etch après le dist-upgrade :
Préconfiguration des paquets…
Paramétrage de sysvinit (2.86.ds1-38) …
sysvinit: creating /dev/initctl
rm: ne peut enlever `/dev/initctl’: est un répertoire
dpkg : erreur de traitement de sysvinit (–configure) :
le sous-processus post-installation script a retourné une erreur de sortie d’état 1
Des erreurs ont été rencontrées pendant l’exécution :
sysvinit
E: Sub-process /usr/bin/dpkg returned an error code (1)
Je ne suis pas sûr d’avoir choisi le bon noyau également sur la dédibox. J’ai mis le même que toi :
sudo apt-get install linux-image-486 linux-headers-2.6.18-3-486
Est-ce bon ?
hoksitan
15 fév 07 at 9 h 49 min
hoksitan> Si tu es aussi sur dédibox tu n’as pas besoin de mettre à jour le noyau avant de faire le dist-upgrade. Relis le NB2 de la section « Installation – Debian et utilitaires »…
J’imagine que c’est même déconseillé de le faire car l’architecture dédibox est très spécifique… Je ne me suis pas renseigné encore sur les noyau spécifiques aux dédibox mais il est possible qu’il y en ai de plus récents directement proposés par les gars de dediboite…
Pierre Rigal
15 fév 07 at 12 h 49 min
J’avais lu le NB2… mais le noyau de ma dédibox est bien un 2.4.17… et non 18.
Finalement, ça a marché… je suis en etch.
Je continue la suite… ça se complique.
hoksitan
15 fév 07 at 14 h 37 min
hoksitan> C’est vraiment étrange, je ne comprends pas pourquoi ton noyau est différent du mien… lorsque j’ai vérifié tout mon article sur ma dédibox, j’ai commencé par faire une réinstallation de la debian grâce à l’interface d’admin Dedibox. (De mémoire, j’ai pris la version Serveur>Debian Sarge)
Tiens moi au courant pour la suite !
Pierre Rigal
16 fév 07 at 12 h 26 min
[...] En attendant si vous avez une dédibox ou un serveur dédié, vous pouvez toujours lire cet autre billet qui vous expliquera comment mettre en place un hébergement Rails digne d’un serveur de production, depuis l’installation jusqu’au déploiement de l’application grâce à Capistrano. Share and Enjoy:These icons link to social bookmarking sites where readers can share and discover new web pages. [...]
Stoneageblog.com » Blog Archive » Ma première application Ruby On Rails
4 mar 07 at 0 h 58 min
Salut,
Je developpe actuellement un site avec rails et j’ai aussi un serveur dédié..
Je developpe mon code en local sur ma machine et je passe par un tunnel ssh pour atteindre la base mysql sur le serveur dédié.
Or j’ai rencontré le problem suivant : Mysql::Error: Lost connection to MySQL server during query
La solution est d’installer le paquet mysql-client-x.x (sous dedian/ubuntu) de la meme version que la base de donnée sur laquel on se connecte…
Dans mon cas, en local j’ai un 5.0 et en prod une 4.1..
Ce post n’a pas vraiment de rapport avec le sujet de l’article mais peut etre qu’un jour un internaute sera heureux de tomber sur ce billet
alex
15 mar 07 at 17 h 09 min
Excellent article, bravo!
oool
21 mar 07 at 15 h 43 min
Ca me tente de passer sur une dedibox, surtout après avoir lu ton article. Mais j’ai des délais tellement courts (heureusement que rails est là
) que je vais dans un premier temps opter pour un hébergement préinstallé.
Que penses-tu de Mediatemple (solution gridserver ?)
yoann
17 avr 07 at 8 h 52 min
Ils ont pas l’air si mauvais, je n’ai jamais entendu parlé d’eux après sur le papier ça n’a pas l’air mal…
Tu peux aussi jeter un oeil à [hostingrails](http://www.hostingrails.com/home/350952602), ils sont spécialistes rails et pour avoir déjà utilisé leur hébergement (gratuit à l’époque) j’en étais assez content. J’avais même discuté quelques fois avec le support pour l’installation de gem et leurs réponses étaient très bonnes…
Pierre Rigal
18 avr 07 at 22 h 42 min
Hi Pierre,
you are my hero! After many hassles and sleepless nights of updating and deployment experiments your straightforwardness is nothing else but the missing milestone.
Thank you so much!
[Ever considered changing from wordpress to RadiantCMS?]
Benedikt
28 avr 07 at 10 h 20 min
Hi Pierre, great tutorial so far, but no way i get this running.
I allways end with:
debian:/# cap setup
* executing task setup
* executing « umask 02 &&n mkdir -p /u/apps/ /u/apps/releases /u/apps/shared /u/apps/shared/system &&n mkdir -p /u/apps/shared/log &&n mkdir -p /u/apps/shared/pids »
/usr/lib/ruby/gems/1.8/gems/capistrano-1.4.1/lib/capistrano/actor.rb:545:in `execute_on_servers’: The setup task is only run for servers matching {:except=>{:no_release=>true}, :desc=> »Set up the expected application directory structure on all boxes »}, but no servers matched (RuntimeError)
from /usr/lib/ruby/gems/1.8/gems/capistrano-1.4.1/lib/capistrano/actor.rb:207:in `run’
from /usr/lib/ruby/gems/1.8/gems/capistrano-1.4.1/lib/capistrano/recipes/standard.rb:39:in `load’
from /usr/lib/ruby/gems/1.8/gems/capistrano-1.4.1/lib/capistrano/actor.rb:159:in `instance_eval’
from /usr/lib/ruby/gems/1.8/gems/capistrano-1.4.1/lib/capistrano/actor.rb:159:in `setup’
from /usr/lib/ruby/gems/1.8/gems/capistrano-1.4.1/lib/capistrano/cli.rb:268:in `send’
from /usr/lib/ruby/gems/1.8/gems/capistrano-1.4.1/lib/capistrano/cli.rb:268:in `execute_recipes!’
from /usr/lib/ruby/gems/1.8/gems/capistrano-1.4.1/lib/capistrano/cli.rb:268:in `each’
from /usr/lib/ruby/gems/1.8/gems/capistrano-1.4.1/lib/capistrano/cli.rb:268:in `execute_recipes!’
from /usr/lib/ruby/gems/1.8/gems/capistrano-1.4.1/lib/capistrano/cli.rb:239:in `execute!’
from /usr/lib/ruby/gems/1.8/gems/capistrano-1.4.1/lib/capistrano/cli.rb:12:in `execute!’
from /usr/lib/ruby/gems/1.8/gems/capistrano-1.4.1/bin/cap:11
from /usr/bin/cap:18:in `load’
from /usr/bin/cap:18
So, with all that monappli / monappli.com probably I made some mistake but I have more than doublechecked the syntax so I guess theres something else I am missing..
Any idea ??
Regards
matthi
matthibcn
29 avr 07 at 12 h 28 min
Ok,
I have made some progresss since my last post, cap setup executed successfully but now i am stuck with cap deploy, allways ending with:
sudo: …/scrip/process/reaper: command not found
the files are all in place.
I feel I am near, but still not there
any help is very welcome
regards
Matthi
matthibcn
30 avr 07 at 10 h 31 min
Benedikt > Thanks
matthibcn > I have no idea where the problem is. Are you sure « sudo » is correctly installed ? If not try to run that command from the command line on your server and see what is going wrong…
Pierre Rigal
30 avr 07 at 16 h 56 min
Pierre,
I am developping on WinXP, using Eclipse for the svn-stuff.
Sudo is correctly installed, also I tried to set :use_sudo, false what ended in an permission error.
The permission for the reaper are -rw-rw-r– 1 matthi matthi
matthi is also the user for the svn
as u see, there is a missing « x », so I dont know where cap is getting the reaper from, I found it in my app, my releases and in the cap gem, in the app and in the gem the permissions are right, so I guess it´s getting the reaper out of the repository and there the permissions must be set wrong, otherwise I dont know what/who sets the permissions for the reaper, at least I think it should be executable hence the missing « x »
Unfortunatly I dont know how to set the rights in the svnfiles , hence I even dont know where the files are, I guess in the .db file, but how to open and to change ??
on win I dont know how to set the permissions , well in fact I dont think thats even possible, so I am quite sure that this is where the prob is coming from.
Thanks for your reply, and in the hope of any, even guessed, advices
regards
matthi
matthibcn
30 avr 07 at 18 h 17 min
Well… Try to modify your capistrano recepe in order to set the correct permissions on your files just after the SVN checkout step…
It should fix the permission problem…
Pierre Rigal
30 avr 07 at 18 h 56 min
Salut Pierre,
Bravo, très bon tutorial.
Cependant, avec une installation exactement comme celle que tu mets la, je remarque sur un de mes sites qu’il est impossible d’uploader des trucs plus gros que 64k. En gros je n’obtiens que les premiers 64k du fichier uploadé.
Sachant que le problème ne se présente pas en local chez moi, et ne semble pas venir de mongrel, je penche pour la configuration de mod_proxy…
A tester chez toi, je reviens dès que j’en sais un peu plus …
Merci encore
Damien Couture
14 mai 07 at 12 h 02 min
Damien, je viens de tester à l’instant un formulaire sur un site que j’ai sur mon serveur et je n’ai eu aucun problème à charger une image pesant 1,4 Mo…
Es-tu certain que cela ne vient pas de ton application ?
Pierre Rigal
14 mai 07 at 23 h 09 min
Très bon tuto, bien que je n’ai pas encore fini.
Une question et une remarque !
D’abord la question: dans un autre post je vois que tu utilises « aptana » standalone comme IDE pour rails, peut on donc se passer d’Eclipse dans ce tuto ?
Remarque: Dans la section 3.2 concernant le fichier Trac.ini il faudrait également changer dans la section:
[header_logo]
link = http://trac.monappli.com/
la valeur de link, pour éviter d’être rediriger vers example.org !
Voila, je continuerais demain
Frédéric STEMMELIN
18 mai 07 at 0 h 38 min
Galère !!!
Maintenant après l’installation du plugin webadmin je n’arrive plus a me connecter a mon site trac.
Il me présente un popup et je rentre mon login/pass puis la feneetre disparait mais je ne suis pas logué, sauf que si je vais dans settings et que je clic sur login je suis logué instantanément sans popup et je vois le bouton logout … mais si je revient sur la page principale je ne suis pas réellement logué, vraiment très étrange !!!
Si quelqu’un a une idée, je suis preneur, merci.
Frédéric STEMMELIN
18 mai 07 at 11 h 09 min
Youpii !!!!
J’ai résolu mon problème. Après avoir réinstallé trac (du coup j’ai installé la 10.4 à la main) et avoir reconstruit le répertoire trac plusieurs fois sans succès … j’ai fini par trouver la cause de mon problème.
En fait il s’agissait tadam … d’un problème de PROXY http dans la boite ou je bosse ! En gros les pages ne s’affichent pas une fois authentifié, c’est comme si vous n’êtiez pas encore authentifié, sauf pour la page settings où vous remarquer que vous êtes bien authentifié. Maintenant tout fonctionne même le panel « admin » qui vient d’apparaître à droite.
A ce propos j’ai une petite remarque: il serait judicieux de préciser que ce panel admin remplace en fait le programme en ligne de commande « trac-admin » et que vous pouvez tout faire facilement en ligne de commande. Une autre petite remarque est que la commande htpasswd qui permet de créer le mot de passe pour l’utilisateur à un paramètre « -c » pour la création du fichier et qu’il faut faire attention de ne pas remettre se paramètre si on veut mettre un mot de passe supplémentaire pour un autre utilisateur plus tard … sinon on écrase le premier fichier et donc les mots de passe des utilisateurs déjà crées.
Frédéric STEMMELIN
18 mai 07 at 16 h 35 min
Frédéric > Merci pour tes retours
Ils aideront sûrement du monde ! Pour répondre à ta question concernant Eclipse, tu peux évidement utiliser ce que tu veux comme éditeur.
L’intérêt ici était qu’éclipse intègre un module subversion très efficace ! (Module qui peut d’ailleurs être ajouté à Aptana car ce dernier est basé sur éclipse…). En fait on peut utiliser ce que l’on veut tant que l’on sait gérer correctement un dépôt SVN…
Pierre Rigal
18 mai 07 at 17 h 10 min
[...] Stoneageblog.com » Debian On Rails : Apache 2.2 + MySQL + Ruby + Rails + PHP + Mongrel + Mongrel_cluster + Subversion + Trac + Capistrano (tags: Frans subversion rails debian mongrel rubyonrails ruby apache capistrano) [...]
Steven Ghyselbrecht » links for 2007-06-11
11 juin 07 at 23 h 47 min
###très bon article ; Je l’ai scrupuleusement suivi et je cale lors de la mise en ligne « cap deploy » me retourne :
[redmine.org] executing command
[out :: redmine.org] Stopping 3 Mongrel servers…
[out :: redmine.org] !!! PID file log/mongrel.8000.pid does not exist. Not running?
[out :: redmine.org] mongrel::stop reported an error. Use mongrel_rails mongrel::stop -h to get help.
[out :: redmine.org] mongrel_rails stop -P log/mongrel.8000.pid -c /var/rails/redmine.org/current
[out :: redmine.org] !!! PID file log/mongrel.8001.pid does not exist. Not running?
[out :: redmine.org] mongrel::stop reported an error. Use mongrel_rails mongrel::stop -h to get help.
[out :: redmine.org] mongrel_rails stop -P log/mongrel.8001.pid -c /var/rails/redmine.org/current
[out :: redmine.org] !!! PID file log/mongrel.8002.pid does not exist. Not running?
[out :: redmine.org] mongrel::stop reported an error. Use mongrel_rails mongrel::stop -h to get help.
[out :: redmine.org] mongrel_rails stop -P log/mongrel.8002.pid -c /var/rails/redmine.org/current
[out :: redmine.org] Starting 3 Mongrel servers…
command finished
. Alors que les fichiers PID sont bien present :
/var/rails/redmine.org/shared/log$ ls
mongrel.8000.pid mongrel.8001.pid mongrel.8002.pid mongrel.log production.log
. Certainement un petit réglage dans le nom des chemins ou d’un lien manquant quelque part, voir d’adapter l’un des fichiers de config de mongrel ou ….
.
. Un petit éclairage me serais bien utile.
merci
philuser
19 juin 07 at 11 h 51 min
Peut être cela vient il du lien de /var/rails/redmine.org/current/log vers /var/rails/redmine.org/shared/log qui n’est pas fait ?
Sinon, sur ton serveur peux tu exécuter « /etc/init.d/mongrel_processes start » pour voir ce qu’il te dis. Si il a un problème pour démarrer, efface les .pid et recommence.
Pierre Rigal
19 juin 07 at 16 h 36 min
Bonjour,
On a suivi cet excellent tutoriel et lors de l’accès à http://trac.monappli.com, il manquait l’onglet « Browse repository »… En recherchant sur d’autres sites, on a trouvé une piste : installer le module fcgi d’Apache. Maintenant cela marche, mais est-ce que c’est vraiment la solution de notre problème ou y’a t’il une autre explication ?
Merci
garvio
3 juil 07 at 8 h 37 min
Je viens de vérifier ma configuration et je n’ai pas le module fcgi d’installé (ls /etc/apache2/mods-enabled/). J’ai par contre le module cgi :
$ ls /etc/apache2/mods-enabled/
alias.load cache.load dir.load proxy.load
auth_basic.load cgi.load env.load proxy_balancer.load
authn_file.load dav.load mime.load proxy_http.load
authz_default.load dav_svn.conf mod_python.load rewrite.load
authz_groupfile.load dav_svn.load negotiation.load setenvif.load
authz_host.load deflate.conf php4.conf status.load
authz_user.load deflate.load php4.load
autoindex.load dir.conf proxy.conf
Pierre Rigal
5 juil 07 at 21 h 43 min
Salut Pierre,
Ton article est à tomber … d’exhaustivité …
Je dispose également d’un serveur dédié debian sous dedibox et débute en programmation (et encore plus en ce qui concerne ROR), je pense utiliser ton article concernant la partie cluster (Mongrel_Cluster) afin d’optimiser les perfs …
Encore félicitations à toi
Fonkyone
12 août 07 at 20 h 43 min
Salut pierre ;
Je viens de tomber sur ce tutorial que je trouve très bien rédigé.
Ayant besoin d’installer l’application Redmine, je suis entrain de suivre ton tutorial. Pourrais-tu approfondir pour ce qui concerne l’installation du application telle que redmine avec mongrel et apache ?
Merci.
Nuxwin
23 sept 07 at 18 h 47 min
Je ne connais pas Redmine, je ne l’ai jamais testé. Cependant j’ai déjà utilisé [ClockingIT](http://www.clockingit.com/) qui semble lui ressembler. La méthode d’installation n’est pas différente entre une appli rails complexe telle que redmine ou clockingit et une appli rails telle que je la présente.
Dans votre cas vous n’avez pas besoin de déployer subversion ou trac, seulement la partie mongrel et apache. Après l’installation de l’environnement (ruby, rails, mongrel, etc.) vous pouvez directement passer à la conf d’apache et des mongrel_cluster. (dans le vhost).
Pierre Rigal
23 sept 07 at 19 h 40 min
Après un peu plus de lecture sur Redmine je me rends compte que ma réponse est un peu à côté des clous ! J’imagine que votre objectif est de remplacer Trac par Redmine ?
Dans ce cas là je ne sais pas trop comment se passe l’interface avec subversion, il faudrai tester. En tout cas Redmine semble être un projet bien sympa…
Pierre Rigal
23 sept 07 at 19 h 46 min
Re ;
Oui, la première réponse était effectivement à côté des clous.
Redmine est effectivement un gestionnaire de projet comme trac mais personnellement, je le trouve beaucoup plus avancé.
En fait, ma question était simplement de savoir ce qu’il fallait faire pour faire fonctionner cette application via serveur mongrel couplé à apache car via fcgi, c’est une vrai galère et en ce qui concerne webrick, cela ne me convenais pas !
En définitif, j’ai trouvé la solution tout seul grâce à ton tuto. Il ma suffit de créer le fichier /var/rails/redmine/config/mongrel_cluster.yml avec le contenu que tu propose (sans cette ligne : cwd: /var/rails/monappli.com/current) et ensuite, de lancer cette commande pour démarrer la chose :
mongrel_rails cluster::start
Voilà. Merci pour ton tuto.
Nuxwin
23 sept 07 at 22 h 37 min
hi Pierre!
I was wondering if there is an English version of this tutorial? My French is basically non-existent – and when I try to do google translation or altavista – it doesn’t make sense in some places.
Thank you
Nick G.
27 sept 07 at 20 h 29 min
Hi Nick ;
If you want, I can translate this howto for you. You’re interested ?
Pierre, si tu veux le faire, dis le moi, sinon, donne moi l’autorisation.
Merci.
nuxwin
28 sept 07 at 20 h 38 min
Nick > Thanks to Nuxwin you will have an english version
Nuxwin > Merci de ta proposition, c’était sur ma todo list car cela m’a déjà été demandé quelques fois, c’est sympa de te proposer ! Contacte moi par email afin qu’on s’organise et que je t’ouvre un accès sur le blog. ++
Pierre Rigal
29 sept 07 at 19 h 06 min
Great Nuxwin!!!!
) would be great!!
Where can I read it??
(Either English or Russian (if you speak it
Nick G.
3 oct 07 at 21 h 04 min
Salut,
J’aimerais héberger plusieurs applis rails sur mon serveur et je n’ai pas trop compris comment faire.
Comment faire un 2e cluster et l’intégrer dans la config apache ?
Merci
STef
STef
3 oct 07 at 22 h 10 min
Oups, j’ai oublié de te répondre…
Donc ce n’est pas très compliqué, il te suffit de créer plusieur virtualhost différents (en gros il te faut reprendre le point 3.5 autant de fois que tu le souhaite…)
Pierre Rigal
11 oct 07 at 17 h 14 min
@ Pierre ;
Ok pour la traduction de ton tuto. Si tu souhaite me donner un accès, envoi moi les identifiants par mail à cette adresse redactionATnuxwin.com.
Sinon, afin d’épurer ton tuto et éviter aux lecteurs d’avoir à taper X commandes, tu pourrais par exemple remplacer ceci :
# sudo ln -s /usr/bin/ruby1.8 /usr/local/bin/ruby
# sudo ln -s /usr/bin/irb1.8 /usr/local/bin/irb
# sudo ln -s /usr/bin/ri1.8 /usr/local/bin/ri
# sudo ln -s /usr/bin/rdoc1.8 /usr/local/bin/rdoc
Par ceci :
sudo ln -s /usr/bin/{ruby1.8,irb1.8,ri1.8,rdoc1.8} /usr/local/bin
Le résultat est identique.
nuxwin
13 oct 07 at 1 h 03 min
Oup,
Pour la commande, oublie.
nuxwin
13 oct 07 at 1 h 30 min
Bonsoir ;
J’ai bien reçu les identifiants. Merci.
Sinon, en ce qui concerne mon poste précédent, la bonne commande est la suivante :
for f in /usr/bin/*1.8; do ln -s $f /usr/local/bin/`basename $f 1.8`; done
Voilà.
nuxwin
14 oct 07 at 20 h 38 min
Merci Pierre pour ce tutorial.. j’ai commandé/reçu ma dedibox Samedi, et elle tourne Debian 4.0/Plesk 8.2.1
Installé Rails/Mongrel/Capistrano… pas encore testé
Jusqu’à présent je tournais en hébergé sur une autre Dedibox, et ja n’avais pas encore eu à me confronter à la gestion du système 5c’est + facile en local avec OS X…)
avant d’aller + loin , j’ai une question stupide : Plesk (VHSC pour toi…) est simple d’utilisation, et permet de créer des utilisateurs et des domaines…
ex : http://www.domaine1.net et http://www.domaine2.org: est-ce si simple que celà ? ne faut-il pas ajouter des infos pour Apache ou PLex/VHSC les rajoutent automatiquement ? ça me semble trop simple …. alors je doute et comme j’attends la propagation du DNS, je n’ai pas pu tester…
merci de tes infos
kadoudal bzh
Kadoudal
19 nov 07 at 0 h 34 min
Bon… j’ai trouvé comment installer les domaines/sous-domaines sur ma dedibox… Plesk 8.2 s’occupe de tout… enfin presque ..
après avoir suivi tes instructions jusqu’au Trac .. arrêt avant la configuration Apache, ensuite :
- modifié les DNS chez l’hébergeur de mon domaine ‘domaine1.net’ :
sd-xxxx.dedibox.fr et nssec.dedibox.fr
attendu quelques minutes seulement… le domaine etait en parking donc la propagation n’a pas été longue….
- créé les domaines / sous-domaines avec Plesk
domaine1.net et trac.domaine1.net
- ecrits les host.vconf pour chaque domaine/sous-domaine si nécessaire (ex / j’utilise trac.domaine1.net donc le vconf va dans var/www/hosts/domaine1.net/subdomains/trac/conf )
- relancé Plesk
/usr/local/psa/admin/sbin/websrvmng -u –vhost-name=trac.domaine1.net
et c’est tout !!! je donne ça au cas où ça intéresserais certains…
kadoudal
19 nov 07 at 15 h 18 min
Est-ce qu’il n’y a pas une étape qui manque avant la mise en ligne ?
lorsque qu’on relance apache, tu indiques bien « Ne tenez pas compte du warning concernant l’existence du répertoire /var/rails/monappli/current/public il sera créé par le déploiement capistrano.’
il n’y a donc rien dans ‘monappli’ puisque l’application est encore dans le repository….
donc si on lance :
.6 – Mise en ligne !
cap setup
… cela devrait générer l’environnement Capistrano sur votre serveur
… on obtiens :
/usr/lib/ruby/gems/1.8/gems/capistrano-2.1.0/lib/capistrano/configuration/loading.rb:184:in `find_file_in_load_path’: no such file to load — config/deploy (LoadError)
ce qui semble normal….
kadoudal
21 nov 07 at 12 h 32 min
Bonjour Kadoudal,
Lors de la rédaction de cet article j’ai pris le temps de le tester sur ma dédibox et sur une machine virtuelle vmware sous debian… Je pense donc que la manipulation marchais alors.
Depuis de nombreux paquets ont été mis à jour (notemment capistrano qui a changé de version majeure), il faut donc voir si les commandes n’ont pas changé depuis et si leur rôle est toujours le même…
Dans tous les cas de mémoire, la commande créait bien l’environnement et il ne fallais en aucun cas créer la structure (current/public/etc…) car elle est entièrement gérée par capistrano.
Pierre Rigal
21 nov 07 at 12 h 40 min
Salut Pierre
Effectivement j’ai installé Capistrano 2 donc je vais re-testé..
Comme je ne suis qu’au début de l’install de ma dédibox, j’ai décidé de tout scratcher et de recommencer à zéro .. (Debian 4 + Plesk 8.2.1, puis Rails, Mongrel, Capistrano)
petit problème …. ayant tout viré je ne devrais plus rien avoir de Trac…, mais mais lorsque j’indique un sous-domaine type dev.aelmat.net, pas de problème -> non trouvé, si j’indique trac.aelmat.dev… le favicon de trac apparait ! et ça mouline , puis time out….. et pourtant je n’ai plus de vhost.conf pour trac.aelmat.net…. pourquoi Apache ne réponds pas de la même manière … avec un système tout neuf de chez neuf ?
il y a-t-il des fichiers cachés ?
note : Kadoudal… bzh, j’habite à 500m de son mausolé !
kadoudal
22 nov 07 at 20 h 35 min
j’ai réinstallé ma dedibox Debian 4.0 + Plesk 8.2.1 ( je sais que ce n’est pas ta distri.. )
j’accède à ma console Plesk via SSL sans problème , mais lorsque je veux installer Rails ..
sd-3397:~# gem install rails –include-dependencies
INFO: `gem install -y` is now default and will be removed
INFO: use –ignore-dependencies to install only the gems you list
ERROR: While executing gem … (Gem::Exception)
SSL is not installed on this system
alors que :
d-3397:~# a2enmod ssl
This module is already enabled!
j’y perd mon latin.. une piste ???
kadoudal
25 nov 07 at 2 h 52 min
Enfin ma première appli Rails standard déployée , sur Dedibox Debian 4, Plesk 2.1, cluster Mongrel, Capistrano 2.1
je me suis beaucoup inspiré de ton tuto, avec quelques modifs, dues au fait que je gère du multi-clients, multi-projets avec Plesk (donc des sous-domaines dans une structure Apache 2 un peu différente), mais aussi dues aux versions…. en particulier Capistrano 2 …
j’attaque les migrations avec Capistrano, puis le multi-staging… , encore du taff, masi merci pour m’avoir mis sur la voie céleste !!!
kadoudal
4 déc 07 at 19 h 06 min
Tiens j’étais passé à coté de tes derniers commentaires. Mais c’est pas si mal, du coup tu as fait les questions et les réponses
Il doit être pas mal ton serveur au final, tu me diras un peu ce que ça donne en montée en charge une fois que tu auras des clients !
Personnellement, je teste actuellement la version open source de [litespeed](http://www.litespeedtech.com/home.html) et ruby-lsapi. Le couple semble bien marcher et c’est surtout très facile en mettre en place car bien documenté. A suivre.
Pierre Rigal
28 déc 07 at 23 h 08 min
Bonjour,
j’ai un petit problème je n’arrive pas à atteindre trac.monappli.com ! Auriez vous une solution ?
Merci d’avance
Salutations
LeBasque
Lebasque
29 fév 08 at 17 h 28 min
partition separee sur mon serveur dedie, j’ai su mal à comprendre, j’avoue
en tout cas merci pour ce bilmlet intéresant ! c’est toujours sympathique de passer su rce blog
mrbark
24 mar 08 at 13 h 54 min
Salut Pierre,
Ton tuto est génial, et merci pour ton énorme boulot. Malheureusement, il a un peu vieillit, notamment en ce qui concerne le déploiement via capistrano (v2.x)
J’ai trouvé un petit site (en anglais désolé) qui je l’espère aidera ceux qui comme moi ont découvert ton blog un an trop tard
http://www.rubyrobot.org/article/deploying-rails-20-to-mongrel-with-capistrano-21
Bonne continuation
Florent
7 mai 08 at 12 h 02 min
Ne serait-il pas utile de mettre à jour rubygems (version 1.1.1) ?
gem update –system
Superbe tuto, et de plus en français !
Florent Vaucelle
15 mai 08 at 10 h 26 min
Super ce tuto pour installer une configuration LAMP complète ! Merci
Sun Location
11 sept 09 at 3 h 18 min
Salut,
)
sympa ton installe.
Moi aussi je viens du PHP et c’est pas facil de tout rapprendre.
Par contre je suis d’accord avec toi concernant l’install de ROR sur un Debian, le LAMP est tellement simple (suffit de faire apt-get phpmyadmin)!
(P.S.:Ton tuto ne marche plus avec ruby1.9
Pierhomme
5 oct 09 at 13 h 55 min
[...] Très bon article: http://www.stoneageblog.com/articles/2007/01/11/debian-on-rails-apache-2-2-mysql-ruby-rails-php-mong… [...]
Ubuntu: Installer un Environnement de développement pour Ruby On Rails » ZedTuX On R00t
7 nov 09 at 19 h 22 min