Installer Redmine sur Debian avec RVM

De Analyse Développement Hacking
Sauter à la navigation Sauter à la recherche
Consulter le wiki : Accueil du wiki - Objectifs - Administrateur - Bureautique - Développeur - Intégrateur - Marketing - Multimédia - Objets numériques - Jeux - We make Hack
Consulter le site : Accueil du site - Annuaire - Blog - Forum - Outils - Utilisateur     Consulter le Redmine : Accueil du Redmine

Sommaire

Installer Redmine sur Debian avec RVM

Introduction

Pour éviter les problèmes de dépendances liées au différentes versions de Ruby, on décide d’installer un utilitaire qui s’appelle RVM.
Il permet de faire coexister plusieurs installations de Ruby sur une même machine, tout en séparant l’installation des gems.
RVM permet de pouvoir mettre à jour Ruby facilement.

Commentaire sur le tutoriel qui va suivre

Le premier tutoriel complet qui m'a permis d'installer Redmine sur Debian depuis le dépôt officiel de Debian : Installer Redmine sur Debian.
Un très long tutoriel, plutôt complet ! Attention, vérifier la justesse des droits qui sont appliqués.
Il est également nécessaire de re vérifier la qualité du script de chiffrement des sauvegardes.
Hormis cela, l'installation est fonctionnelle et détaillée.
Mes précédents essais qui ont été infructueux pour installer Redmine avec RVM : Installer Redmine sur Debian avec RVM ne fonctionne pas.
On préférera l'utilisation de RVM pour ne pas dépendre de la version des gems du dépôt officiel de Debian.
Je n'était pas sur de la façon d'installer et de valider la configuration de Passenger.
Je rencontrais également des problèmes pour afficher Redmine qui rendait une page 403.
Entre temps, j'ai pu réaliser une installation fonctionnelle de Redmine avec RVM.
Utiliser RVM permet d'installer et de maintenir Redmine sur la durée.
Le tutoriel utilisé ci-dessous date de 2015 a été revu par Visionduweb en 2019 !
Redmine 4.0 installé avec RVM est parfaitement fonctionnel ! Merci The Linux Chronicles !
Le tutoriel suivant est mis en pratique sous une Debian 9 Stretch AMD64 Stable depuis VirtualBox !

Installation

Prérequis

Créer un domaine fictif dans le cas d'un test sur une machine locale

# Le domaine fictif permettra de consulter Redmine localement depuis le navigateur.
# Ouvrir le fichier /etc/hosts en tant que root.
su
nano /etc/hosts
# Ajouter la deuxième ligne.
127.0.0.1       localhost
127.0.0.1       redmine.fictif.fr

Installer les paquets

# Par défaut, sur Debian Stretch :
sudo apt-get install mariadb-server libmariadbclient-dev apache2 apache2-dev libapr1-dev libaprutil1-dev libcurl4-gnutls-dev libmagickwand-dev imagemagick build-essential dirmngr curl
# Par défaut, sur Debian Buster, avec Apache2 et MariaDB Serveur déjà installés :
sudo apt install libmariadbclient-dev apache2-dev libapr1-dev libaprutil1-dev libcurl4-gnutls-dev libmagickwand-dev imagemagick build-essential dirmngr curl

Installation

Créer un utilisateur Redmine

su -
sudo adduser --home /opt/redmine redmine
# Utiliser le mot de passe "redmine"
# Ajouter l'utilisateur redmine au groupe des sudoers :
gpasswd -a redmine sudo
# Passer à l'utilisateur Redmine.
su - redmine

Préparer la base de données

# De préférence, s'assurer que la base de données a bien été sécurisée en lançant le paquet mysql_secure_installation
# Définir un nouveau mot de passe pour l'utilisateur root de mariaDB.
# En root :
su -
mysql -uroot -p
create database redmine_production character set utf8;
create user 'redmine'@'localhost' identified by 'redmine_mysql_user_password';
grant all privileges on redmine_production.* to 'redmine'@'localhost';
flush privileges;
exit;
# Importer une base de données existante dans Redmine :
mysql -u redmine -predmine_mysql_user_password -h localhost -D redmine_production < backup.sql

Install RVM

# Passer à l'utilisateur redmine.
su - redmine
# Ajouter les clés de RVM.
curl -sSL https://rvm.io/mpapis.asc | gpg --import -
curl -sSL https://rvm.io/pkuczynski.asc | gpg --import -
# Installer RVM Stable.
curl -sSL https://get.rvm.io | bash -s stable
# Démarrer RVM.
source /opt/redmine/.rvm/scripts/rvm

Installer Redmine depuis Git

su - redmine
# Télécharger Redmine 4.0 :
wget https://codeload.github.com/redmine/redmine/zip/4.0-stable
# Décompresser Redmine 4.0 :
unzip 4.0-stable
# Supprimer l'archive :
rm 4.0-stable
ls
# Affichera :
redmine-4.0-stable
# Créer un lien vers un dossier "active".
# Permet d'installer une nouvelle version de redmine par exemple dans le dossier redmine-4-1-stable et d'activer ce nouveau dossier comme étant le dossier actif.
ln -s redmine-4.0-stable active
# On pourrait ici gérer plusieurs Redmine pour plusieurs sites.
# Créer redmine-4.0-stable-site1 et redmine-4.0-stable-site2
# Créer alors deux liens ln -s redmine-4.0-stable redmine-site1 et ln -s redmine-4.0-stable redmine-site2

Configurer Redmine

# S'identifier à nouveau avec l'utilisateur redmine.
su - redmine
cd redmine-4.0-stable
cp config/database.yml.example config/database.yml
cp config/configuration.yml.example config/configuration.yml
# Éditer la base de données.
nano config/database.yml
production:
  adapter: mysql2
  database: redmine_production
  host: localhost
  username: redmine
  password: "redmine_mysql_user_password"
  encoding: utf8
sudo chown -R www-data files log tmp public/plugin_assets
sudo chmod -R 0775 files log tmp public/plugin_assets

Installer Ruby et Gems

# Toujours avec l'utilisateur redmine.
su - redmine
cd ~
# Si on installe la 2.4, c'est la dernière version stable pour la version 2.4 sera proposée, ce sera la 2.4.6 lors de la dernière mise à jour du tutoriel.
# Lors de l'installation sur Stretch, c'est la version 2.4.5 qui est configurée.
# Lors de l'installation sur Buster, c'est la version 2.4.6 qui est configurée.
# Il est possible de définir la version de Ruby a installer pour la 2.4.5 si nécessaire.
# rvm install 2.4.5
rvm install 2.4
# Affichera :
...
( Install of ruby-2.4.5 - #complete )
# Ou :
( Install of ruby-2.4.6 - #complete )
# Lancer :
rvm gemset create redmine-4.0-stable
# Va afficher pour Debian Stretch :
ruby-2.4.5 - #gemset created /opt/redmine/.rvm/gems/ruby-2.4.5@redmine-4.0-stable
# Va afficher pour Debian Buster :
ruby-2.4.6 - #gemset created /opt/redmine/.rvm/gems/ruby-2.4.6@redmine-4.0-stable
# Créer un seul gemset pour un ou plusieurs projet.
# Créer un deuxième gemset pour tester le passage vers une nouvelle version de Ruby.
# Je n'ai pas testé si il est possible d'utiliser plusieurs gemset différents en même temps. Il faudrait pouvoir charger Passenger avec les différentes configurations spécifiques aux différents gemset.
# Pour mettre en place plusieurs instances séparées de Redmine, j'utilise le même gemset, mais, un dossier et une base de données pour chaque projet Redmine à déployer.
# Consulter les versions de Ruby pouvant être utilisées avec Redmine : https://www.redmine.org/projects/redmine/wiki/RedmineInstall

Sélectionner le bon gemset

# Lister les gemsets disponibles
rvm list gemsets
# Affiche depuis Debian Stretch :
rvm gemsets

=> ruby-2.4.5 [ x86_64 ]
   ruby-2.4.5@global [ x86_64 ]
   ruby-2.4.5@redmine-4.0-stable [ x86_64 ]
# Pour Debian Stretch, utiliser ruby-2.4.5@redmine-4.0-stable [ x86_64 ], pour Debian Buster, utiliser ruby-2.4.6@redmine-4.0-stable [ x86_64 ]
# Pour Stretch :
rvm use gemset ruby-2.4.5@redmine-4.0-stable
# Pour Buster :
rvm use gemset ruby-2.4.6@redmine-4.0-stable
# Affiche :
Using /opt/redmine/.rvm/gems/ruby-2.4.5 with gemset redmine-4.0-stable
# On vérifie si le changement a bien été appliqué :
rvm list gemsets
# Affiche :
rvm gemsets

   ruby-2.4.5 [ x86_64 ]
   ruby-2.4.5@global [ x86_64 ]
=> ruby-2.4.5@redmine-4.0-stable [ x86_64 ]

Installer les Gems pour Redmine

# Toujours avec l'utilisateur redmine.
su - redmine
# Installer les gems :
cd redmine-4.0-stable/
bundle install --without develop,test,postgresql,sqlite
# Toutes les gems sont au vert ou en blanc. On peut donc continuer l'installation de Redmine.
# Un message en rouge est d'abord affiché :
The dependency tzinfo-data (>= 0) will be unused by any of the platforms Bundler is installing for. Bundler is installing for ruby but the dependency is only for x86-mingw32, x64-mingw32, x86-mswin32. To add those platforms to the bundle, run `bundle lock --add-platform x86-mingw32 x64-mingw32 x86-mswin32`.
# Toutes les installations sont effectuées et sont au vert.
# Un message informatif est affiché à la fin, pour le gem YARD :
As of YARD v0.9.2:

RubyGems "--document=yri,yard" hooks are now supported. You can auto-configure
YARD to automatically build the yri index for installed gems by typing:

    $ yard config --gem-install-yri

See `yard config --help` for more information on RubyGems install hooks.

You can also add the following to your .gemspec to have YARD document your gem
on install:

    spec.metadata["yard.run"] = "yri" # use "yard" to build full HTML docs.
# Installer maintenant passenger !
gem install passenger

RMV et bundler intégration

# Toujours avec l'utilisateur redmine
cd ~
# Cette étape est nécessaire car nous allons utiliser un bundle pour installer les gems requises de Redmine.
gem regenerate_binstubs
# Affiche :
try also: gem pristine --binstubs
bundler 1.16.6
nokogiri 1.10.2
passenger 6.0.2
puma 3.12.1
rack 2.0.6
railties 5.2.2.1
rake 12.3.2
rake 12.0.0
rdoc 5.0.0
redcarpet 3.4.0
rouge 3.3.0
sprockets 3.7.2
thor 0.20.3
yard 0.9.18

Installer Phusion Passenger

# Toujours avec l'utilisateur redmine
cd redmine-4.0-stable/
# Installer Phusion Passenger :
passenger-install-apache2-module
# Le Choix 1 est proposé par défaut. (A vérifier si cette étape est toujours nommée choix 1.)
# Je laisse ruby et python de pré sélectionné dans la sélection par défaut et je valide avec entrée.
# Si nécessaire, changer les options avec la barre espace.
Configurer Apache Passenger
# À la fin de la compilation, la commande précédente affiche les informations suivantes :
Please edit your Apache configuration file, and add these lines:
# Ouvrir un second terminal pour ajouter les lignes proposées au début de la configuration principale de Apache2 :
# Ajouter la configuration proposée directement au début du fichier /etc/apache2/apache2.conf
sudo nano /etc/apache2/apache2.conf
LoadModule passenger_module /opt/redmine/.rvm/gems/ruby-2.4.5@redmine-4.0-stable/gems/passenger-6.0.2/buildout/apache2/mod_passenger.so
<IfModule mod_passenger.c>
  PassengerRoot /opt/redmine/.rvm/gems/ruby-2.4.5@redmine-4.0-stable/gems/passenger-6.0.2
  PassengerDefaultRuby /opt/redmine/.rvm/gems/ruby-2.4.5@redmine-4.0-stable/wrappers/ruby
</IfModule>
# Il y a une seule instance Passenger par Apache, il est donc logique de définir PassengerRoot une seule fois dans la configuration Apache.
### Apache affichera des avertissements si vous essayez de déclarer des options globales à un niveau inférieur tel que <VirtualHost>.
### La valeur deviendrait ambiguë et la première section <VirtualHost> à recevoir une demande déterminerait la valeur finale.
###
### D'après le tutoriel initial :
### Quand nous voudrons passer d’une installation Redmine à une installation Ruby + Gems séparée, nous aurons des modules passenger séparés pour chacune d’elles.
### Créer un fichier de configuration sous /etc/apache2/conf-available nommé passenger-ruby-2.4.5@redmine-4.0-stable qui se connecte au module de passenger.
### Créer un lien depuis le dossier /etc/apache2/conf-enable/ pour activer le module avec ln -s ../conf-available/passenger-ruby-2.4.5@redmine-4.0-stable passenger-ruby-2.4.5@redmine-4.0-stable
### Je n'utilise pas cette méthode !
# Redémarrer Apache2 :
sudo /etc/init.d/apache2 restart
# Terminer l'installation précédente avec la touche entrée depuis la première fenêtre pour finaliser cette installation.
# Si les contrôles ne sont pas passés au vert, relancer l'installation précédente jusqu'à valider les tests.
# Normalement tout c'est bien passé et les contrôles sont au vert.
# La commande suivante permet de vérifier si la configuration est correcte.
passenger-config validate-install
# Noter que dans le cas d'instances multiples de Redmine, j'ai relancé cette étape dans le second dossier pour un second Redmine que je mettais en place.
# J'ai utilisé le même gemset que celui utilisé au premier déploiement de Redmine, je me suis placé dans le dossier du second Redmine.
### Au lancement du script, j'ai lancé l'étape numéro 2 il me semble, apprendre à utiliser (...) et j'ai laissé la compilation ce faire.
### Je n'ai pas compris pourquoi une compilation a été faite, j'ai peut être choisi le choix 1 malgré tout.
# Une fois la compilation finie, ne rien faire de plus pour cette étape, le module ayant déjà été chargé pour le premier Redmine.

Configurer le VirtualHost

# Toutes les références au chemin Redmine utilisent le lien symbolique " active " au lieu d'utiliser directement le répertoire Redmine.
# De cette manière, il suffit de pointer le lien symbolique vers le bon répertoire de Redmine pour basculer entre les versions de Redmine. Un seul fichier VirtualHost est alors nécessaire.
# Je crée le fichier redmine.conf dans le dossier des sites disponibles pour Apache2 :
# Pour d'avantage de rigueur, nommer le fichier de configuration de la même façon que le nom de domaine utilisé : redmine.fictif.fr.conf
cd /etc/apache2/sites-available
sudo nano redmine.conf
<VirtualHost *:80>
ServerAdmin admin@domain.sample
ServerName redmine.fictif.fr

DocumentRoot /opt/redmine/active/public/
RailsBaseURI /
PassengerAppRoot /opt/redmine/active
PassengerUser www-data
PassengerGroup www-data

<Directory /opt/redmine/active/public/>
Options +Indexes +FollowSymLinks -MultiViews
AllowOverride All
# Je commente les lignes pour Apache 2.2. 
# Order allow,deny
# Allow from all
# Je remplace par les lignes pour Apache 2.4
Require all granted
</Directory>
LogLevel warn
ErrorLog ${APACHE_LOG_DIR}/redmine.error.log
CustomLog ${APACHE_LOG_DIR}/redmine.access.log combined
</VirtualHost>
# Activer le site.
sudo a2ensite redmine.conf
# Redémarrer Apache2 pour prendre en compte le VirtualHost.
sudo /etc/init.d/apache2 restart

Finaliser l'installation et générer la base de données par défaut

# Depuis l'utilisateur redmine dans le dossier de redmine stable :
cd ~
cd redmine-4.0-stable/
# Changer le propriétaire et le groupe du fichier de log pour redmine pour ne pas avoir d'erreur lors de la commande "RAILS_ENV=production rake redmine:load_default_data".
sudo chown redmine:redmine -R /opt/redmine/redmine-4.0-stable/log/
### Vérifier si les logs seront bien écrites une fois Redmine installé, sinon, changer alors les droits pour ceux de Apache2 :
### Une fois redmine en production, donner le fichier de logs à Apache2.
### sudo chown www-data:www-data -R /opt/redmine/redmine-4.0-stable/log/
rake generate_secret_token
RAILS_ENV=production rake db:migrate
# Se renseigner à nouveau sur cette commande pour être sur de son bon usage.
# Ignorer cette étape si une base de données Redmine a déjà été importée dans la base de données.
# Attention, si une base a été importée suite à un dump, la commande suivante devrait vider la base et ses données.
# L'étape rake redmine: load_default_data ne serait nécessaire que lors d'une nouvelle installation.
RAILS_ENV=production rake redmine:load_default_data
# Il faudra préciser le choix de langue :
fr
# Le rake redmine: plugins: migrate est nécessaire uniquement si vous utilisez des plugins supplémentaires.
RAILS_ENV=production rake redmine:plugins:migrate
# Redmine est fonctionnel sur Debian Stretch 9 AMD64 Stable et Debian Buster 10 AMD64 pour une installation de Redmine 4.0 avec RVM et Ruby 2.4.5 / 2.4.6.

Mon retour sur le tutoriel d'origine

# Cet excellent tutoriel m'aura permis de finaliser une installation de RVM et Ruby pour installer Redmine 4.0.
Ok.png Parallel Redmine Installations : http://thelinuxchronicles.blogspot.com/2015/03/parallel-redmine-installations.html
# La traduction de ce tutoriel vers le français, en 2019, intègre des améliorations pour une installation fonctionnelle sur Debian 9 Stretch AMD64 et Debian Buster 10 AMD64.
# J'ai listé et testé plusieurs tutoriels pour installer RVM sur Debian pour installer Redmine mais aucun ne m'a permis d'aboutir l'installation de façon simple et rapide.
# Consulter quelques-unes des améliorations apportées :
1) Les clés pour le paquet RVM ont été mises à jour
Utiliser simplement les deux lignes suivantes :
curl -sSL https://rvm.io/mpapis.asc | gpg --import -
curl -sSL https://rvm.io/pkuczynski.asc | gpg --import -
0) Les paquets ont été mis à jour pour MariaDB + dirmngr + cURL
sudo apt-get install mariadb-server libmariadbclient-dev apache2 apache2-dev libapr1-dev libaprutil1-dev libcurl4-gnutls-dev libmagickwand-dev imagemagick build-essential dirmngr curl
2) Création d'un domaine virtuel
# Éditer le fichier host :
nano /etc/hosts
# Ajouter la ligne :
127.0.0.1       redmine.fictif.fr
3) Vérifier la configuration de passenger, après avoir lancé passenger-install-apache2-module
# Si tout est au vert, c'est que passenger est bien configuré.
passenger-config validate-install
4) Installation de la version 4.0 de Redmine avec RVM 2.4
# La version de Redmine choisie pour l'installation est la version stable.
5) Ajout de la procédure pour créer le VirtualHost
# Crée le fichier redmine.conf dans le dossier des sites disponibles pour Apache2 :
cd /etc/apache2/sites-available
sudo nano redmine.conf
# Remplacer dans le VirtualHost la ligne du ServerName par ServerName redmine.fictif.fr
# Remplacer les deux lignes "Order allow,deny" et "Allow from all" par "Require all granted" pour Apache 2.4.
6) Activer le VirtualHost pour activer le site
sudo a2ensite redmine.conf
# Redémarrer Apache2 pour prendre en compte le VirtualHost.
sudo /etc/init.d/apache2 restart
IMPORTANT : Les problèmes rencontrés :
1)
Suite à l'installation de passenger-install-apache2-module tu proposes de créer un fichier de configuration sous /etc/apache2/conf-available nommé passenger-ruby-2.4.5@redmine-4.0-stable
Je n'arrive PAS à charger cette configuration qui reste au rouge.
J'ai du ajouter la configuration dans /etc/apache2/apache2.conf
Une idée du pourquoi ?
RÉPONSE : Il faut faire un lien symbolique depuis le dossier des configurations enable.
Je ne sais toujours pas si il est possible de charger et d'utiliser deux configurations de passenger utilisant un gemset différent. 
# Questions :
1) Mettre à jour une base de données d'une version précédente de Redmine
# Utiliser la commande :
RAILS_ENV=production rake db:migrate
# N'y a t'il pas aussi une étape pour vider le cache session ou autres choses ?
# Je n'ai as eu besoin de vider un cache pour rendre fonctionnelle la sauvegarde d'une base de données importée.

Script pour sauvegarder Redmine

Script bash pour sauvegarder Redmine.
Révision par Zer00CooL : https://gist.github.com/ZerooCool/b06925403f94960e32c3c52f2db81b01

Réimporter Redmine

Les éléments suivants sont nécessaire pour réinstaller une sauvegarde, ou, pour faire une mise à jour.

Réimporter le fichier de configuration de redmine

Deux fichiers sont présents, je ne suis pas sur qu'il faille sauvegarder les deux.
C'est le fichier configuration.yml que l'on importe au début lors de l'installation, c'est sûrement ce fichier la qui est essentiel.
# Comprend notamment le paramétrage pour l'adresse mail utilisée sur le site.
configuration.yml
# D'autres configurations complémentaires.
settings.yml

Réimporter le fichier de configuration de la base de données

Sauvegarder puis réinstaller database.yml.

Réimporter une sauvegarde de la base de données

su - redmine
mysql -u redmine -predmine_mysql_user_password -h localhost -D redmine_production < backup.sql
cd redmine-4.0-stable/
rvm list gemsets
rvm use gemset ruby-2.4.5@redmine-4.0-stable 
rake generate_secret_token
RAILS_ENV=production rake db:migrate

Réimporter une base de données de Redmine et la mettre à jour

# Importer la base de données d'une version antérieur de Redmine.
# Ici, la version de ma sauvegarde de Redmine 3.4.6 est mise à jour pour correspondre à la version de la base de données de Redmine 4.0.
su
sudo mysql -u root redmine_production < sql.sql
exit
su - redmine
# On liste les gems disponibles.
rvm gemsets
# On choisi le gemset qui a été créé pour redmine.
rvm use gemset ruby-2.4.5@redmine-4.0-stable
# On se place dans le dossier de Redmine.
cd redmine-4.0-stable/
# On met à jour la base de données.
RAILS_ENV=production rake db:migrate
# Va afficher :
== 20170723112801 RenameCommentsToContent: migrating ==========================
-- rename_column(:comments, :comments, :content)
   -> 0.0248s
== 20170723112801 RenameCommentsToContent: migrated (0.0249s) =================

== 20180913072918 AddVerifyPeerToAuthSources: migrating =======================
-- change_table(:auth_sources)
   -> 0.0490s
== 20180913072918 AddVerifyPeerToAuthSources: migrated (0.0494s) ==============

== 20180923082945 ChangeSqliteBooleansTo0And1: migrating ======================
== 20180923082945 ChangeSqliteBooleansTo0And1: migrated (0.0000s) =============

== 20180923091603 ChangeSqliteBooleansDefault: migrating ======================
== 20180923091603 ChangeSqliteBooleansDefault: migrated (0.0000s) =============

Réimporter les fichiers

su - redmine
# Placer les fichiers dans le répertoire files :
cd redmine-4.0-stable/files
# Laisser éventuellement le dossier files avec la configuration par défaut résultant de l'installation.
sudo chown www-data:redmine files
# Je ne suis pas sur que donner les fichiers à l'utilisateur redmine soit plus conseillé que de les donner directement à l'utilisateur Apache2.
sudo chown redmine:redmine -R files/
Sinon, donner le dossier dans son intégralité à Apache2.
# Donner les droits Apache2 au(x) dossier(s) contenant les fichiers.
sudo chown www-data:www-data -R files/
Todo.png
Réimporter un thème
# Pour importer un thème ayant été sauvegardé, copier le dossier du thème dans le répertoire des thèmes :
/opt/redmine/redmine-4.0-stable/public/themes/
# Appliquer le propriétaire et le groupe redmine au thème ajouté :
cd /opt/redmine/redmine-4.0-stable/public/themes/
chown redmine:redmine -R circle/
# Si le thème sauvegardé ne fonctionne pas, utiliser sa dernière mise à jour.
# Sinon, changer de thème ou utiliser un thème par défaut.
Réimporter un plugin
# Déplacer le dossier sauvegardé du plugin dans le dossier des plugins :
cd /opt/redmine/redmine-4.0-stable/plugins/
# Dans le cas d'un plugin qui a déjà été installé, avec des dépendances en base de données, la base de données devrait déjà contenir les informations.
# Si le plugin est bien compatible avec la nouvelle installation, il devrait être fonctionnel.
# Sinon, supprimer les fichiers du plugin, en attendant une compatibilité future.
# Redémarrer Apache2.
# Lors de mon essai pour réimporter le plugin de ckecklist, un message d'erreur est affiché.
# Peut être lié au fait de la montée en version de Ruby, de la 2.4.5 vers la 2.4.6.
bundle exec rake redmine:plugins:migrate RAILS_ENV=production
(in /opt/redmine/redmine-4.0-stable)
rake aborted!
LoadError: Error loading the 'mysql2' Active Record adapter. Missing a gem it depends on? mysql2 is not part of the bundle. Add it to your Gemfile.
bundle exec rake redmine:plugins:migrate RAILS_ENV=production
(in /opt/redmine/redmine-4.0-stable)
rake aborted!
LoadError: Error loading the 'mysql2' Active Record adapter. Missing a gem it depends on? mysql2 is not part of the bundle. Add it to your Gemfile.
/opt/redmine/.rvm/gems/ruby-2.4.5@redmine-4.0-stable/gems/activerecord-5.2.3/lib/active_record/connection_adapters/mysql2_adapter.rb:6:in `<top (required)>'
/opt/redmine/.rvm/gems/ruby-2.4.5@redmine-4.0-stable/gems/activesupport-5.2.3/lib/active_support/dependencies.rb:291:in `require'
/opt/redmine/.rvm/gems/ruby-2.4.5@redmine-4.0-stable/gems/activesupport-5.2.3/lib/active_support/dependencies.rb:291:in `block in require'
/opt/redmine/.rvm/gems/ruby-2.4.5@redmine-4.0-stable/gems/activesupport-5.2.3/lib/active_support/dependencies.rb:257:in `load_dependency'
/opt/redmine/.rvm/gems/ruby-2.4.5@redmine-4.0-stable/gems/activesupport-5.2.3/lib/active_support/dependencies.rb:291:in `require'
/opt/redmine/.rvm/gems/ruby-2.4.5@redmine-4.0-stable/gems/activerecord-5.2.3/lib/active_record/connection_adapters/connection_specification.rb:191:in `spec'
/opt/redmine/.rvm/gems/ruby-2.4.5@redmine-4.0-stable/gems/activerecord-5.2.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:956:in `establish_connection'
/opt/redmine/.rvm/gems/ruby-2.4.5@redmine-4.0-stable/gems/activerecord-5.2.3/lib/active_record/connection_handling.rb:60:in `establish_connection'
/opt/redmine/.rvm/gems/ruby-2.4.5@redmine-4.0-stable/gems/activerecord-5.2.3/lib/active_record/railtie.rb:136:in `block (2 levels) in <class:Railtie>'
/opt/redmine/.rvm/gems/ruby-2.4.5@redmine-4.0-stable/gems/activesupport-5.2.3/lib/active_support/lazy_load_hooks.rb:71:in `instance_eval'
/opt/redmine/.rvm/gems/ruby-2.4.5@redmine-4.0-stable/gems/activesupport-5.2.3/lib/active_support/lazy_load_hooks.rb:71:in `block in execute_hook'
/opt/redmine/.rvm/gems/ruby-2.4.5@redmine-4.0-stable/gems/activesupport-5.2.3/lib/active_support/lazy_load_hooks.rb:62:in `with_execution_control'
/opt/redmine/.rvm/gems/ruby-2.4.5@redmine-4.0-stable/gems/activesupport-5.2.3/lib/active_support/lazy_load_hooks.rb:67:in `execute_hook'
/opt/redmine/.rvm/gems/ruby-2.4.5@redmine-4.0-stable/gems/activesupport-5.2.3/lib/active_support/lazy_load_hooks.rb:43:in `block in on_load'
/opt/redmine/.rvm/gems/ruby-2.4.5@redmine-4.0-stable/gems/activesupport-5.2.3/lib/active_support/lazy_load_hooks.rb:42:in `each'
/opt/redmine/.rvm/gems/ruby-2.4.5@redmine-4.0-stable/gems/activesupport-5.2.3/lib/active_support/lazy_load_hooks.rb:42:in `on_load'
/opt/redmine/.rvm/gems/ruby-2.4.5@redmine-4.0-stable/gems/activerecord-5.2.3/lib/active_record/railtie.rb:132:in `block in <class:Railtie>'
/opt/redmine/.rvm/gems/ruby-2.4.5@redmine-4.0-stable/gems/railties-5.2.3/lib/rails/initializable.rb:32:in `instance_exec'
/opt/redmine/.rvm/gems/ruby-2.4.5@redmine-4.0-stable/gems/railties-5.2.3/lib/rails/initializable.rb:32:in `run'
/opt/redmine/.rvm/gems/ruby-2.4.5@redmine-4.0-stable/gems/railties-5.2.3/lib/rails/initializable.rb:61:in `block in run_initializers'
/opt/redmine/.rvm/gems/ruby-2.4.5@redmine-4.0-stable/gems/railties-5.2.3/lib/rails/initializable.rb:60:in `run_initializers'
/opt/redmine/.rvm/gems/ruby-2.4.5@redmine-4.0-stable/gems/railties-5.2.3/lib/rails/application.rb:361:in `initialize!'
/opt/redmine/redmine-4.0-stable/config/environment.rb:14:in `<top (required)>'
/opt/redmine/.rvm/gems/ruby-2.4.5@redmine-4.0-stable/gems/activesupport-5.2.3/lib/active_support/dependencies.rb:291:in `require'
/opt/redmine/.rvm/gems/ruby-2.4.5@redmine-4.0-stable/gems/activesupport-5.2.3/lib/active_support/dependencies.rb:291:in `block in require'
/opt/redmine/.rvm/gems/ruby-2.4.5@redmine-4.0-stable/gems/activesupport-5.2.3/lib/active_support/dependencies.rb:257:in `load_dependency'
/opt/redmine/.rvm/gems/ruby-2.4.5@redmine-4.0-stable/gems/activesupport-5.2.3/lib/active_support/dependencies.rb:291:in `require'
/opt/redmine/.rvm/gems/ruby-2.4.5@redmine-4.0-stable/gems/railties-5.2.3/lib/rails/application.rb:337:in `require_environment!'
/opt/redmine/.rvm/gems/ruby-2.4.5@redmine-4.0-stable/gems/railties-5.2.3/lib/rails/application.rb:520:in `block in run_tasks_blocks'
/opt/redmine/.rvm/gems/ruby-2.4.5@redmine-4.0-stable/gems/rake-13.0.0/exe/rake:27:in `<top (required)>'
/opt/redmine/.rvm/gems/ruby-2.4.5@redmine-4.0-stable/bin/ruby_executable_hooks:24:in `eval'
/opt/redmine/.rvm/gems/ruby-2.4.5@redmine-4.0-stable/bin/ruby_executable_hooks:24:in `<main>'

Caused by:
Gem::LoadError: mysql2 is not part of the bundle. Add it to your Gemfile.
/opt/redmine/.rvm/gems/ruby-2.4.5@redmine-4.0-stable/gems/activerecord-5.2.3/lib/active_record/connection_adapters/mysql2_adapter.rb:6:in `<top (required)>'
/opt/redmine/.rvm/gems/ruby-2.4.5@redmine-4.0-stable/gems/activesupport-5.2.3/lib/active_support/dependencies.rb:291:in `require'
/opt/redmine/.rvm/gems/ruby-2.4.5@redmine-4.0-stable/gems/activesupport-5.2.3/lib/active_support/dependencies.rb:291:in `block in require'
/opt/redmine/.rvm/gems/ruby-2.4.5@redmine-4.0-stable/gems/activesupport-5.2.3/lib/active_support/dependencies.rb:257:in `load_dependency'
/opt/redmine/.rvm/gems/ruby-2.4.5@redmine-4.0-stable/gems/activesupport-5.2.3/lib/active_support/dependencies.rb:291:in `require'
/opt/redmine/.rvm/gems/ruby-2.4.5@redmine-4.0-stable/gems/activerecord-5.2.3/lib/active_record/connection_adapters/connection_specification.rb:191:in `spec'
/opt/redmine/.rvm/gems/ruby-2.4.5@redmine-4.0-stable/gems/activerecord-5.2.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:956:in `establish_connection'
/opt/redmine/.rvm/gems/ruby-2.4.5@redmine-4.0-stable/gems/activerecord-5.2.3/lib/active_record/connection_handling.rb:60:in `establish_connection'
/opt/redmine/.rvm/gems/ruby-2.4.5@redmine-4.0-stable/gems/activerecord-5.2.3/lib/active_record/railtie.rb:136:in `block (2 levels) in <class:Railtie>'
/opt/redmine/.rvm/gems/ruby-2.4.5@redmine-4.0-stable/gems/activesupport-5.2.3/lib/active_support/lazy_load_hooks.rb:71:in `instance_eval'
/opt/redmine/.rvm/gems/ruby-2.4.5@redmine-4.0-stable/gems/activesupport-5.2.3/lib/active_support/lazy_load_hooks.rb:71:in `block in execute_hook'
/opt/redmine/.rvm/gems/ruby-2.4.5@redmine-4.0-stable/gems/activesupport-5.2.3/lib/active_support/lazy_load_hooks.rb:62:in `with_execution_control'
/opt/redmine/.rvm/gems/ruby-2.4.5@redmine-4.0-stable/gems/activesupport-5.2.3/lib/active_support/lazy_load_hooks.rb:67:in `execute_hook'
/opt/redmine/.rvm/gems/ruby-2.4.5@redmine-4.0-stable/gems/activesupport-5.2.3/lib/active_support/lazy_load_hooks.rb:43:in `block in on_load'
/opt/redmine/.rvm/gems/ruby-2.4.5@redmine-4.0-stable/gems/activesupport-5.2.3/lib/active_support/lazy_load_hooks.rb:42:in `each'
/opt/redmine/.rvm/gems/ruby-2.4.5@redmine-4.0-stable/gems/activesupport-5.2.3/lib/active_support/lazy_load_hooks.rb:42:in `on_load'
/opt/redmine/.rvm/gems/ruby-2.4.5@redmine-4.0-stable/gems/activerecord-5.2.3/lib/active_record/railtie.rb:132:in `block in <class:Railtie>'
/opt/redmine/.rvm/gems/ruby-2.4.5@redmine-4.0-stable/gems/railties-5.2.3/lib/rails/initializable.rb:32:in `instance_exec'
/opt/redmine/.rvm/gems/ruby-2.4.5@redmine-4.0-stable/gems/railties-5.2.3/lib/rails/initializable.rb:32:in `run'
/opt/redmine/.rvm/gems/ruby-2.4.5@redmine-4.0-stable/gems/railties-5.2.3/lib/rails/initializable.rb:61:in `block in run_initializers'
/opt/redmine/.rvm/gems/ruby-2.4.5@redmine-4.0-stable/gems/railties-5.2.3/lib/rails/initializable.rb:60:in `run_initializers'
/opt/redmine/.rvm/gems/ruby-2.4.5@redmine-4.0-stable/gems/railties-5.2.3/lib/rails/application.rb:361:in `initialize!'
/opt/redmine/redmine-4.0-stable/config/environment.rb:14:in `<top (required)>'
/opt/redmine/.rvm/gems/ruby-2.4.5@redmine-4.0-stable/gems/activesupport-5.2.3/lib/active_support/dependencies.rb:291:in `require'
/opt/redmine/.rvm/gems/ruby-2.4.5@redmine-4.0-stable/gems/activesupport-5.2.3/lib/active_support/dependencies.rb:291:in `block in require'
/opt/redmine/.rvm/gems/ruby-2.4.5@redmine-4.0-stable/gems/activesupport-5.2.3/lib/active_support/dependencies.rb:257:in `load_dependency'
/opt/redmine/.rvm/gems/ruby-2.4.5@redmine-4.0-stable/gems/activesupport-5.2.3/lib/active_support/dependencies.rb:291:in `require'
/opt/redmine/.rvm/gems/ruby-2.4.5@redmine-4.0-stable/gems/railties-5.2.3/lib/rails/application.rb:337:in `require_environment!'
/opt/redmine/.rvm/gems/ruby-2.4.5@redmine-4.0-stable/gems/railties-5.2.3/lib/rails/application.rb:520:in `block in run_tasks_blocks'
/opt/redmine/.rvm/gems/ruby-2.4.5@redmine-4.0-stable/gems/rake-13.0.0/exe/rake:27:in `<top (required)>'
/opt/redmine/.rvm/gems/ruby-2.4.5@redmine-4.0-stable/bin/ruby_executable_hooks:24:in `eval'
/opt/redmine/.rvm/gems/ruby-2.4.5@redmine-4.0-stable/bin/ruby_executable_hooks:24:in `<main>'
Tasks: TOP => redmine:plugins:migrate => environment
(See full trace by running task with --trace)
# Vérifier les gems qui sont chargées :
gem list|grep mysql
# En production avec ruby 2.4.5 sur Debian Stretch, j'ai bien la gem mysql2 qui s'affiche :
mysql2 (0.5.2)
# En locale sur la machine virtuelle avec ruby 2.4.5 ou ruby 2.4.6 sur Debian Buster, la gem mysql2 ne s'affiche pas.
# J’installe la gem mais malgré tout, l'erreur persiste lors de l'installation du plugin, et, Redmine ne démarre pas si le répertoire du plugin redmine_checklist est présent.
gem install mysql2
# Je suis obligé de supprimer le répertoire du plugin pour pouvoir utiliser Redmine.
# Il est généralement préférable de ne pas ajouter de plugins sur une application, pour éviter ce genre de risques de dysfonctionnements suite à une migration.

Première utilisation

Changer de thème

# Changer de thème : Changer de thème Redmine.

Changer le favicon.ico de Redmine

Le favicon.ico de Redmine se trouve dans le dossier public.
Changer le favicon.ico et il sera immédiatement pris en compte par Redmine.
/opt/redmine/redmine-4.0-stable-prod-vdw/public/favicon.ico

Changer le logo de Redmine

Le logo de Redmine se trouve dans le dossier du themes utilisé.
# Changer le logo du thème Circle :
/opt/redmine/redmine-4.0-stable/public/themes/circle/images/

file logo.png
logo.png: PNG image data, 38 x 40, 8-bit/color RGBA, non-interlaced

Configurer le système de mails

# Configurer l’envoi de mails depuis le fichier : config/configuration.yml
# Deux premières lignes deux espaces, puis, quatre espaces aux lignes suivantes.
# Conserver les espaces sinon le site ne charge pas et un message d'erreur est affiché.
# Pour un mail OVH :
  delivery_method: :smtp
  smtp_settings:
      enable_starttls_auto: true
      address: ssl0.ovh.net
      port: 587
      domain: visionduweb.fr
      authentication: :login
      user_name: LEMAIL@visionduweb.fr
      password: LE_MOT_DE_PASSE
      openssl_verify_mode: 'none'
# Pour un autre fournisseur de mail :
Configurer son mail pour un fournisseur autre que OVH.
# Après chaque modification, redémarrer Apache2 pour appliquer les changements.
sudo /etc/init.d/apache2 restart

Patcher la CSS principale

# Une fois le premier projet créé avec un sous projet par exemple, l'affichage du tableau est divisé sur 4 colonnes ce qui donne un vieux rendu non responsive à Redmine.
# Ajouter display: inline-flex; vers la ligne 598 dans le fichier application.css par défaut.
cd /opt/redmine/redmine-4.0-stable-prod-vdw/public/stylesheets
sudo nano application.css
#projects-index {
  column-count: auto;
  column-width: 400px;
  -webkit-column-count: auto;
  -webkit-column-width: 400px;
  -webkit-column-gap : 0.5rem;
  -moz-column-count: auto;
  -moz-column-width: 400px;
  -moz-column-gap : 0.5rem;
/* Ne pas diviser les blocs des projets pour un affichage plus agréable. */
display: inline-flex;
}

Droits sur le fichier de logs

Rails Error: Unable to access log file.
Please ensure that /opt/redmine/redmine-4.0-stable-prod-mdp/log/production.log exists and is writable (ie, make it writable for user and group: chmod 0664 /opt/redmine/redmine-4.0-stable-prod-mdp/log/production.log). The log level has been raised to WARN and the output directed to STDERR until the problem is fixed.
# Par défaut, le fichier de log est créé par Apache2.
# Donner la propriété du fichier de log à l'utilisateur et au groupe redmine lors des étapes de migration de la base de données notamment.
sudo su redmine
touch /opt/redmine/redmine-4.0-stable-prod-mdp/log/production.log
chmod 0664 /opt/redmine/redmine-4.0-stable-prod-mdp/log/production.log
chown redmine:redmine /opt/redmine/redmine-4.0-stable-prod-mdp/log/production.log
Si les logs ne sont pas écrites, redonner le fichier à www-data.
A suivre.
### A vérifier par la suite.
### L'erreur semble persister.
### Je passe le fichier en 666, sachant que sur les trois autres instances, il est en 775 et fonctionnel, mais, c'est peut être déjà trop élevé.
### chmod 0666 /opt/redmine/redmine-4.0-stable-prod-mdp/log/production.log

Ajouter un plugin

Installer un plugin sur Redmine.

Mise en réseau

Utiliser Redmine sur le réseau local

Remplacer la première ligne du VirtualHost : <VirtualHost *:80>
Ajouter l'adresse IP de la machine locale qui sert de serveur : <VirtualHost 192.168.10.20:80>

Notes de sécurité

Alerte sur les droits - WARNING: potential privilege escalation vulnerability detected

Starting Passenger watchdog...
Starting Passenger core...
Passenger core running in multi-application mode.
WARNING: potential privilege escalation vulnerability detected. Phusion Passenger is running as root, and part(s) of the Passenger root path (/opt/redmine/.rvm/gems/ruby-2.4.5@redmine-4.0-stable-prod-unis/gems/passenger-6.0.2) can be changed by non-root user(s):
- /opt/redmine/.rvm/gems/ruby-2.4.5@redmine-4.0-stable-prod-unis/gems/passenger-6.0.2 is not secure: it can be modified by user redmine
# /opt/redmine/.rvm/gems/ruby-2.4.5@redmine-4.0-stable-prod-unis/gems# sudo chown root:root passenger-6.0.2
- /opt/redmine/.rvm/gems/ruby-2.4.5@redmine-4.0-stable-prod-unis/gems is not secure: it can be modified by user redmine
# /opt/redmine/.rvm/gems/ruby-2.4.5@redmine-4.0-stable-prod-unis# sudo chown root:root gems/
- /opt/redmine/.rvm/gems/ruby-2.4.5@redmine-4.0-stable-prod-unis is not secure: it can be modified by user redmine
# /opt/redmine/.rvm/gems# sudo chown root:root ruby-2.4.5@redmine-4.0-stable-prod-unis
- /opt/redmine/.rvm/gems is not secure: it can be modified by user redmine
# /opt/redmine/.rvm# sudo chown root:root gems/
- /opt/redmine/.rvm is not secure: it can be modified by user redmine
# /opt/redmine# sudo chown root:root .rvm/
- /opt/redmine is not secure: it can be modified by user redmine
# /opt# sudo chown root:root redmine/
Please either fix up the permissions for the insecure paths, or install Passenger in a different location that can only be modified by root.

Retrouver un fichier de log spécifique sur le serveur suite à une erreur

# Pour le moment, je n'arrive pas à identifier la localisation du fichier de log suivant :
Could not spawn process for application /opt/redmine/unis: The application encountered the following error: SIGTERM (SignalException)
 Error ID: 638785d2
 Error details saved to: /tmp/passenger-error-bNMmcu.html
# Les logs de redmine depuis /var/log/apache2/
sudo nano /var/log/apache2/redmine.access.log (root:adm)
# Avec très peu d'erreurs, le fichier redmine.error.log ne sera pas renseigné très souvent.
sudo nano /var/log/apache2/redmine.error.log (root:adm)
# Les logs de redmine dans le fichier /log/production.log du projet doivent être en CHMOD 0664.
# La rotation des logs n'est pas prise en compte ici ce qui entraîne un fichier de logs bien trop lourd !
# -rwxrwxr-x www-data redmine 176122613 production.log
sudo nano /opt/redmine/canna/log/production.log
sudo nano /opt/redmine/mdp/log/production.log
sudo nano /opt/redmine/unis/log/production.log
sudo nano /opt/redmine/vdw/log/production.log
# Créer des fichiers de 5Mo
sudo split -C 5m production.log
# Lire puis supprimer tous les fichiers créés depuis 10 minutes :
sudo rm -f $(find * -mmin +5)
# Vider le fichier production.log
sudo echo /dev/null > production.log

Bibliographie

Ce tutoriel est partagé sur le wiki officiel de Debian

Ok.png Ce tutoriel Installer Redmine sur Debian avec RVM a été ajouté sur le wiki de Debian : https://wiki.debian.org/Redmine#Installer_RVM_pour_installer_et_utiliser_Redmine

Mise à jour de Redmine

Ok-ko.png Redmine Upgrade : http://www.redmine.org/projects/redmine/wiki/RedmineUpgrade

Instances multiples

# Ressources complémentaires :
Ko.png Deploying a Ruby application on Passenger + Apache : https://www.phusionpassenger.com/library/deploy/apache/deploy/ruby/#deploying-an-app-to-a-virtual-host-s-root
Ko.png How to boot multiple Rails apps on Apache2 with a shared Passenger gem : https://stackoverflow.com/questions/10422047/how-to-boot-multiple-rails-apps-on-apache2-with-a-shared-passenger-gem
Ko.png Multiple instance of redmine does not work with passenger  : https://bugs.launchpad.net/ubuntu/+source/redmine/+bug/624598
Ko.png Multiple instances of redmine on Debian squeeze : http://www.redmine.org/boards/1/topics/16647

NAVIGATION

PARTICIPER ET PARTAGER

Vous êtes sur le wiki de Vision du Web.
Les pages présentées sur le wiki évoluent tous les jours.
Certaines recherches sont peu abouties et incluent des erreurs.
Pour participer sur le wiki, créer un compte utilisateur en haut à droite.
La recherche interne du wiki permet de trouver le contenu qui vous intéresse.
Les informations présentes sur ce wiki sont issues d'une recherche personnelle.
Identifiez-vous pour poser vos questions sur la page de discussion de VisionDuWeb.
Améliorer le contenu des pages en faisant des propositions depuis l'onglet discussion.
Les informations du wiki ne doivent pas servir à nuire à autrui ou à un système informatique.
De nombreux outils gratuits sont listés et disponibles dans la boîte à outils de Vision du web.
D'autres pages du wiki peuvent correspondre à vos attentes. La liste de toutes les pages du wiki.

VALORISER LE WIKI

Valoriser le contenu partagé sur le wiki avec un don en monnaie numérique :
AEON - Bitcoins - Bitcoins Cash - Bitcoins Gold - Bitcore - Blackcoins - Basic Attention Token - Bytecoins - Clams - Dash - Monero - Dogecoins - Ğ1 - Ethereum - Ethereum Classique - Litecoins - Potcoins - Solarcoins - Zcash

OBTENIR DE LA MONNAIE NUMERIQUE

Obtenir gratuitement de la monnaie numérique :
Gagner des Altcoins - Miner des Altcoins.
Consulter le miroir du wiki depuis Planet Hoster : Le miroir du wiki version du 12 Juillet 2019.