Debian On Rails : Apache 2.2 + MySQL + Ruby + Rails + PHP + Mongrel + Mongrel_cluster + Subversion + Trac + Capistrano

Posted by Pierre Rigal on janvier 11, 2007

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à.

  1. Objectifs
  2. Installation système et applications
    1. Installation - Debian et utilitaires
    2. Installation - Apache 2.2 & PHP5 (ou 4)
    3. Installation - MySQL
    4. Installation - Subversion
    5. Installation - Ruby, Rails and friends ;)
    6. Installation - Mongrel, Mongrel_cluster, Capistrano
    7. Installation - Trac
  3. Etude de cas : “monappli.com”
    1. Création du repository Subversion
    2. Configuration Trac & Accès Subversion
    3. Import de “monappli” dans Subversion
    4. Configuration de Capistrano
    5. Configuration Apache/Mongrel/Mongrel_Cluster
    6. Mise en ligne !
  4. Limites et idées d’amélioration
  5. 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:\WINDOWS\system32\drivers\etc\, 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 :

  1. Project Name [My Project]> Mon appli
  2. Database connection string [sqlite:db/trac.db]>
  3. Repository type [svn]>
  4. Path to repository [/path/to/repos]> /var/svn/monappli
  5. 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 :

<VirtualHost *>
ServerAdmin votreemail@monappli.com
ServerName trac.monappli.com

DocumentRoot /var/trac/monappli
<Location />
    SetHandler mod_python
    PythonHandler trac.web.modpython_frontend
    PythonOption TracEnv /var/trac/monappli
    PythonOption TracUriRoot /
    PythonPath "sys.path + ['/var/trac/monappli']"
</Location>

ErrorLog  /var/log/apache2/error.trac.monappli.com.log
CustomLog /var/log/apache2/access.trac.monappli.com.log combined

<Location /svn>
    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
    <LimitExcept GET PROPFIND OPTIONS REPORT> 
        Require valid-user
    </LimitExcept>
</Location>

<Location "/login">
    AuthType Basic
    AuthName "Trac login"
    AuthUserFile /etc/apache2/dav_trac_svn.passwd
    Require valid-user
</Location>

</VirtualHost>

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.

  1. Copiez collez le fichier config/database.yml dans le même répertoire et renommez le en database.yml.prd (Version pour le serveur)
  2. Ajoutez ce fichierau contrôle de version. Clic droit > Team > Add To Version Control
  3. Renomez database.yml en database.yml.example. (Version pour les autres développeurs)
  4. 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”
  5. Mettez à jour votre serveur subversion. Clic droit sur le nom du projet > Team > Commit (Mettez un commentaire comme “Gestion du fichier database.yml”)
  6. Recréez votre database.yml en local dans le répertoire config (File > new > File).
  7. 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 :

  1. Clic droit sur le répertoire log > Team > Set property > Property name = svn:ignore, dans le champs texte tappez “*.log”
  2. 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 :

  1. Clic droit sur le répertoire tmp/cache > Team > Set property > Property name = svn:ignore, dans le champs texte tappez “*” (pour tout ignorer)
  2. Clic droit sur le répertoire tmp/sessions > Team > Set property > Property name = svn:ignore, dans le champs texte tappez “*” (pour tout ignorer)
  3. Clic droit sur le répertoire tmp/sockets > Team > Set property > Property name = svn:ignore, dans le champs texte tappez “*” (pour tout ignorer)
  4. 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 !) :

  1. 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.
  2. Capistrano checke le serveur subversion à la recherche de la dernière version.
  3. Capistrano archive monappli.com dans un répertoire daté
  4. Capistrano récupère la dernière version depuis le serveur subversion et la met à la place de la version archivée
  5. 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 modrewrite et du moddeflate :

<VirtualHost *>
ServerName monappli.com
DocumentRoot /var/rails/monappli.com/current/public

<Directory "/var/rails/monappli.com/current/public">
  Options FollowSymLinks
  AllowOverride None
  Order allow,deny
  Allow from all
</Directory>

<Proxy balancer://mongrel_cluster>
     BalancerMember http://127.0.0.1:8000
     BalancerMember http://127.0.0.1:8001
     BalancerMember http://127.0.0.1:8002
    Allow from localhost
</Proxy>

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
</VirtualHost>

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” :

Trackbacks

Use this link to trackback from your own site.

Comments

Leave a response

  1. guillaume ven, 12 jan 2007 12:31:55 CET

    Merci, super article qui va beaucoup m’aider !!!!!!!!!!

  2. Tarax sam, 13 jan 2007 04:15:52 CET

    Sidéral ! :-D Je me l’attaque de suite… retours à venir.

    Bien à toi Jé

    PS: le fichier host sous W$ est dans: C:\WINDOWS\system32\drivers\etc\

  3. Pierre Rigal jeu, 18 jan 2007 10:19:57 CET

    Merci Tarax, je modifie !

  4. Nicolas Mérouze ven, 19 jan 2007 19:53:02 CET

    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 :)

  5. lighty dim, 21 jan 2007 19:19:50 CET

    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

  6. Pierre Rigal dim, 21 jan 2007 22:13:29 CET

    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 …

  7. lighty lun, 22 jan 2007 16:35:35 CET

    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é ;)

  8. lighty lun, 22 jan 2007 17:59:38 CET

    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 &amp;&amp;\n    mkdir -p -m 777 /u/apps/shared/log &amp;&amp;\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=&gt;{:no_release=&gt;true}, :desc=&gt;"Set up the expected application directory structure on all boxes"}, but no servers matched (RuntimeError)
    

    Une idée d’où ça peut venir ?

  9. Pierre Rigal lun, 22 jan 2007 19:05:14 CET

    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 …

  10. lighty mar, 23 jan 2007 16:54:39 CET

    Salut, Merci ! C’est ok maintenant, par contre, je m’étais trompé en écrivant le commentaire, c’est wmf2eps, desolé :)

  11. Pascal Gautherot lun, 12 fév 2007 13:51:09 CET

    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 :-)

  12. Pierre Rigal lun, 12 fév 2007 22:09:36 CET

    J’avoue !

    Je modifie ;)

  13. Anonyme mer, 14 fév 2007 10:06:45 CET

    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…

  14. hoksitan jeu, 15 fév 2007 09:49:21 CET

    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 ?

  15. Pierre Rigal jeu, 15 fév 2007 12:49:22 CET

    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…

  16. hoksitan jeu, 15 fév 2007 14:37:52 CET

    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. :)

  17. Pierre Rigal ven, 16 fév 2007 12:26:23 CET

    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 !

  18. […] 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. […]

  19. alex jeu, 15 mar 2007 17:09:43 CET

    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

  20. oool mer, 21 mar 2007 15:43:09 CET

    Excellent article, bravo!

  21. yoann mar, 17 avr 2007 08:52:18 CEST

    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 ?)

  22. Pierre Rigal mer, 18 avr 2007 22:42:53 CEST

    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, 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…

  23. Benedikt sam, 28 avr 2007 10:20:21 CEST

    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?]

  24. matthibcn dim, 29 avr 2007 12:28:46 CEST

    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 &amp;&amp;\n    mkdir -p /u/apps/ /u/apps/releases /u/apps/shared /u/apps/shared/system &amp;&amp;\n    mkdir -p /u/apps/shared/log &amp;&amp;\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=&gt;{:no_release=&gt;true}, :desc=&gt;"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

  25. matthibcn lun, 30 avr 2007 10:31:47 CEST

    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

  26. Pierre Rigal lun, 30 avr 2007 16:56:30 CEST

    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…

  27. matthibcn lun, 30 avr 2007 18:17:58 CEST

    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

  28. Pierre Rigal lun, 30 avr 2007 18:56:55 CEST

    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…

  29. Damien Couture lun, 14 mai 2007 12:02:08 CEST

    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

  30. Pierre Rigal lun, 14 mai 2007 23:09:02 CEST

    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 ?

  31. Frédéric STEMMELIN ven, 18 mai 2007 00:38:11 CEST

    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 :)

  32. Frédéric STEMMELIN ven, 18 mai 2007 11:09:51 CEST

    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.

  33. Frédéric STEMMELIN ven, 18 mai 2007 16:35:09 CEST

    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.

  34. Pierre Rigal ven, 18 mai 2007 17:10:14 CEST

    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…

  35. Steven Ghyselbrecht » links for 2007-06-11 lun, 11 juin 2007 23:47:31 CEST

    […] 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) […]

  36. philuser mar, 19 juin 2007 11:51:39 CEST

    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

  37. Pierre Rigal mar, 19 juin 2007 16:36:25 CEST

    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.

  38. garvio mar, 03 juil 2007 08:37:47 CEST

    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

  39. Pierre Rigal jeu, 05 juil 2007 21:43:23 CEST

    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
    
  40. Fonkyone dim, 12 août 2007 20:43:41 CEST

    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

  41. Nuxwin dim, 23 sept 2007 18:47:01 CEST

    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.

  42. Pierre Rigal dim, 23 sept 2007 19:40:38 CEST

    Je ne connais pas Redmine, je ne l’ai jamais testé. Cependant j’ai déjà utilisé ClockingIT 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).

  43. Pierre Rigal dim, 23 sept 2007 19:46:37 CEST

    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…

  44. Nuxwin dim, 23 sept 2007 22:37:03 CEST

    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.

  45. Nick G. jeu, 27 sept 2007 20:29:41 CEST

    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

  46. nuxwin ven, 28 sept 2007 20:38:20 CEST

    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.

  47. Pierre Rigal sam, 29 sept 2007 19:06:53 CEST

    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. ++

  48. Nick G. mer, 03 oct 2007 21:04:12 CEST

    Great Nuxwin!!!! Where can I read it?? (Either English or Russian (if you speak it :-) ) would be great!!

  49. STef mer, 03 oct 2007 22:10:14 CEST

    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

  50. Pierre Rigal jeu, 11 oct 2007 17:14:24 CEST

    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…)

  51. nuxwin sam, 13 oct 2007 01:03:02 CEST

    @ 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.

  52. nuxwin sam, 13 oct 2007 01:30:21 CEST

    Oup,

    Pour la commande, oublie.

  53. nuxwin dim, 14 oct 2007 20:38:28 CEST

    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à.

  54. Kadoudal lun, 19 nov 2007 00:34:16 CET

    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 : www.domaine1.net et 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

  55. kadoudal lun, 19 nov 2007 15:18:26 CET

    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…

  56. kadoudal mer, 21 nov 2007 12:32:07 CET

    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….

  57. Pierre Rigal mer, 21 nov 2007 12:40:24 CET

    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.

  58. kadoudal jeu, 22 nov 2007 20:35:27 CET

    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é !

  59. kadoudal dim, 25 nov 2007 02:52:22 CET

    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 ???

  60. kadoudal mar, 04 déc 2007 19:06:14 CET

    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 !!!

  61. Pierre Rigal ven, 28 déc 2007 23:08:21 CET

    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 et ruby-lsapi. Le couple semble bien marcher et c’est surtout très facile en mettre en place car bien documenté. A suivre.

  62. Lebasque ven, 29 fév 2008 17:28:58 CET

    Bonjour,

    j’ai un petit problème je n’arrive pas à atteindre trac.monappli.com ! Auriez vous une solution ?

    Merci d’avance

    Salutations

    LeBasque

  63. mrbark lun, 24 mar 2008 13:54:57 CET

    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 :)

  64. Florent mer, 07 mai 2008 12:02:02 CEST

    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

  65. Florent Vaucelle jeu, 15 mai 2008 10:26:27 CEST

    Ne serait-il pas utile de mettre à jour rubygems (version 1.1.1) ?
    gem update —system

    Superbe tuto, et de plus en français !

Comments (Syntaxe Markdown)