Debian 8 : Installer Redmine avec Nginx et Let’s Encrypt

Cet article décrit l’installation d’un serveur Redmine avec Nginx configuré en HTTPS via Let’s Encrypt.
L’installation de Redmine sera mise en œuvre à partir des dépôts officiels de Debian Jessie et en version 3.0, qui est la version stable à ce jour. Dans les dépôts Testing (Strech) la version est 3.2.1-1.

A savoir, ici je vais configurer Nginx en tant que revers proxy pour qu’il redirige les requêtes au serveur Ruby, qui ne sera accessible qu’en local sur le port 3000.

Tout comme PHP, pour interpréter le langage Ruby il faut un moteur. Dans mon cas, je vais laisser le moteur Ruby par défaut : WEBrick.

C’est quoi Redmine

Brièvement, Redmine est un gestionnaire de projets web écrit en Ruby. Redmine est un logiciel libre sous licence GNU/GPLv2.

Pour plus d’informations, je vous invites à lire cet article très complet : https://www.projet-plume.org/fiche/redmine

Configuration du serveur MariaDB

Pour l’installation du SGBD MariaDB, tout est expliqué dans cet article : https://memo-linux.com/debian-installer-un-serveur-web-hyper-performant-lnhm-nginx-hhvm-mariadb/
Création de la base de données pour Redmine :

mysql -p
CREATE DATABASE redmine CHARACTER SET utf8;
CREATE USER 'redmine'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON redmine.* TO 'redmine'@'localhost';
flush privileges;
exit;

Installation de Redmine via Apt

apt install redmine redmine-mysql

Configuration de Redmine

Donner les droits à www-data sur le répertoire du serveur web

cd /usr/share/redmine
chown -R www-data public

Règle Iptables

Ouvrir le port d’écoute 3000 pour 127.0.0.1 :

iptables -A INPUT -s 127.0.0.1  -p tcp  --dport 3000 -j ACCEPT

Création du certificat Let’s Encrypt

Pour installer Let’s Encrypt sur Debian voir cet article : https://memo-linux.com/installer-facilement-lets-encrypt-sous-debian-et-ubuntu-serveur-via-apt/

Création du certificat pour la connexion HTTPS :

letsencrypt certonly -d redmine.domaine.tld --rsa-key-size 4096

Server Block Nginx pour Redmine en HTTPS

nano /etc/nginx/sites-enabled/redmine.domaine.conf
server {
  listen 80;
  server_name redmine.domaine.tld;
  rewrite ^ https://redmine.domaine.tld$request_uri?;
}
server {
listen 443 ssl;
server_name redmine.domaine.tld;
root /usr/share/redmine/public/;
access_log /var/log/nginx/redmine-access.log;
error_log /var/log/nginx/redmine-error.log;

  ssl_certificate /etc/letsencrypt/live/redmine.domaine.tld/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/redmine.domainetld/privkey.pem;
  ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
  ssl_protocols TLSv1.2;
  ssl_prefer_server_ciphers on;
  ssl_session_cache shared:SSL:10m;
  ssl_dhparam /etc/ssl/private/dhparams.pem;
  ssl_buffer_size 16k;
  ssl_stapling off;
  ssl_stapling_verify on;
  ssl_trusted_certificate /etc/letsencrypt/live/redmine.domaine.tld/fullchain.pem;
  resolver 127.0.0.1 8.8.8.8;##j'ai mon propre serveur dns en local

    location / {
        try_files $uri @fcgi;
    }
    location @fcgi {
        include /etc/nginx/fastcgi_params;
        fastcgi_param   SCRIPT_FILENAME /usr/share/redmine/public/$fastcgi_script_name;
        proxy_pass http://127.0.0.1:3000;
        proxy_connect_timeout 15;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-Proto https;
        fastcgi_param HTTPS "on";
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_redirect off;
   }
include global/php-fpm.conf;
}

Contenu de global/php-fpm.conf :

location ~ \.php$ {
location ~ ^/(status|ping)$ {
    include fastcgi_params;
deny all;
}
try_files $uri =404;
fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
    fastcgi_param  QUERY_STRING     $query_string;
    fastcgi_param  REQUEST_METHOD   $request_method;
    fastcgi_param  CONTENT_TYPE     $content_type;
    fastcgi_param  CONTENT_LENGTH   $content_length;
    fastcgi_param   SCRIPT_FILENAME    $document_root$fastcgi_script_name;
    fastcgi_intercept_errors        on;
    fastcgi_ignore_client_abort     off;
    fastcgi_connect_timeout 60;
    fastcgi_send_timeout 180;
    fastcgi_read_timeout 180;
    fastcgi_buffers 4 256k;
    fastcgi_buffer_size 128k;
    #fastcgi_buffers 256 16k;
    #fastcgi_buffer_size 16k;
    fastcgi_busy_buffers_size 256k;
    fastcgi_temp_file_write_size 256k;
}

Une fois le block serveur Nginx pour Redmine configuré, faire un test de la conf :

ngnix -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Si tout est ok, relancer le serveur :

systemctl restart nginx

Lancement du serveur Redmine

cd /usr/share/redmine/
ruby bin/rails server -e production

Vérification si le serveur est bien écoute sur le port 3000 :

netstat -lapute | grep 3000
tcp        0      0 *:3000    *:*    LISTEN      root       2083713546  31914/ruby

Création d’un service pour systemd

Création d’un service pour systemd afin de faciliter la gestion du démarrage du serveur.

  • Création du service pour gérer le serveur Redmine :
  • nano /etc/systemd/system/redmine.service
  • Le contenu :
  • [Unit]
    Description=Redmine server
    After=syslog.target
    After=network.target
    
    [Service]
    Type=simple
    ExecStart=/usr/bin/ruby /usr/share/redmine/bin/rails server -e production
    TimeoutSec=300
    
    [Install]
    WantedBy=multi-user.target
    
  • Activation du service pour le démarrage au boot du serveur :
  • systemctl enable redmine.service
  • Démarrer le service :
  • systemctl start redmine.service
  • Vérification du statut :
  • systemctl status redmine.service

    Ce qui donne :

    ● redmine.service - Redmine server
       Loaded: loaded (/etc/systemd/system/redmine.service; enabled)
       Active: active (running) since Thu 2016-03-31 17:08:37 CEST; 2s ago
     Main PID: 31914 (ruby)
       CGroup: /system.slice/redmine.service
               └─31914 /usr/bin/ruby /usr/share/redmine/bin/rails server -e production
    

Connection à l’interface web de Redmine

Ouvrir votre navigateur web et saisir l’url : https://redmine.domaine.tld/login

redmine-connexion

Voici les identifiants par défaut, à changer de suite :

  • username: admin
  • password: admin

Suivront d’autres articles sur le paramétrage avancé et l’installation de plugins…

7 Comments

  1. Merci pour ce tuto. Je test ça demain, histoire de voir a remplacer la vielle version de redmine :)

    Super tes posts ;-)

  2. Hello Fred,

    Un petit retour :

    – Un petit pétouille, c’est glissé « Lancement du serveur Redmine »
    cd /usr/share/redemine/ -> cd /usr/share/redmine/

    – Maintenant ce n’est plus letsencrypt mais certbot ;-)

    – A l’étape du lancement du serveur, j’ai une trace :

    /usr/share/redmine/bin/rails: No such file or directory – uuidgen
    Exiting
    /usr/lib/ruby/vendor_ruby/pr_eventmachine.rb:244:in `generate’: undefined method `chomp’ for nil:NilClass (NoMethodError)
    from /usr/lib/ruby/vendor_ruby/pr_eventmachine.rb:284:in `install_oneshot_timer’
    from /usr/lib/ruby/vendor_ruby/pr_eventmachine.rb:59:in `add_oneshot_timer’

    Alors que le fichier bin/rails est bien présent :/

  3. Merci pour le tuto. Permettez moi de corriger la partie lancement du serveur. Exécuter :
    # ruby /usr/bin/rails server -e production

    Bien Librement

  4. Bonjour,

    Pour moi, j’ai dû ajouter
    WorkingDirectory=/usr/share/redmine
    dans la section [Service] du redmine.service

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.