Redmine est un outil de gestion de projet gratuit et open source basé sur le Web. Il est écrit en Ruby on Rails et prend en charge plusieurs serveurs de base de données pour stocker la base de données. Il s'agit d'une application riche en fonctionnalités prenant en charge plusieurs projets, une liste de contrôle d'accès basée sur les rôles et un système de suivi des problèmes. Il prend également en charge le diagramme de Gantt et le calendrier, la gestion des fichiers, par wiki et forum par projet, ainsi que de nombreuses autres fonctionnalités. Il prend en charge les systèmes de contrôle de version tels que Git, SVN ou CVS. Il est également multilingue, prenant en charge jusqu'à 49 langues.
Conditions préalables
- Une instance de serveur Vultr Ubuntu 16.04.
- Un utilisateur sudo .
- Un nom de domaine pointé vers le serveur.
Pour ce didacticiel, nous utiliserons 192.168.1.1
comme adresse IP publique et redmine.example.com
comme nom de domaine pointé vers l'instance Vultr. Veuillez vous assurer de remplacer toutes les occurrences de l'exemple de nom de domaine et de l'adresse IP par celui-ci.
Mettez à jour votre système de base à l'aide du guide Comment mettre à jour Ubuntu 16.04 . Une fois votre système mis à jour, procédez à l'installation des dépendances.
Installer Apache
Redmine est écrit en Ruby on Rails, nous aurons donc besoin que Phusion Passenger s'intègre au serveur Web Apache pour servir l'application.
Installez Apache.
sudo apt -y install apache2 apache2-dev libcurl4-openssl-dev
Pour construire Ruby et Passenger, nous aurons également besoin d'outils de développement. Installez les outils requis.
sudo apt -y install imagemagick libmagickwand-dev git build-essential automake libgmp-dev
Installer PostgreSQL
Redmine prend en charge plusieurs types de serveurs de bases de données tels que MySQL, PostgreSQL et MSSQL. Dans ce tutoriel, nous utiliserons PostgreSQL pour héberger le serveur de base de données Redmine.
PostgreSQL est un système de base de données relationnelle objet. Le référentiel Ubuntu par défaut contient une ancienne version de PostgreSQL, alors ajoutez le référentiel PostgreSQL au système.
echo "deb http://apt.postgresql.org/pub/repos/apt/ xenial-pgdg main" | sudo tee /etc/apt/sources.list.d/pgdg.list
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
sudo apt update
Installez le serveur de base de données PostgreSQL.
sudo apt -y install postgresql
Démarrez le serveur PostgreSQL et activez-le pour démarrer automatiquement au démarrage.
sudo systemctl start postgresql
sudo systemctl enable postgresql
Modifiez le mot de passe de l'utilisateur PostgreSQL par défaut.
sudo passwd postgres
Connectez-vous en tant qu'utilisateur PostgreSQL.
sudo su - postgres
Créez un nouvel utilisateur PostgreSQL pour Redmine.
createuser redmine
Vous êtes autorisé à utiliser n'importe quel nom d'utilisateur au lieu de redmine
. PostgreSQL fournit le psql
shell pour exécuter des requêtes sur la base de données. Basculez vers le shell PostgreSQL.
psql
Définissez un mot de passe pour le nouvel utilisateur créé pour la base de données Redmine.
ALTER USER redmine WITH ENCRYPTED password 'DBPassword';
Remplacez-le DBPassword
par un mot de passe sécurisé. Créez une nouvelle base de données pour l'installation de Redmine.
CREATE DATABASE redmine WITH ENCODING='UTF8' OWNER=redmine;
Sortez du psql
shell.
\q
Passez à l' sudo
utilisateur.
exit
Installez quelques autres dépendances PostgreSQL requises.
sudo apt -y install libpqxx-dev protobuf-compiler
Installer Ruby
Nous installerons la dernière version de Ruby à l'aide de RVM. Il est utilisé pour installer et gérer plusieurs versions de Ruby.
Ajoutez le référentiel RVM.
sudo apt-add-repository -y ppa:rael-gc/rvm
sudo apt update
Installez RVM.
sudo apt -y install rvm
Comme nous devons installer Ruby sur tout le système, nous basculerons temporairement sur l'utilisateur root.
sudo -i
Mettez à jour les variables d'environnement.
echo "source /etc/profile.d/rvm.sh" | tee -a /etc/profile
source /etc/profile.d/rvm.sh
Installez la dernière version de Ruby.
rvm install 2.5.1
Remarque: Si vous utilisez une version différente de Ruby, assurez-vous de mettre à jour le chemin Ruby en conséquence.
Utilisez la version installée de Ruby.
rvm use 2.5.1 --default
Vous pouvez vérifier sa version.
ruby -v
Vous verrez une sortie similaire.
root@vultr:~# ruby -v
ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-linux]
Install bundler
, qui est le gestionnaire de dépendances de l'application Ruby.
gem install bundler
Ruby est maintenant installé. Avant d'installer Redmine, nous devons installer Phusion Passenger.
Installer le passager
Exécutez la commande suivante pour installer Passenger.
gem install passenger
Installez le module Apache pour Passenger.
passenger-install-apache2-module
Le script d'installation vous posera quelques questions. Tout d'abord, il vous fournira des informations sur le processus d'installation. Ensuite, il vous demandera de sélectionner la langue que vous utiliserez. Puisque notre application est écrite en Ruby on Rails, sélectionnez Ruby dans le menu et appuyez sur ENTERpour continuer.
Which languages are you interested in?
Use <space> to select.
If the menu doesn't display correctly, press '!'
‣ ⬢ Ruby
⬢ Python
⬡ Node.js
⬡ Meteor
Le programme d'installation va maintenant vérifier les exigences. Le programme d'installation ne rencontrera aucune dépendance manquante et procédera automatiquement à la compilation et à l'installation du module.
Une fois le module installé, il vous demandera d'ajouter le module au fichier de configuration Apache.
Almost there!
Please edit your Apache configuration file, and add these lines:
LoadModule passenger_module /usr/share/rvm/gems/ruby-2.5.1/gems/passenger-5.2.3/buildout/apache2/mod_passenger.so
<IfModule mod_passenger.c>
PassengerRoot /usr/share/rvm/gems/ruby-2.5.1/gems/passenger-5.2.3
PassengerDefaultRuby /usr/share/rvm/gems/ruby-2.5.1/wrappers/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.
Nous allons ignorer cela pour l'instant et le terminerons plus tard dans le didacticiel. Appuyez sur ENTERpour sauter cette étape.
Enfin, le script d'installation validera l'installation et vous verrez un avertissement indiquant que le module Passager n'est pas spécifié dans la configuration Apache.
Validating installation...
* Checking whether this Passenger install is in PATH... ✓
* Checking whether there are no other Passenger installations... ✓
* Checking whether Apache is installed... ✓
* Checking whether the Passenger module is correctly configured in Apache... (!)
You did not specify 'LoadModule passenger_module' in any of your Apache
configuration files. Please paste the configuration snippet that this
installer printed earlier, into one of your Apache configuration files, such
as /etc/apache2/apache2.conf.
Detected 0 error(s), 1 warning(s).
Press ENTER to continue.
Maintenant que nous avons installé le module Passenger pour Apache, téléchargez et installez Redmine. Basculez à sudo
nouveau vers l' utilisateur car nous n'avons plus besoin d'exécuter de commandes à l'aide de l' root
utilisateur.
exit
Installer Redmine
Il est recommandé d'utiliser un utilisateur non privilégié pour exécuter l'application afin de la maintenir isolée du reste du système. Créez un nouvel utilisateur pour Redmine et basculez vers l'utilisateur nouvellement créé.
sudo adduser --disabled-password --gecos "Redmine User" redmine
sudo su - redmine
Téléchargez la dernière version de Redmine à partir de la page de téléchargement officielle de Redmine .
cd ~
wget http://www.redmine.org/releases/redmine-3.4.4.tar.gz
Extrayez l'archive et renommez le répertoire par souci de commodité.
tar -xf redmine-*.tar.gz
mv redmine-*/ redmine/
Copiez les exemples de fichiers de configuration sur son emplacement de production.
cd redmine
cp config/configuration.yml.example config/configuration.yml
cp config/database.yml.example config/database.yml
Ouvrez le fichier de configuration de la base de données que nous venons de copier pour entrer les détails de la base de données.
nano config/database.yml
Par défaut, le fichier de base de données est configuré pour MySQL. Trouvez les configurations de production et de développement et testez qui utilise l'adaptateur MySQL. Mettez en commentaire toutes ces lignes.
#production:
# adapter: mysql2
# database: redmine
# host: localhost
# username: root
# password: ""
# encoding: utf8
#development:
# adapter: mysql2
# database: redmine_development
# host: localhost
# username: root
# password: ""
# encoding: utf8
#test:
# adapter: mysql2
# database: redmine_test
# host: localhost
# username: root
# password: ""
# encoding: utf8
Furthur, retrouvez les lignes qui sont commentées, ayant la production
configuration de l' postgresql
adaptateur. Décommentez ces lignes et mettez à jour le nom de la base de données et les informations d'identification de l'utilisateur. Assurez-vous d'utiliser l'indentation correcte, qui est de deux espaces.
production:
adapter: postgresql
database: redmine
host: localhost
username: redmine
password: "DBPassword"
Configurez l'application pour utiliser la configuration PostgreSQL.
bundle config build.pg --with-pg-config=/usr/bin/pg_config
Installez les dépendances requises par l'application.
bundle install --path vendor/bundle --without development test
Vous verrez le message suivant à la fin de l'installation.
Installing roadie-rails 1.1.1
Bundle complete! 31 Gemfile dependencies, 55 gems now installed.
Gems in the groups development and test were not installed.
Bundled gems are installed into `./vendor/bundle`
La commande suivante génère des jetons secrets qui sont utilisés pour coder les données de session.
bundle exec rake generate_secret_token
Écrivez la base de données PostgreSQL.
RAILS_ENV=production bundle exec rake db:migrate
Exécutez la commande suivante, qui écrit les données par défaut dans la base de données PostgreSQL.
RAILS_ENV=production bundle exec rake redmine:load_default_data
La commande ci-dessus vous demandera de choisir la langue par défaut à utiliser avec l'application. Le choix par défaut est l'anglais; choisissez selon votre préférence.
[redmine@vultr redmine]$ RAILS_ENV=production bundle exec rake redmine:load_default_data
Select language: ar, az, bg, bs, ca, cs, da, de, el, en, en-GB, es, es-PA, et, eu, fa, fi, fr, gl, he, hr, hu, id, it, ja, ko, lt, lv, mk, mn, nl, no, pl, pt, pt-BR, ro, ru, sk, sl, sq, sr, sr-YU, sv, th, tr, uk, vi, zh, zh-TW [en]
====================================
Default configuration data loaded.
L'installation de l'application Redmine est maintenant terminée. Modifiez la propriété et les autorisations des répertoires et des fichiers.
mkdir -p tmp tmp/pdf public/plugin_assets
chown -R redmine:redmine files log tmp public/plugin_assets
chmod -R 755 files log tmp public/plugin_assets
Nous avons configuré tout ce dont nous avons besoin de l'utilisateur non privilégié. Revenez à l' sudo
utilisateur en exécutant su - <username>
.
Ajoutez le module Passenger pour Apache dans le fichier de configuration Apache. Cela chargera automatiquement le module Passager.
echo "LoadModule passenger_module /usr/share/rvm/gems/ruby-2.5.1/gems/passenger-5.2.3/buildout/apache2/mod_passenger.so" | sudo tee -a /etc/apache2/apache2.conf
Remarque: le chemin d'accès au module Passager peut changer lors de la sortie d'une nouvelle version de Passenger. Pour trouver le chemin d'accès au module, utilisez la sudo find / -name mod_passenger.so
commande.
Créez un nouveau fichier hôte virtuel pour votre application Redmine.
sudo nano /etc/apache2/sites-available/redmine.conf
Remplissez le fichier avec le contenu suivant.
<VirtualHost *:80>
ServerName redmine.example.com
DocumentRoot /home/redmine/redmine/public
PassengerRoot /usr/share/rvm/gems/ruby-2.5.1/gems/passenger-5.2.3
PassengerDefaultRuby /usr/share/rvm/gems/ruby-2.5.1/wrappers/ruby
PassengerUser redmine
<Directory /home/redmine/redmine/public>
Allow from all
Options -MultiViews
Require all granted
</Directory>
</VirtualHost>
Assurez-vous de le remplacer redmine.example.com
par votre nom de domaine réel. Assurez-vous également que le chemin d'accès à PassengerRoot
et PassengerDefaultRuby
est correct. Le chemin d'accès aux fichiers binaires peut changer lors de la sortie d'une nouvelle version de Ruby ou Passenger. Pour trouver ces chemins, exécutez la commande suivante.
passenger-config about ruby-command
Vous obtiendrez la sortie suivante.
user@vultr:~$ passenger-config about ruby-command
passenger-config was invoked through the following Ruby interpreter:
Command: /usr/share/rvm/gems/ruby-2.5.1/wrappers/ruby
Version: ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-linux]
To use in Apache: PassengerRuby /usr/share/rvm/gems/ruby-2.5.1/wrappers/ruby
To use in Nginx : passenger_ruby /usr/share/rvm/gems/ruby-2.5.1/wrappers/ruby
To use with Standalone: /usr/share/rvm/gems/ruby-2.5.1/wrappers/ruby /usr/share/rvm/gems/ruby-2.5.1/gems/passenger-5.2.3/bin/passenger start
## Notes for RVM users
Do you want to know which command to use for a different Ruby interpreter? 'rvm use' that Ruby interpreter, then re-run 'passenger-config about ruby-command'.
Une fois le fichier hôte virtuel créé. Activez la configuration.
sudo a2ensite redmine
Redémarrez le serveur Web Apache.
sudo systemctl restart apache2
Vous pouvez maintenant accéder à votre interface Redmine sur http://redmine.example.com
. Connectez-vous avec le nom d'utilisateur admin
et le mot de passe admin
. Lors de votre première connexion, Redmine vous demandera de mettre à jour le mot de passe.
Sécuriser Apache avec Let's Encrypt SSL
Comme notre installation Redmine est sur un serveur public, il est recommandé d'utiliser SSL pour sécuriser l'échange des données du serveur.
Ajoutez le référentiel Certbot.
sudo add-apt-repository --yes ppa:certbot/certbot
sudo apt-get update
Installez Certbot, qui est l'application cliente de Let's Encrypt CA.
sudo apt -y install certbot
Remarque: Pour obtenir des certificats de Let's Encrypt CA, le domaine pour lequel les certificats doivent être générés doit être dirigé vers le serveur. Sinon, apportez les modifications nécessaires aux enregistrements DNS du domaine et attendez que le DNS se propage avant de refaire la demande de certificat. Certbot vérifie l'autorité de domaine avant de fournir les certificats.
Générez les certificats SSL.
sudo certbot certonly --webroot -w /home/redmine/redmine/public -d redmine.example.com
Les certificats générés sont susceptibles d'être stockés dans /etc/letsencrypt/live/redmine.example.com/
. Le certificat SSL sera stocké sous cert.pem
et la clé privée sera stockée sous privkey.pem
.
Les certificats Let's Encrypt expirent dans 90 jours, il est donc recommandé de configurer le renouvellement automatique des certificats à l'aide des tâches Cron.
Ouvrez le fichier de travail Cron pour l' root
utilisateur.
sudo crontab -e
Ajoutez la ligne suivante à la fin du fichier.
30 5 * * * /usr/bin/certbot renew --quiet
Le travail Cron ci-dessus s'exécutera tous les jours à 5h30. Si le certificat doit expirer, il sera automatiquement renouvelé.
Activez le module SSL pour Apache.
sudo a2enmod ssl
Modifiez le fichier hôte virtuel que nous avons créé précédemment pour Redmine.
sudo nano /etc/apache2/sites-available/redmine.conf
Modifiez le fichier hôte virtuel pour qu'il ressemble à ce qui suit.
<VirtualHost *:80>
ServerName redmine.example.com
Redirect permanent / https://redmine.example.com/
</VirtualHost>
<VirtualHost *:443>
ServerAdmin [email protected]
ServerName redmine.example.com
DocumentRoot "/home/redmine/redmine/public"
<Directory "/home/redmine/redmine/public">
Options None
Require all granted
</Directory>
PassengerAppEnv production
PassengerRoot /usr/share/rvm/gems/ruby-2.5.1/gems/passenger-5.2.3
PassengerDefaultRuby /usr/share/rvm/gems/ruby-2.5.1/wrappers/ruby
PassengerUser redmine
PassengerHighPerformance on
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/redmine.example.com/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/redmine.example.com/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/redmine.example.com/chain.pem
SSLProtocol all -SSLv2 -SSLv3
SSLHonorCipherOrder on
SSLCipherSuite ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS
<IfModule headers_module>
Header always edit Set-Cookie ^(.*)$ $1;HttpOnly;Secure
Header always set Strict-Transport-Security "max-age=15768000; includeSubDomains"
</IfModule>
</VirtualHost>
Enregistrez le fichier et quittez l'éditeur.
Redémarrez Apache pour que les modifications prennent effet.
sudo systemctl restart apache2
Vous pouvez maintenant accéder Redmine plus HTTPS
à https://redmine.example.com
.
Félicitations, vous avez correctement installé Redmine sur votre instance Ubuntu 16.04. Commencez à développer votre projet en créant ou en important votre projet.