Comment installer le logiciel de gestion de projet Redmine sur Rocky Linux 8

Redmine est un logiciel de gestion de projet et un outil de suivi des problèmes gratuits et open-source. Il est écrit à l’aide du framework Ruby on Rails et peut être intégré à divers systèmes de contrôle de version. Il comprend un navigateur de référentiel et un visualiseur de différences. Il peut être utilisé pour gérer les fonctionnalités des projets : wikis et forums par projet, suivi du temps et contrôle d’accès basé sur les rôles. Il est multiplateforme, multibase de données et prend en charge 49 langues.

Dans ce tutoriel, tu vas apprendre à installer Redmine sur un serveur basé sur Rocky Linux 8.

Conditions préalables

  • Un serveur exécutant Rocky Linux.

  • Un utilisateur non-sudo avec des privilèges root.

  • Désactive SELinux.

  • Tout est mis à jour.

    $ sudo dnf update
    

Étape 1 – Configurer le pare-feu

La première étape consiste à configurer le pare-feu. Rocky Linux utilise le pare-feu Firewalld. Vérifie l’état du pare-feu.

$ sudo firewall-cmd --state
running

Ouvre le port 3000, que nous pouvons utiliser pour vérifier Redmine.

$ sudo firewall-cmd --permanent --add-port=3000

Autorise les ports HTTP et HTTPS.

$ sudo firewall-cmd --permanent --add-service=http
$ sudo firewall-cmd --permanent --add-service=https

Recharge le pare-feu pour activer les modifications.

$ sudo firewall-cmd --reload

Étape 2 – Installe le serveur Apache

Nous allons utiliser le serveur Web Apache pour déployer Redmine. Installe Apache à l’aide de la commande suivante.

$ sudo dnf install httpd

Active et démarre le service Apache.

$ sudo systemctl enable --now httpd.service

Accorde à ton utilisateur actuellement connecté le statut d’utilisateur Apache afin qu’il ait l’accès nécessaire au répertoire /var/www/redmine.

$ sudo usermod -aG $USER apache

Étape 3 – Installe et configure le serveur MySQL

Nous allons utiliser la base de données MySQL pour stocker les données. Le dépôt Appstream de Rocky Linux est livré avec la dernière version de MySQL.

Installe MySQL.

$ sudo dnf install mysql-server

Active et démarre le service MySQL.

$ sudo systemctl enable mysqld --now

Sécurise l’installation de MySQL.

$ sudo mysql_secure_installation

Pour la première étape, il te sera demandé si tu veux configurer le plugin Validate Password, que tu peux utiliser pour tester la force de ton mot de passe MySQL. Choisis Y pour continuer. Il te sera demandé de choisir le niveau de validation du mot de passe à l’étape suivante. Choisis 2 qui est le niveau le plus fort et exigera que ton mot de passe ait au moins huit caractères et comprenne un mélange de majuscules, minuscules, chiffres et caractères spéciaux.

Securing the MySQL server deployment.

Connecting to MySQL using a blank password.

VALIDATE PASSWORD COMPONENT can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD component?

Press y|Y for Yes, any other key for No: Y

There are three levels of password validation policy:

LOW    Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary                  file

Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 2

Il te sera demandé de choisir un mot de passe root à l’étape suivante. Choisis un mot de passe fort qui répond aux exigences du plugin de validation de mot de passe. À l’étape suivante, il te sera demandé si tu veux continuer avec le mot de passe choisi. Appuie sur y pour continuer.

Please set the password for root here.

New password:

Re-enter new password:

Estimated strength of the password: 100
Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : Y

Appuie sur la touche Y puis ENTER pour toutes les invites suivantes pour supprimer les utilisateurs anonymes et la base de données de test, désactiver les connexions root et charger les règles nouvellement définies.

...
Remove anonymous users? (Press y|Y for Yes, any other key for No) : Y
Success.
...
Disallow root login remotely? (Press y|Y for Yes, any other key for No) : Y
Success.
...
Remove test database and access to it? (Press y|Y for Yes, any other key for No) : Y
 - Dropping test database...
Success.
 - Removing privileges on test database...
Success.
Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.
...
Reload privilege tables now? (Press y|Y for Yes, any other key for No) : Y
Success.
All done!

Entre dans le shell MySQL. Saisis ton mot de passe root pour continuer.

$ mysql -u root -p

Crée l’utilisateur redmine. Assure-toi que le mot de passe répond aux exigences définies précédemment.

mysql> CREATE USER 'redmine'@'localhost' IDENTIFIED BY 'Your_password2';

Crée la base de données redmine.

mysql> CREATE DATABASE redmine CHARACTER SET utf8mb4;

Accorde à l’utilisateur des privilèges sur la base de données redmine.

mysql> GRANT ALL PRIVILEGES ON redmine.* TO 'redmine'@'localhost';

Quitte le Shell.

mysql> exit

Étape 4 – Installer le référentiel EPEL

Certains des paquets requis pour Redmine sont disponibles dans le référentiel EPEL. Exécute la commande suivante pour installer le référentiel EPEL.

$ sudo dnf install epel-release

Active le référentiel PowerTools.

$ sudo dnf config-manager --set-enabled powertools

Étape 5 – Installe Ruby et les autres éléments requis

Rocky Linux 8 est livré avec quatre versions différentes de Ruby – 2.5, 2.6, 2.7 et 3.0.

Liste tous les modules Ruby disponibles.

$ dnf module list ruby
Last metadata expiration check: 0:18:58 ago on Mon 03 Jan 2022 11:50:10 AM UTC.
Rocky Linux 8 - AppStream
Name            Stream             Profiles              Summary
ruby            2.5 [d]            common [d]            An interpreter of object-oriented scripting language
ruby            2.6                common [d]            An interpreter of object-oriented scripting language
ruby            2.7                common [d]            An interpreter of object-oriented scripting language
ruby            3.0                common [d]            An interpreter of object-oriented scripting language

Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled

La dernière version de Redmine est compatible avec toutes les versions sauf la 3.0. Nous installerons Ruby 2.7 pour notre tutoriel.

Réinitialise les autres versions et active la version 2.7 de Ruby.

$ sudo dnf module reset ruby
$ sudo dnf module enable ruby:2.7

Installe Ruby.

$ sudo dnf install ruby ruby-devel

Vérifie l’installation.

$ ruby -v
ruby 2.7.4p191 (2021-07-07 revision a21a3b7d23) [x86_64-linux]

Installe tous les autres paquets requis par Redmine.

$ sudo dnf install rpm-build wget libxml2-devel make automake libtool ImageMagick ImageMagick-devel mariadb-devel httpd-devel openssl-devel libcurl-devel gcc gcc-c++

Étape 6 – Installe Redmine

Visite la page de téléchargement de Redmine et vérifie la dernière version stable disponible. Au moment de la rédaction de ce tutoriel, la dernière version disponible est 4.2.3.

Utilise wget pour télécharger Redmine.

$ wget https://redmine.org/releases/redmine-4.2.3.tar.gz

Extrais et déplace les fichiers dans le répertoire /var/www/redmine.

$ tar xfz redmine-4.2.3.tar.gz
$ sudo mv redmine-4.2.3 /var/www/redmine

Déplace-toi dans le répertoire /var/www/redmine.

$ cd /var/www/redmine

Crée les fichiers de configuration de Redmine en utilisant les fichiers d’exemple fournis.

$ cp config/configuration.yml.example config/configuration.yml
$ cp config/database.yml.example config/database.yml
$ cp public/dispatch.fcgi.example public/dispatch.fcgi

Ouvre le fichier database.yml pour le modifier.

$ nano config/database.yml

Trouve et configure les paramètres de ta base de données dans la section suivante.

production:
  adapter: mysql2
  database: redmine
  host: localhost
  username: redmine
  password: "Your_password2"
  # Use "utf8" instead of "utfmb4" for MySQL prior to 5.7.7
  encoding: utf8mb4

Enregistre le fichier en appuyant sur Ctrl + X et en saisissant Y lorsque tu y es invité.

Installe bundler pour gérer les dépendances ruby gem.

$ gem install bundler

Configure l’environnement pour installer les dépendances gem.

$ bundle config set --local without 'development test'

Installe les dépendances gem.

$ bundle install

Si tu rencontres un problème avec les versions de gem, utilise la commande suivante pour les restaurer.

$ sudo gem pristine --all

Génère une clé secrète aléatoire pour empêcher la falsification des cookies pour le stockage des données de session.

$ bundle exec rake generate_secret_token

Crée la structure de la base de données.

$ RAILS_ENV=production bundle exec rake db:migrate

Insère les données dans la base de données MySQL.

$ RAILS_ENV=production REDMINE_LANG=en bundle exec rake redmine:load_default_data

Crée les répertoires nécessaires et définis les autorisations des fichiers.

$ mkdir -p tmp/pdf
$ mkdir -p public/plugin_assets
$ chown -R $USER:$USER files log tmp public/plugin_assets
$ chmod -R 755 /var/www/remine/

Exécute la commande suivante pour démarrer une instance de serveur Rails.

$ bundle exec rails server webrick -e production
=> Booting WEBrick
=> Rails 5.2.6 application starting in production on http://0.0.0.0:3000
=> Run `rails server -h` for more startup options
[2022-01-03 12:58:19] INFO  WEBrick 1.6.1
[2022-01-03 12:58:19] INFO  ruby 2.7.4 (2021-07-07) [x86_64-linux]
[2022-01-03 12:58:19] INFO  WEBrick::HTTPServer#start: pid=117224 port=3000

Ouvre l’URL http://<yourserverIP>:3000/login pour obtenir l’écran de connexion de Redmine.

Écran de connexion Redmine

Saisis les informations d’identification par défaut(admin/admin) pour te connecter. Il te sera demandé de modifier le mot de passe.

Écran d'expiration du mot de passe de Redmine

Ensuite, tu seras redirigé vers la page Mon compte.

Redmine Mon compte

Redmine a été installé avec succès.

Ensuite, appuie sur CTRL+C sur le terminal pour arrêter le serveur.

Étape 7 – Installer Phusion Passenger

Phusion Passenger est un serveur d’applications ruby qui nous permet de servir Redmine via un serveur tiers. Dans notre cas, nous utiliserons Apache.

Installe Passenger.

$ gem install passenger

Installe le module Passenger pour le serveur Apache.

$ passenger-install-apache2-module

Tu seras accueilli par un message de bienvenue. Appuie sur Entrée pour continuer.

Welcome to the Phusion Passenger Apache 2 module installer, v6.0.12.

This installer will guide you through the entire installation process. It
shouldn't take more than 3 minutes in total.

Here's what you can expect from the installation process:

 1. The Apache 2 module will be installed for you.
 2. You'll learn how to configure Apache.
 3. You'll learn how to deploy a Ruby on Rails application.

Don't worry if anything goes wrong. This installer will advise you on how to
solve any problems.

Press Enter to continue, or Ctrl-C to abort.


--------------------------------------------

Ensuite, il te sera demandé de choisir la langue. Ruby est sélectionné par défaut, alors appuie simplement sur Entrée pour continuer.

Which languages are you interested in?

Use <space> to select.
If the menu doesn't display correctly, press '!'

 ? ?  Ruby
   ?  Python
   ?  Node.js
   ?  Meteor

--------------------------------------------

Il se peut que tu reçoives un avertissement concernant les autorisations de fichiers. Si tu as suivi notre tutoriel, appuie simplement sur Entrée pour continuer.

Warning: some directories may be inaccessible by the web server!

The web server typically runs under a separate user account for security
reasons. That user must be able to access the Phusion Passenger(R) files.
However, it appears that some directories have too strict permissions. This
may prevent the web server user from accessing Phusion Passenger(R) files.

It is recommended that you relax permissions as follows:

  sudo chmod o+x "/home/navjot"

Press Ctrl-C to return to the shell. (Recommended)
After relaxing permissions, re-run this installer.
  -OR-
Press Enter to continue anyway.

L’ensemble du processus prendra environ 10-15 minutes pour se terminer. Si tu obtiens une erreur comme celle qui suit, c’est très probablement dû à un manque de RAM. Tu dois soit augmenter la RAM sur ton serveur, soit installer de l’espace swap.

c++: fatal error: Killed signal terminated program cc1plus
compilation terminated.
rake aborted!

Une fois le processus terminé, tu obtiendras le message suivant.

--------------------------------------------
Almost there!

Please edit your Apache configuration file, and add these lines:

   LoadModule passenger_module /home/navjot/.gem/ruby/gems/passenger-6.0.12/buildout/apache2/mod_passenger.so
   <IfModule mod_passenger.c>
     PassengerRoot /home/navjot/.gem/ruby/gems/passenger-6.0.12
     PassengerDefaultRuby /usr/bin/ruby
   </IfModule>

After you restart Apache, you are ready to deploy any number of web
applications on Apache, with a minimum amount of configuration!

Press ENTER when you are done editing.

N’appuie pas encore sur la touche Entrée. Ouvre une nouvelle session sur ton serveur en tant qu’utilisateur actuel et effectue les configurations suivantes.

Configurer le serveur Apache

Crée un fichier de configuration du module Apache pour Phusion Passenger.

$ sudo nano /etc/httpd/conf.modules.d/00-passenger.conf

Colle le code que tu as obtenu à la fin de l’installation de passenger.

 LoadModule passenger_module /home/navjot/.gem/ruby/gems/passenger-6.0.12/buildout/apache2/mod_passenger.so
   <IfModule mod_passenger.c>
     PassengerRoot /home/username/.gem/ruby/gems/passenger-6.0.12
     PassengerDefaultRuby /usr/bin/ruby
   </IfModule>

Enregistre le fichier en appuyant sur Ctrl + X et en saisissant Y lorsque tu y es invité.

Crée un autre fichier de configuration Apache pour le site Redmine.

$ sudo nano /etc/httpd/conf.d/redmine.conf

Colle le code suivant dans celui-ci.

Listen 3000
<IfModule mod_passenger.c>
  PassengerRoot /home/username/.gem/ruby/gems/passenger-6.0.12
  PassengerDefaultRuby /usr/bin/ruby
</IfModule>
<VirtualHost *:3000>
    ServerName redmine.example.com
    DocumentRoot "/var/www/redmine/public" 

    CustomLog logs/redmine_access.log combined
    ErrorLog logs/redmine_error_log
    LogLevel warn

    <Directory "/var/www/redmine/public">
        Options Indexes ExecCGI FollowSymLinks
        Require all granted
        AllowOverride all
    </Directory>
</VirtualHost>

Enregistre le fichier en appuyant sur Ctrl + X et en saisissant Y lorsque tu y es invité.

Ouvre le fichier de configuration Apache principal /etc/httpd/conf/httpd.conf pour le modifier.

$ sudo nano /etc/httpd/conf/httpd.conf

Trouve la variable ServerName et décommente-la en supprimant le dièse (#) qui la précède et en définissant sa valeur comme suit.

ServerName localhost

Enregistre le fichier en appuyant sur Ctrl + X et en saisissant Y lorsque tu y es invité.

Vérifie ta configuration Apache.

$ httpd -t
Syntax OK

Reviens en arrière et appuie sur Entrée pour continuer ton installation de Passenger. Il effectuera quelques vérifications et tu devrais voir le message suivant lorsqu’il est terminé avec succès.

Deploying a web application

To learn how to deploy a web app on Passenger, please follow the deployment
guide:

  https://www.phusionpassenger.com/library/deploy/apache/deploy/

Enjoy Phusion Passenger, a product of Phusion® (www.phusion.nl) :-)
https://www.phusionpassenger.com

Passenger® is a registered trademark of Phusion Holding B.V.

Redémarre ton serveur Apache.

$ sudo systemctl restart httpd

Ton site Web devrait être disponible à l’adresse http://redmine.example.com:3000.

Ce n’est pas le moyen idéal d’accéder à Redmine. Il est toujours servi via le protocole HTTP non sécurisé et utilise un numéro de port. Nous allons installer Nginx pour qu’il agisse comme un proxy inverse et serve Redmine en utilisant le protocole HTTPS pour améliorer cela. Avant de passer à l’installation et à la configuration de Nginx, nous devons configurer le certificat SSL.

Étape 8 – Installer SSL

Pour installer un certificat SSL en utilisant Let’s Encrypt, nous devons installer l’outil Certbot. Exécute les commandes suivantes pour installer Certbot.

$ sudo dnf install certbot

Arrête le serveur Apache.

$ sudo systemctl stop httpd

Génère le certificat SSL.

$ sudo certbot certonly --standalone --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email protected] -d redmine.example.com

La commande ci-dessus téléchargera un certificat dans le répertoire /etc/letsencrypt/live/redmine.example.com de ton serveur.

Démarre le serveur Apache.

$ sudo systemctl start httpd

Génère un certificat de groupe Diffie-Hellman.

$ sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

Crée un répertoire webroot de défi pour le renouvellement automatique de Let’s Encrypt.

$ sudo mkdir -p /var/lib/letsencrypt

Crée une tâche Cron pour renouveler le SSL. Elle s’exécutera tous les jours pour vérifier le certificat et le renouveler si nécessaire. Pour cela, commence par créer le fichier /etc/cron.daily/certbot-renew et ouvre-le pour le modifier.

$ sudo nano /etc/cron.daily/certbot-renew

Colle le code suivant.

#!/bin/sh
certbot renew --cert-name redmine.example.com --webroot -w /var/lib/letsencrypt/ --post-hook "systemctl restart nginx"

Enregistre le fichier en appuyant sur Ctrl + X et en saisissant Y lorsque tu y es invité.

Change les autorisations sur le fichier de tâches pour le rendre exécutable.

$ sudo chmod +x /etc/cron.daily/certbot-renew

Étape 9 – Installe et configure Nginx comme Reverse-proxy

Rocky Linux 8 est livré avec quatre versions différentes de Nginx – 1.14, 1.16, 1.18 et 1.20.

Liste tous les modules Nginx disponibles.

$ dnf module list nginx
Last metadata expiration check: 20:23:20 ago on Mon 03 Jan 2022 12:38:07 PM UTC.
Rocky Linux 8 - AppStream
Name                      Stream                       Profiles                      Summary
nginx                     1.14 [d]                     common [d]                    nginx webserver
nginx                     1.16                         common [d]                    nginx webserver
nginx                     1.18                         common [d]                    nginx webserver
nginx                     1.20                         common [d]                    nginx webserver

Extra Packages for Enterprise Linux Modular 8 - x86_64
Name                      Stream                       Profiles                      Summary
nginx                     mainline                     common                        nginx webserver
nginx                     1.20                         common [d]                    nginx webserver

Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled

Réinitialise les autres versions et active la version 1.20 de Nginx.

$ sudo dnf module reset nginx
$ sudo dnf module enable nginx:1.20

Installe Nginx. Nous désactivons temporairement le dépôtEpel car nous voulons récupérer Nginx dans l’Appstream.

$ sudo dnf install nginx --disablerepo=epel-modular

Vérifie l’installation.

$ nginx -v
nginx version: nginx/1.20.0

Pour éviter tout conflit avec Nginx, nous devons modifier le port par défaut sur lequel Apache écoute.

Modifier le port d’écoute d’Apache

Ouvre le fichier /etc/httpd/conf/httpd.conf pour le modifier.

$ sudo nano /etc/httpd/conf/httpd.conf

Change le port de 80 à 8080 comme suit.

Listen 8080

Enregistre le fichier en appuyant sur Ctrl + X et en saisissant Y lorsque tu y es invité.

Redémarre Apache.

$ sudo systemctl restart httpd

Configurer Nginx

Crée et ouvre le fichier /etc/nginx/conf.d/redmine.conf pour le modifier.

$ sudo nano /etc/nginx/conf.d/redmine.conf

Colle le code suivant dans ce fichier.

# Redirect all non-encrypted to encrypted
server {
    listen 80;
    server_name redmine.example.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;

    server_name redmine.example.com;

    ssl_certificate     /etc/letsencrypt/live/redmine.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/redmine.example.com/privkey.pem;
	ssl_trusted_certificate /etc/letsencrypt/live/redmine.example.com/chain.pem;
	
	ssl_session_timeout  5m;
    ssl_session_cache shared:MozSSL:10m;
    ssl_session_tickets off;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
    ssl_ecdh_curve X25519:prime256v1:secp384r1:secp521r1;
    ssl_stapling on;
    ssl_stapling_verify on;
    ssl_dhparam /etc/ssl/certs/dhparam.pem;
    resolver 8.8.8.8;

    access_log /var/log/nginx/redmine.example.com.access.log main;
    error_log  /var/log/nginx/redmine.example.com.error.log;
	
	location / {
        proxy_pass          http://localhost:3000;
        proxy_redirect      off;
        proxy_buffering     off;
        proxy_set_header    Host $host;
        proxy_set_header    X-Real-IP $remote_addr;
        proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

Une fois terminé, enregistre le fichier en appuyant sur Ctrl + X et en saisissant Y lorsque tu y es invité.

Ouvre le fichier /etc/nginx/nginx.conf pour le modifier.

$ sudo nano /etc/nginx/nginx.conf

Ajoute la ligne suivante avant la ligne include /etc/nginx/conf.d/*.conf;.

server_names_hash_bucket_size  64;

Enregistre le fichier en appuyant sur Ctrl + X et en entrant Y lorsque tu y es invité.

Vérifie la syntaxe du fichier de configuration Nginx.

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

Démarre le service Nginx pour activer la nouvelle configuration.

$ sudo systemctl start nginx

Ton application Redmine devrait être accessible à l’adresse https://redmine.example.com.

Conclusion

Ceci conclut notre tutoriel dans lequel tu as appris à installer Redmine Project Manager sur un serveur basé sur Rocky Linux 8. Tu as également appris à servir l’application Redmine via Nginx en utilisant le protocole HTTPS. Si tu as des questions, publie-les dans les commentaires ci-dessous.

Vous aimerez aussi...