[RUBY] Lancez plusieurs instances Redmine sur un serveur

Redmine est bondé

Redmine est pratique, nous mettons donc en place un serveur pour chaque projet en interne. Avant de le savoir, il y avait plus de 30 serveurs redmine. Bien sûr, nous ne configurons pas de serveur physique pour chaque Redmine, mais la plupart créent des serveurs virtuels sur la machine serveur physique de l'entreprise. Même ainsi, si vous démarrez autant de serveurs virtuels sur un serveur, il devient instable, de sorte que le serveur Redmine du projet terminé est désactivé. Vous pouvez penser que vous pouvez créer plusieurs projets dans Redmine sans rendre Redmine si encombré, mais comme vous ne pouvez pas définir les autorisations des utilisateurs de Redmine en détail et que vous ne pouvez pas grouper des projets, vous ne pouvez pas grouper chaque projet après tout. J'ai lancé Redmine. De plus, bien que Redmine soit constamment mis à jour, il existe des risques associés à la mise à niveau vers une Redmine en cours d'exécution. La raison (excuse) pour éviter les mises à niveau de version est que Redmine / ruby / rails / gem etc. dépendent fortement des versions.

Accueillons plusieurs Redmines sur un serveur

Nous n'avons pas hébergé plusieurs Redmines sur un seul serveur jusqu'à présent, en partie parce que la documentation officielle n'explique pas comment faire cela. Étonnamment, il existe peu de cas où plusieurs Redmines vivent ensemble. Cependant, je suis prêt à ce que Redmine et ruby soient bientôt stables, donc je vais exploiter plusieurs instances Redmine sur un serveur à l'avenir.

Installez d'abord Redmine

Installez Redmine conformément à la documentation officielle. Bien que le document officiel et l'ancienne description telle que la version soient inclus, le système d'exploitation de l'environnement d'installation est CentOS7, la version Redmine est 4.0, environnement Apache + Passenger, MariaDB5.5 (compatible MySQL).

http://redmine.jp/install/

J'ai également essayé l'installation par lots avec le package BitNami, mais comme Apache était une méthode de démarrage différente de la norme CentOS, je ne l'ai pas adoptée cette fois et l'ai installée manuellement.

Jusqu'à présent, nous procéderons à ** immédiatement après l'installation du nouveau Redmine avec Passanger **. La condition préalable pour les opérations suivantes est de se connecter avec les privilèges root et d'installer Redmine dans / var / lib / redmine.

Copiez le deuxième Redmine

Tout d'abord, arrêtez Apache au cas où.

# systemctl stop httpd.service

Enregistrez la Redmine actuellement installée en tant que modèle.

# mv /var/lib/redmine /var/lib/redmine.template

Copiez le premier Redmine et le second Redmine du modèle.

# cp -p -r /var/lib/redmine.template /var/lib/redmine1
# cp -p -r /var/lib/redmine.template /var/lib/redmine2

Créez un deuxième utilisateur et une base de données Redmine.

# mysql -u root -p 
Enter password: 
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 180
Server version: 5.5.64-MariaDB MariaDB Server

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> CREATE DATABASE redmine2 CHARACTER SET utf8;
Query OK, 1 row affected (0.00 sec)

MariaDB [(none)]> CREATE USER 'redmine2'@'localhost' IDENTIFIED BY 'password';
Query OK, 0 rows affected (0.01 sec)

MariaDB [(none)]> GRANT ALL PRIVILEGES ON redmine2.* TO 'redmine2'@'localhost';
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> quit;
Bye

Modifiez le fichier /var/lib/redmine2/config/database.yml pour qu'il corresponde aux paramètres de la deuxième base de données Redmine.

database.yml


production:
    adapter: mysql2
    database: redmine2
    host: localhost
    username: redmine2
    password: password
    encoding: utf8

Générez une nouvelle clé privée pour la protection de session pour le deuxième Redmine.

# cd /var/lib/redmine2
# bundle exec rake generate_secret_token

Migrez la deuxième base de données Redmine (? = Initialisation des données?). La dernière ligne de la troisième ligne ci-dessous semble être nécessaire si le plug-in est installé. (Je ne l'ai pas fait car je n'ai pas ajouté le plugin)

# cd /var/lib/redmine2
# bundle exec rake db:migrate RAILS_ENV=production
# bundle exec rake redmine:plugins:migrate RAILS_ENV=production

Un message en cours d'exécution sera lu, mais s'il n'y a pas de message d'erreur à la fin, il est terminé. Si vous obtenez une erreur, assurez-vous que vous pouvez accéder à la base de données que vous venez d'ajouter.

Test Redmine1 / Redmine2

Les deux Redmines devraient maintenant être installés indépendamment. Pour tester (mais vous n'êtes pas obligé), accédez à chaque répertoire Redmine et exécutez Redmine comme suit:

# cd /var/lib/redmine1
# bundle exec rails server webrick -e production

Vous pouvez vérifier le fonctionnement de Redmine en définissant "http: // * adresse IP *: 3000" sur le navigateur de votre PC. Lorsque vous y accédez, le journal de l'état des accès sera affiché sur l'écran du serveur du côté Redmine. Pour quitter, appuyez sur "CTRL + C" sur le côté Redmine pour arrêter.

De même, vérifiez le fonctionnement de la deuxième Redmine.

# cd /var/lib/redmine2
# bundle exec rails server webrick -e production 

Comme il s'agit du même Redmine qui est copié, ni Redmine1 ni Redmine2 ne peuvent réellement être déterminés. Une fois connecté, réécrivez le message de bienvenue pour faciliter son identification. Encore une fois, appuyez sur "CTRL + C" sur le côté Redmine pour arrêter.

J'ai testé et commuté entre les deux Redmines, mais comme ils utilisent le même port, ils ne peuvent pas être démarrés en même temps. Pour démarrer en même temps, vous pouvez commencer par changer le port, mais je vais essayer deux méthodes, la fonction d'hôte virtuel d'Apache et l'accès en changeant le sous-répertoire.

Veuillez sélectionner le cas 1 ou 2 ci-dessous.

Cas 1: définir plusieurs redmines avec la fonction d'hôte virtuel

Jusqu'à ce point, Redmine1 / Redmine2 indépendant peut être installé et exécuté séparément. Ici, avec la fonction d'hôte virtuel d'Apache,

のアクセスとなるよう設定します。もちろん、DNSサーバーの設定で、redmine1.hogehoge.com/redmine2.hogehoge.comとも同じサーバーを指すようにAレコードまたはCNAMEの設定が必要です。

Après avoir confirmé les paramètres DNS et la réflexion, modifiez le fichier de configuration Apache. Ajoutez les modifications suivantes à la fin de httpd.conf.

/etc/httpd/conf/httpd.conf


・
・
##Ajouts et modifications à partir d'ici

#Paramètres de racine de document par défaut du serveur
<VirtualHost *:80>
 ServerName 127.0.0.1
 DocumentRoot /var/www/html
</VirtualHost>

# Redmine1(redmine1.hogehoge.com)paramètres de

<Directory "/var/lib/redmine1/public">
  Require all granted
</Directory>

<VirtualHost *:80>
 ServerName redmine1.hogehoge.com
 DocumentRoot "/var/lib/redmine1/public"
 PassengerAppRoot /var/lib/redmine1
 RailsBaseURI /
</VirtualHost>

# Redmine2(redmine2.hogehoge.com)paramètres de

<Directory "/var/lib/redmine2/public">
  Require all granted
</Directory>

<VirtualHost *:80>
 ServerName redmine2.hogehoge.com
 DocumentRoot "/var/lib/redmine2/public"
 PassengerAppRoot /var/lib/redmine2
 RailsBaseURI /
</VirtualHost>

Comme il est supposé que Passennger a déjà été défini, il est nécessaire d'ajouter des autorisations de répertoire et des paramètres d'hôte virtuel pour chaque Redmine.

Démarrez Apache après avoir modifié les paramètres.

# systemctl start httpd.service

Si Apache démarre sans aucune erreur,

Veuillez confirmer que redmine1 / redmine2 peuvent être démarrés et utilisés respectivement.

Après avoir accédé à chaque Redmine, il devrait également apparaître dans le processus Passager pendant un certain temps, comme indiqué ci-dessous.


# ps ax | grep Passenger
19815 ?        Sl     0:03 Passenger AppPreloader: /var/lib/redmine1
19865 ?        Sl     0:01 Passenger AppPreloader: /var/lib/redmine1 (forking...)
19920 pts/0    S+     0:00 grep --color=auto Passenger
22015 ?        Ssl    0:00 Passenger watchdog
22018 ?        Sl     0:33 Passenger core
27829 ?        Sl     0:04 Passenger AppPreloader: /var/lib/redmine2
27877 ?        Sl     0:01 Passenger AppPreloader: /var/lib/redmine2 (forking...)
#

Depuis Passenger, vous pouvez voir que chacun des Redmine1 / Redmine2 est en cours d'exécution. S'il n'y a pas d'accès pendant un certain temps, le processus Passager correspondant disparaîtra également.

Avec cette procédure, vous pouvez lancer plusieurs Redmines avec différents noms d'hôte sur un serveur.

Cas 2: définir plusieurs redmines dans les sous-répertoires

Ce qui suit est le réglage de plusieurs Redmines dans le sous-répertoire.

Définir pour accéder. Vous pouvez utiliser l'adresse IP au lieu du nom d'hôte.

Modifiez le fichier de configuration Apache. Ajoutez les modifications suivantes à la fin de httpd.conf.

/etc/httpd/conf/httpd.conf


・
・
##Ajouts et modifications à partir d'ici

# Redmine1(/redmine1)paramètres de

<Directory "/var/lib/redmine1/public">
  Require all granted
</Directory>
Alias /redmine1 /var/lib/redmine1/public
<Location /redmine1>
  PassengerBaseURI /redmine1
  PassengerAppRoot /var/lib/redmine1
</Location>

# Redmine2(/redmine2)paramètres de

<Directory "/var/lib/redmine2/public">
  Require all granted
</Directory>
Alias /redmine2 /var/lib/redmine2/public
<Location /redmine2>
  PassengerBaseURI /redmine2
  PassengerAppRoot /var/lib/redmine2
</Location>

Démarrez Apache après avoir modifié les paramètres.

# systemctl start httpd.service

Si Apache démarre sans aucune erreur,

Veuillez confirmer que redmine1 / redmine2 peuvent être démarrés et utilisés respectivement.

Après avoir accédé à chaque Redmine, il devrait également apparaître dans le processus Passager pendant un certain temps, comme indiqué ci-dessous.

# ps ax | grep Passenger
30318 ?        Ssl    0:00 Passenger watchdog
30323 ?        Sl     0:00 Passenger core
30349 ?        Sl     0:03 Passenger AppPreloader: /var/lib/redmine1
30396 ?        Sl     0:00 Passenger AppPreloader: /var/lib/redmine1 (forking...)
30429 ?        Sl     0:03 Passenger AppPreloader: /var/lib/redmine2
30477 ?        Sl     0:00 Passenger AppPreloader: /var/lib/redmine2 (forking...)
30517 pts/0    R+     0:00 grep --color=auto Passenger
# 

Depuis Passenger, vous pouvez voir que chacun des Redmine1 / Redmine2 est en cours d'exécution. S'il n'y a pas d'accès pendant un certain temps, le processus Passager correspondant disparaîtra également.

Avec cette procédure, vous pouvez lancer plusieurs Redmines sur un serveur avec des noms de sous-répertoires différents.

Résumé

J'ai pu le régler plus facilement que prévu. Vous pouvez accéder à plusieurs Redmines avec un nom d'hôte ou un nom de sous-répertoire. Si vous l'appliquez, vous pouvez également le définir avec https. Je n'ai eu aucun problème après l'avoir utilisé pendant un certain temps, mais je ne suis pas sûr que ce soit tout à fait correct, alors prenez vos propres risques. Ne pensons pas aux futures mises à jour de Redminem (rires)

Recommended Posts

Lancez plusieurs instances Redmine sur un serveur
Redmine sur Docker
Lancez EC2 Rails
Remarques sur l'héritage multiple
Installez Redmine 4.1.1 sur CentOS 7