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/trunksvn 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/RedmineUpgradeOn 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#RequirementsOn 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