Introduction
Le besoin est simple : avoir un serveur Redmine pour la gestion de projets.
Ce tuto doit vous permettre de créer une machine virtuelle avec un serveur accessible via une url (ex : http://redmine.jbnet.lan) dans votre réseau local.
Il ne couvre pas les aspects de la gestion de projets uniquement sa mise en place technique.
Ce tuto fait parti d’un ensemble qui conduit à créer une infrastructure de serveurs web avec différents rôles : “[Tuto – Infrastructure Web – Debian 8] – Présentation et objectifs”.
Vous devez avoir préparé et cloné la machine gabarit pour continuer.
Voir “[Tuto – Infrastructure Web – Debian 8] – La machine gabarit” puis “[Tuto – Infrastructure Web – Debian 8] – Cloner et préparer la machine gabarit“ et enfin soit le tuto sur un serveur LAMP (genre All In One), soit celui décrivant l’installation d’un serveur web dans une infrastructure.
Vous devez avoir des connaissances sur l’utilisation de Linux via une connexion SSH ainsi qu’une certaine aisance avec les commandes d’un shell Linux.
Comptez env. 1h30 de configuration en partant d’une VM fraichement clonée et paramétrée sur votre réseau.
… là encore, je suis large !
Modifications et mises à jour du document
26/09/2015 : Création initiale
Avertissement
Cette machine est construite pour vous permettre de créer un serveur sur un réseau local.
Il ne faut en aucun cas lui donner un accès public à partir d’internet.
Par conséquent, vous êtes seul responsable si vous vous contentez de suivre ce tutoriel pour une mise en ligne d’un serveur web sur internet avec un accès public.
Vous voilà averti, passons aux choses sérieuses.
La machine virtuelle
Avant de démarrer votre nouvelle VM qui va accueillir Redmine, vérifiez que vous avez au moins configuré 1Go de mémoire.
Si vous avez utilisé un serveur LAMP, c’est à dire avec MySQL, comptez plutôt 2Go de mémoire pour être à l’aise.
La configuration web qui suit est adaptée à un serveur sous Debian 8 Jessie avec Apache ITK et PHP5-FPM.
Création du site web
Dans l’exemple, je vais créer un site web http://redmine.jbnet.lan qui sera le point d’entrée de mon serveur Redmine.
Le site sera hébergé dans le répertoire /home/jbnet-user/redmine.
Je positionne des variables avec les paramètres du site :
1 2 3 |
myuser="jbnet-user" mywebsite="redmine" mydomain="jbnet.lan" |
La création d’un hébergement avec la machine gabarit possédant le rôle de serveur web est décrite dans le paragraphe “Créer un hébergement web” du chapitre “[Tuto – Infrastructure Web – Debian 8] – Un serveur LAMP“.
Le serveur possède l’adresse IP : 192.168.8.155
Pour faire vite, voici les commandes à copier/coller dans votre terminal avec une connexion ssh sur le serveur web.
Configuration Apache2 :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
command mkdir -p /home/${myuser}/${mywebsite}/conf command mkdir -p /home/${myuser}/${mywebsite}/html command mkdir -p /home/${myuser}/${mywebsite}/log command mkdir -p /home/${myuser}/${mywebsite}/tmp command echo "<?php phpinfo(); ?>" > /home/${myuser}/${mywebsite}/html/phpinfo.php command cp /etc/apache2/sites-available/000-default.conf /home/${myuser}/${mywebsite}/conf/apache.conf command sed -i "/#ServerName/a \ ServerName ${mywebsite}.${mydomain}" /home/${myuser}/${mywebsite}/conf/apache.conf command sed -i "/\sServerAdmin/a AssignUserID ${myuser} ${myuser}" /home/${myuser}/${mywebsite}/conf/apache.conf command sed -i "/\sDocumentRoot/ s/^/#/" /home/${myuser}/${mywebsite}/conf/apache.conf command sed -i "/#\sDocumentRoot/a DocumentRoot \/home\/${myuser}\/${mywebsite}\/html" /home/${myuser}/${mywebsite}/conf/apache.conf command sed -i "/^DocumentRoot/a \<Directory \/home\/${myuser}\/${mywebsite}\/html\> \\ Options -Indexes +FollowSymLinks -MultiViews +ExecCGI -Includes \\ AllowOverride All \\ Require all granted \\ \</Directory\>" /home/${myuser}/${mywebsite}/conf/apache.conf command sed -i "/\sErrorLog/ s/^/#/" /home/${myuser}/${mywebsite}/conf/apache.conf command sed -i "/\sCustomLog/ s/^/#/" /home/${myuser}/${mywebsite}/conf/apache.conf command sed -i "/#\sErrorLog/a ErrorLog \/home\/${myuser}\/${mywebsite}\/log\/apache-error.log" /home/${myuser}/${mywebsite}/conf/apache.conf command sed -i "/#\sCustomLog/a CustomLog \/home\/${myuser}\/${mywebsite}\/log\/apache-access.log combined" /home/${myuser}/${mywebsite}/conf/apache.conf command sed -i "s/\/usr\/lib\/cgi-bin\/php5-fcgi/\/usr\/lib\/cgi-bin\/php5-fcgi-${mywebsite}/g" /home/${myuser}/${mywebsite}/conf/apache.conf command sed -i "s/php5-fpm.sock/php5-fpm-${mywebsite}.sock/g" /home/${myuser}/${mywebsite}/conf/apache.conf ln -s /home/${myuser}/${mywebsite}/conf/apache.conf /etc/apache2/sites-enabled/${mywebsite}.conf |
Configuration PHP5-FPM :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
command cp /etc/php5/fpm/pool.d/www.conf /home/${myuser}/${mywebsite}/conf/php.conf command sed -i -e "s/^\[www\]/\[${mywebsite}\]/" /home/${myuser}/${mywebsite}/conf/php.conf command sed -i \ -e "s/^[#]*\(user = \).*/\1${myuser}/" \ -e "s/^[#]*\(group = \).*/\1${myuser}/" \ /home/${myuser}/${mywebsite}/conf/php.conf command sed -i \ -e "s/php5-fpm.sock/php5-fpm-${mywebsite}.sock/" \ /home/${myuser}/${mywebsite}/conf/php.conf command sed -i \ -e "s/^[#]*\(listen.owner = \).*/\1${myuser}/" \ -e "s/^[#]*\(listen.group = \).*/\1${myuser}/" \ /home/${myuser}/${mywebsite}/conf/php.conf command echo "php_flag[display_errors] = on php_admin_value[error_log] = /home/${myuser}/${mywebsite}/log/php-error.log php_admin_flag[log_errors] = on php_admin_value[memory_limit] = 256M php_admin_value[sys_get_temp_dir] = /home/${myuser}/${mywebsite}/tmp php_admin_value[session.save_path] = /home/${myuser}/${mywebsite}/tmp php_admin_value[upload_max_filesize] = 20M php_admin_value[post_max_size] = 20M" >> /home/${myuser}/${mywebsite}/conf/php.conf ln -s /home/${myuser}/${mywebsite}/conf/php.conf /etc/php5/fpm/pool.d/${mywebsite}.conf |
Et pour finir, on modifie le propriétaire des fichiers et on redémarre les services apache2 et php5-fpm :
1 2 3 |
command chown -R ${myuser}:${myuser} /home/${myuser}/${mywebsite} command service apache2 restart command service php5-fpm restart |
A partir de là, si vous avez créer une VM autonome (voir « [Tuto – Infrastructure Web – Debian 8] – Un serveur LAMP« ), vous devez ajouter l’adresse ip de cette dernière et l’url redmine.jbnet.lan dans votre fichier hosts pour y avoir accès.
Si vous avez créer une infrastructure web avec un serveur proxy et nginx en mode reverse proxy, vous devez créer la configuration nginx.
Sur le serveur proxy, créez le fichier /etc/nginx/sites-available/redmine.jbnet.lan.
Adaptez les paramètres en fonction de votre configuration.
1 2 3 4 5 6 7 8 9 10 11 12 |
server { listen 80; server_name redmine.jbnet.lan; #access_log /var/log/nginx/redmine.jbnet.lan.access.log; error_log /var/log/nginx/redmine.jbnet.lan.error.log; location / { proxy_pass http://192.168.8.155/; expires off; # include include.d/proxy.conf; } } |
Puis créez un lien symbolique dans le répertoire /etc/nginx/sites-enabled :
1 2 |
command cd /etc/nginx/sites-enabled command ln -s ../sites-available/redmine.jbnet.lan |
Relancez nginx pour la prise en compte :
1 |
command service nginx restart |
Dans votre fichier hosts, il faut ajouter l’ip du proxy associé à l’url du site redmine.jbnet.lan.
Testez en utilisant l’url « http://redmine.jbnet.lan/phpinfo.php » dans votre navigateur.
Notez qu’il faudra modifier légèrement le fichier apache.conf un peu plus tard.
Ruby
Au moment de la rédaction de ce tuto, c’est Redmine 3.1.1 qui est disponible.
Selon les indications sur cette page, il faut installer Rails 4.2.
Exécutez ces commandes pour installer Ruby :
1 2 |
command apt-get install subversion rake ruby ruby-dev libapache2-mod-passenger command gem install rails -v=4.2 |
L’installation prend quelques minutes, soyez patient.
Résultat :
1 2 3 4 5 6 |
Building native extensions. This could take a while... ... ... ... Done installing documentation for actionmailer, actionpack, actionview, activejob, activemodel, activerecord, arel, builder, bundler, crass, erubis, globalid, loofah, mail, mime-types, nokogiri, rack, rack-test, rails, rails-dom-testing, rails-html-sanitizer, railties, sprockets, sprockets-rails, thor after 243 seconds 25 gems installed |
Installez les paquets requis pour ImageMagick avant d’aller plus loin :
1 |
command apt-get install imagemagick libmagickcore-6.q16-dev libmagickwand-dev |
Si vous utilisez MySQL :
1 |
command apt-get install libmysqlclient-dev |
Si comme moi vous avez utilisé Percona au lieu de MySQL :
1 |
command apt-get install libperconaserverclient18.1-dev |
Suivi de :
1 |
command gem install mysql rmagick |
Redmine
Téléchargez Redmine à partir de votre VM.
Au moment de la rédaction de ce tuto, c’est Redmine 3.1.1 qui est disponible.
Adaptez l’URL suivante en fonction :
1 2 |
command cd ~ command wget http://www.redmine.org/releases/redmine-3.1.1.tar.gz |
Décompressez l’archive et déplacez le contenu du répertoire redmine-3.1.1 dans le répertoire /home/jbnet-user/redmine/html/ :
1 2 3 4 |
command tar xvfz redmine-3.1.1.tar.gz shopt -s dotglob command mv ./redmine-3.1.1/* /home/${myuser}/${mywebsite}/html/ command chown ${myuser}:${myuser} /home/${myuser}/${mywebsite}/html |
La commande « shopt » permet de prendre en compte les fichiers cachés commençant par un point lors de l’utilisation de la commande mv.
N’oubliez pas que vous êtes sous root et que vous devez donner les droits à votre utilisateur qui exécute Apache ITK.
Redmine contient des fichiers qui ne doivent pas être accessible directement via une url.
Il faut modifiez la configuration d’Apache pour lui indiquer que ce sont les fichiers du répertoire public qui doivent être utilisés.
Éditez le fichier /home/${myuser}/${mywebsite}/conf/apache.conf.
Ajoutez le répertoire public aux variables DocumentRoot et Directory :
1 |
DocumentRoot /home/${myuser}/${mywebsite}/html/public |
et
1 |
<Directory /home/${myuser}/${mywebsite}/html/public> |
Redémarrez Apache pour prendre en compte les modifications :
1 |
command service apache2 restart |
Il faut ensuite créer une base de données (via phpMyAdmin ou autre).
Voici les paramètres que j’utilise dans mon exemple :
- Base de données : redmine-adm
- Utilisateur : redmine-adm
- Mot de passe : test1234
- Serveur : 192.168.8.100 (ou localhost si le serveur MySQL est installé sur la même machine)
Dans le répertoire /home/${myuser}/${mywebsite}/html/config, créez une copie du fichier database.yml.example :
1 2 |
command cd /home/${myuser}/${mywebsite}/html/config command cp database.yml.example database.yml |
Modifiez le fichier database.yml avec les paramètres d’accès à la base de données.
Adaptez en fonction de votre configuration.
1 2 3 4 5 6 7 8 9 10 11 |
# Default setup is given for MySQL with ruby1.9. # Examples for PostgreSQL, SQLite3 and SQL Server can be found at the end. # Line indentation must be 2 spaces (no tabs). production: adapter: mysql2 database: redmine-adm host: 192.168.8.100 username: redmine-adm password: "test1234" encoding: utf8 |
Installez les bundles manquants :
1 |
bundle install |
Résultat :
1 2 3 4 5 6 7 8 9 |
Bundle complete! 28 Gemfile dependencies, 61 gems now installed. Use `bundle show [gemname]` to see where a bundled gem is installed. Post-install message from rdoc: Depending on your version of ruby, you may need to install ruby rdoc/ri data: <= 1.8.6 : unsupported = 1.8.7 : gem install rdoc-data; rdoc-data --install = 1.9.1 : gem install rdoc-data; rdoc-data --install >= 1.9.2 : nothing to do! Yay! |
Toujours dans le répertoire /home/${myuser}/${mywebsite}/html/config, exécutez cette commande :
1 |
rake generate_secret_token |
Puis initialisez la base de données :
1 |
rake db:migrate RAILS_ENV=production |
Relancez Apache :
1 |
command service apache2 restart |
Dans votre navigateur, tapez l’URL d’accès à votre serveur Redmine pour afficher la page d’accueil.
Dans mon cas : http://redmine.jbnet.lan
Paramètres de connexion par défaut :
- Utilisateur : admin
- Mot de passe : admin
Vérifiez que l’installation est correcte.
Allez dans « Administration > Informations » :
Et comme on dit : « YaPluKa ! »
Bonne gestion de projets avec Redmine !
Bonus
Quelques thèmes très sympa trouvé sur GitHub :