Installation de Redmine sur debian etch

On cherche à installer le gestionnaire de projet Redmine (http://www.redmine.org/) sur une une installation de Debian Etch en vserver.
On considère qu'on a déjà installé une plateforme complète Ruby on Rails sur cette Debian.

On veut aussi à la fois déployer Redmine sur la version de Rails en cours (la 2.1.1 à la date de ce billet) et profiter d'une version gérant les soumissions de tickets par e-mail, ce que ne fait pas Redmine 0.7.3 stable. On va donc aller chercher dans les versions supérieures (càd à partir de la livraison 1623 et supérieures).
Il faudra donc, s'il n'y est pas déjà installer un client svn sur la plateforme :

sudo apt-get install subversion


On crée aussi un user redmine :

sudo adduser redmine


A partir de là, on doit pouvoir travailler seulement à partir du compte redmine (on peut le déclarer temporairement sudoer pour finir confortablement l'install sans jongler avec les comptes)

ssh redmine@rails.univ.run


Rails

On s'assure d'avoir la dernière version de rails

sudo gem update          (penser à mettre à jour la variable d'environnement http_proxy si nécessaire)
rails -v                            => Rails 2.1.1


Récupération Redmine

On va le chercher dans le trunk du repository svn :  http://redmine.rubyforge.org/svn/trunk

svn co http://redmine.rubyforge.org/svn/trunk


(si ça ne passe pas il y a peut-être un problème de déclaration du proxy dans svn : nano .subversion/servers et dans la zone [globals], indiquer le proxy et son port )

Création de la base données mysql


Avant tout, on vérifie, surtout si on est sur un vserver sans adresse 127.0.0.1, que mysql écoute bien sur l'IP du serveur :

sudo nano /etc/mysql/my.cnf
bind-address            = 10.10.1.23



On s'assure que notre base de données mysql est bien protégée par un mot de passe et on crée la base :
sudo mysqladmin -u root password nouveau_mot_de_passe
mysql -u root -p
create database redmine character set utf8;


On crée un utilisateur mysql pour redmine :

grant all privileges on redmine.* to 'redmine'@'localhost' identified by 'p4sSw0rD' with grant option;
quit


Configuration de Redmine

On prépare le fichier de configuration des accès à la base de données :

cd trunk
cp config/database.yml.example config/database.yml
nano config/database.yml
production:
adapter: mysql
database: redmine
host: localhost
username: redmine
password: p4sSw0rD
  socket: /var/run/mysqld/mysqld.sock                (<= ne pas oublier socket si différent de /tmp/mysql.sock attendu par Rails par défaut)


On crée les tables de la base redmine :

rake db:migrate RAILS_ENV="production"


Et on charge la configuration par défaut et on choisit la langue au passage :

rake redmine:load_default_data RAILS_ENV="production"


Normalement tout est bon dès lors. Cependant si vous avez fait une installation dans un autre compte, il faut donner des permissions au user redmine :

mkdir tmp
sudo chown -R redmine:redmine files log tmp
sudo chmod -R 755 files log tmp


On teste donc avec webrick :

ruby script/server -e production


Et on regarde le résultat sur http://monserveur:3000
Il est possible de commencer le paramétrage de l'appli en se connectant sous admin/admin puis en allant dans Administration/Settings

Pour faire vraiment propre, on édite config/environment.rb, et on change la version de rails par défaut :

RAILS_GEM_VERSION = '2.1.1' unless defined? RAILS_GEM_VERSION


On force aussi l'environnement de production pour les lancements de l'application hors d'un serveur ruby en décommentant la ligne :

ENV['RAILS_ENV'] ||= 'production'


Installation de RMagick

L'installation de RMagick est optionnelle pour RedMine. Elle permet d'afficher les diagrammes de Gantt sous la forme d'une image png. Elle nécessite par ailleurs l'installation préalable de ImageMagick.
Toute la procédure est décrite ici.

Configuration de Apache

On se place ici dans le cas où on a déjà installé apache avec mod_rails (voir ce tuto).
On crée le virtual host ad hoc :
sudo nano /etc/apache2/sites-avalaible/redmine.conf
<VirtualHost 10.10.1.23:80>
ServerName redmine.univ.run
DocumentRoot /home/redmine/trunk/public
      <Directory "/home/redmine/trunk/public">
        Options FollowSymLinks
     AllowOverride None
     Order allow,deny
Allow from all
      </Directory>
</VirtualHost>

sudo a2ensite redmine.conf


A partir de là, Redmine est visible directement sur http://redmine.univ.run, à la màj du DNS près.

Configuration du SMTP

Envoi

Pour que Redmine puisse envoyer des mails, il faut paramétrer la configuration smtp, toujours dans config/email.yml

cp config/email.yml.example config/email.yml
nano email.yml
production:
delivery_method: :smtp
smtp_settings:
address: smtp.univ-reunion.fr
port: 25
domain: univ-reunion.fr


Réception

Pour que Redmine puisse recevoir des mails, il existe 3 méthodes :
- faire une redirection depuis un serveur smtp vers un script qui récupérer le mail et le transmettre à un web service de redmine : traitement immédiat, mais conf à faire sur son MTA
- se comporter comme un client IMAP : facile à configurer mais on fait tourner un cron qui vérifie les mails
- récuperer les mails sur l'entrée standard : nécessite de recharger toute la conf à chaque traitement

On se base sur le méthode 1 : un serveur SMTP et du forwarding

Si on n'en a pas sous la main, il faut commencer par installer un serveur SMTP, par exemple Postfix :

sudo apt-get install postfix


Ensuite on configure la bête :

sudo nano /etc/postfix/main.cf

smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
biff = no

# appending .domain is the MUA's job.
append_dot_mydomain = no

# Uncomment the next line to generate "delayed mail" warnings
#delay_warning_time = 4h

# TLS parameters
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${queue_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${queue_directory}/smtp_scache

# See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for
# information on enabling SSL in the smtp client.

myhostname = rails.univ.run
alias_maps = hash:/etc/postfix/aliases                    (<= attention, j'ai modifié ces deux lignes : /etc/postfix/aliases au lieu de /etc/aliases)
alias_database = hash:/etc/postfix/aliases
myorigin = rails.univ.run
mydestination = rails.univ.run, localhost.univ.run, localhost
relayhost = smtp.univ.run
mynetworks = 10.10.1.23/32
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all


On active le WS dans Redmine : Administration / configuration /Emails entrant => activer le WS, générer une clé et sauver.
On crée un fichier d'alias pour envoyer les messages vers le client du web service de redmine :

sudo nano aliases

projets-lim: "|/home/redmine/trunk/extra/mail_handler/rdm-mailhandler.rb --url http://rails.univ.run --key CléGénérée --project meltingpot --tracker Evolution --allow-override tracker,priority,category,project"

(le nom du tracker ou autre attribut est bien la valeur française lue ex: "Evolution", idem dans le texte du mail, si spécifié)

On génére la base d'aliases et on relance postfix :
sudo postalias /etc/postfix/aliases
sudo /etc/init.d/postfix reload


On n'oublie pas de rendre le script de traitement des mails exécutable :

sudo chmod a+x /home/redmine/trunk/extra/mail_handler/rdm-mailhandler.rb


Désormais, les mais envoyés à projets-lim@rails.univ.run généreront un ticket dans le projet "meltingpot" par défaut, ou dans le projet désigné par "Project : NomDuProjet" dans le corps du mail.

Sauvegarde


Il est judicieux de sauver la base et les fichiers.

mkdir /home/jerome/sauverdemine
mkdir /home/jerome/sauverdemine/files
mkdir /home/jerome/sauverdemine/database
nano /home/jerome/sauveredmine/sauveredmine.sh

# Database
/usr/bin/mysqldump -ulogin -ppassword redmine | gzip > /home/jerome/sauveredmine/database/redmine_`date +%y_%m_%d`.gz

# Attachements
rsync -a /home/redmine/trunk/files/ /home/jerome/sauveredmine/files/


Puis on programme tout ça :

chmod a+x /home/jerome/sauveredmine/sauveredmine.sh
sudo crontab -e
# m h  dom mon dow   command
00 21 * * * /home/jerome/sauveredmine/sauveredmine.sh > /home/jerome/sauveredmine/sauveredmine.log


L'idéal bien sûr étant ensuite de sauver le répertoire sauveredmine sur une autre machine avec rsync. Voir méthode ici.

Mise à jour de Redmine

http://www.redmine.org/wiki/redmine/RedmineUpgrade

On préfèrera les mises à jours via svn. Avant ceci, on s'assurera d'avoir les pré-requis ad hoc par rapport à la version de redmine visée :
http://www.redmine.org/wiki/redmine/RedmineInstall#Requirements

On sauve par précaution :

rsync -av /home/redmine/trunk/ /home/redmine/trunk.save/


On sauve aussi les bases, autant utiliser le script codé précédemment :
/home/jerome/sauveredmine/sauveredmine.sh

Et on lance l'update :
cd /home/redmine/trunk
svn update


Puis on met à jour la base de données et les éventuels plugins :
rake db:migrate RAILS_ENV="production" 
rake db:migrate_plugins RAILS_ENV="production"


On supprime les sessions existantes :
rake tmp:cache:clear
rake tmp:sessions:clear


Si on vient de passer à Rails 2.2.2, il convient de forger le session_store et de mettre à jour les migrations de plugins
rake config/initializers/session_store.rb
rake db:migrate:upgrade_plugin_migrations RAILS_ENV="production"



On n'oubliera pas de redonner les droits d'execution du mail handler

sudo chmod a+x /home/redmine/trunk/extra/mail_handler/rdm-mailhandler.rb







Comments