SlideShare a Scribd company logo
1 of 17
Download to read offline
2020/11/14 第19回redmine.tokyo 勉強会 複数Redmine環境におけるユーザ管理作業の効率化 @y503unavailable
1
複数Redmine環境における
ユーザ管理作業の効率化
2020/11/14
redmine.tokyo 第19回勉強会
@y503unavailable
2020/11/14 第19回redmine.tokyo 勉強会 複数Redmine環境におけるユーザ管理作業の効率化 @y503unavailable
2
自己紹介
• 名前:奈良 裕記 ( y503unavailable <- httpエラーコード503)
– 製造業で開発部署のadminしてます。
• RedmineTokyoスタッフ
unofficialcooking カスタマイズ情報サイト担当
– https://redmine.tokyo/projects/unofficialcooking
• Kindle本やYoutube動画も作成、unofficial-redmine.org
– https://www.slideshare.net/y503unavailable/unofficial-redmine-japan2020
• 6年前にRedmineサーバ統合を実施
(この時のDB構造知見が今回役に立った)
– https://www.slideshare.net/y503unavailable/redmine-42182169
2020/11/14 第19回redmine.tokyo 勉強会 複数Redmine環境におけるユーザ管理作業の効率化 @y503unavailable
3
お断りと連絡先
• 本LTの内容はPoC段階であり無保証です。(普段よりも)
• 実施時は自己責任でお願いします。
ご意見・ご提案などは
Redmine.Tokyoのunofficialcookingまでお願いします。
https://redmine.tokyo/issues/1188
画面デモなど希望あれば、ユーザディスカッションの#1か懇
親会で声掛けてください。
2020/11/14 第19回redmine.tokyo 勉強会 複数Redmine環境におけるユーザ管理作業の効率化 @y503unavailable
4
Redmineは1台で足りますか?
• 大規模運用で数百人/複数部署/複数用途で利用する場合、
1台のRedmine内に無理やり押し込んで運用するより、
複数のRedmineサーバに分割する方が運用し易い。
– 1台のRedmineの中でシステムレベル設定項目の使い分けは困
難。ユーザ間調整も面倒。
– Redmineの利用状況、利用者間の関係、admin間の関係、現場
差異、現場モチベーション
–無理に統合 << 分割+統合管理仕組
2020/11/14 第19回redmine.tokyo 勉強会 複数Redmine環境におけるユーザ管理作業の効率化 @y503unavailable
5
Redmineの設定項目分類
区分 設定者 内容
システム単位の設定 Redmine管理者 トラッカー、ロール、ワークフロー、ステータス、カ
スタムフィールド定義、用語定義、ユーザグループ定
義、その他システムレベル設定
Project単位の設定 PJ管理者 プロジェクト階層毎設定、バージョン、カテゴリ、メ
ンバー
ユーザ設定 各ユーザ 名前、パスワード、管理者権限、言語設定など
システム単位の設定項目は、Redmine管理者のみが設定できる。
つまり、サーバの統合により、Redmine管理者の権限が無くなると、従来
行えていたシステムレベルの管理作業が行えなくなる。
(本表の対象は設定項目のみ、チケット/変更記録/活動は除外した。)
2020/11/14 第19回redmine.tokyo 勉強会 複数Redmine環境におけるユーザ管理作業の効率化 @y503unavailable
6
複数Redmine運用時の課題と改善案
• 単に複数Redmineを運用するだけなら苦労しない。
• しかしRedmine間で内容を連携し活用、組織単位などで集計したい場合、
運用負荷がn倍になる。
• 課題例
– 人事異動対応/各サーバ毎実行必要(人事異動/新人/退職)
– 組織/ユーザ単位の利用状況集計作業が面倒
(ユーザID/組織グループがサーバ毎に異なるため、余計な変換作業が発生)
• 改善案
– サーバ間でユーザとグループの定義内容の同一性を確保する。
– 変更内容を自動反映する(名前、パスワード変更、無効化、所属変更)
– Redmine自体の機能で実現する必然性は無い。データはDB上だからDBの機能で実現すれば良い。
2020/11/14 第19回redmine.tokyo 勉強会 複数Redmine環境におけるユーザ管理作業の効率化 @y503unavailable
7
実現手法
下記手順により対応した(DBのテーブル単位複製)
1. Redmineをprimary/secondary(複数可)に分ける。
2. ユーザ/グループ定義の変更作業はprimaryのRedmineでのみ実施
(各個人またはシステム管理者の設定)
3. secondary側は、ユーザIDを追加不可の設定にする。
管理/設定/認証/ユーザーによるアカウント登録-無効
4. DBのテーブル単位複製機能を利用
– primary上のユーザ定義/グループ定義情報の変更のみを、secondaryに複製する。(DB設定)
– (usersと users-groupsテーブル)
– secondary側のreadonly指定は実施しない
primary
secondary
users,users-groupsのみ複製
2020/11/14 第19回redmine.tokyo 勉強会 複数Redmine環境におけるユーザ管理作業の効率化 @y503unavailable
8
一応動いた
・動作確認内容
ユーザ/グループ定義が正しく反映されることを確認した
1. primary側のユーザ名を変更、secondary側を再表示し反映済確認
2. secondary側ユーザ名を変更、primary側を再表示し反映無確認
3. primary側ユーザ名を再度変更、secondary側を再表示し反映済確認
4. primary側グループ登録内容を変更、 secondary側を再表示し反映済確認
• 試行環境
– CentOS7,MariaDB10,Redmine4.1-trunk(unofficial-redmine版)
– DB設定手順は本資料末尾の参考資料を参照
users,users-groupsのみ複製
primary
secondary
2020/11/14 第19回redmine.tokyo 勉強会 複数Redmine環境におけるユーザ管理作業の効率化 @y503unavailable
9
ご利益と落とし穴
• 本設定による利点
– Redmineのユーザ/グループ定義作業箇所を一か所に集約した。
(人事異動対応作業効率化)
– Redmineサーバ間のデータ分析、連携が容易になった。
• 問題点と対応
– 単にDBで設定内容を一元管理しただけなので、
問題点(+対策案)は勿論ある。 (次頁以降)
users,users-groupsのみ複製
2020/11/14 第19回redmine.tokyo 勉強会 複数Redmine環境におけるユーザ管理作業の効率化 @y503unavailable
10
問題点と対策1
primaryへのログイン時、secondaryの最終ログイ
ン日時が変更される。ユーザ使用状況把握困難
対策
・primary側のソースを変更し更新させない
– models/user.rb: def update_last_login_on!
パスワード/名前変更時には変更されてしまうが、
大規模環境ならAD利用で直接変更しないのでは?
原因 users.last_login_on (最終ログイン日時)も複製されるため
2020/11/14 第19回redmine.tokyo 勉強会 複数Redmine環境におけるユーザ管理作業の効率化 @y503unavailable
11
問題点と対策2
各secondaryのみのシステム管理者権限を設定できない
secondary管理者へのprimary管理者権限設定は不可
対策案(未検証)
• secondary内でDBのレプリケーショントリガーを利用し、
usersテーブル更新時に、特定IDにadminを強制設定する
• 定期的にsqlでupdateする。(頻繁な変更は無い筈)
システム管理者権限のフラグは、users.adminであり、
primaryの内容が当然複製される。
2020/11/14 第19回redmine.tokyo 勉強会 複数Redmine環境におけるユーザ管理作業の効率化 @y503unavailable
12
問題点と対策3
secondary側で、ユーザ情報・グループ定義情報の
変更/追加/削除操作が可能だが
primary側更新で,ユーザ情報上書/グループ定義破損する。
対策
 運用で対処(危険)
 secondary側のソース変更し更新操作させない
 Viewcustomizeでメニューから項目削除
 特定ユーザに対して一部管理者メニューを非表示にする
 https://github.com/onozaty/redmine-view-customize-scripts/blob/master/hide_part_of_admin_menu.js
原因 グループ定義は、グループ定義中ユーザ単位のレコードのため
2020/11/14 第19回redmine.tokyo 勉強会 複数Redmine環境におけるユーザ管理作業の効率化 @y503unavailable
13
問題点と対策4
他にも問題点あるかもしれない(未検証)
二要素認証のusers.twofa_totp_last_used_at など心配
各環境で検証お願いします。本LTはPoC段階の提案です。
原因 usersテーブル内に、定義情報とサー
バ内動的情報が同居している以上不可避
2020/11/14 第19回redmine.tokyo 勉強会 複数Redmine環境におけるユーザ管理作業の効率化 @y503unavailable
14
追加対応1
特定グループ定義の編集権限のみ移譲したい
– 一部のグループ定義が、頻繁に変更される。
(特定secondaryのみ利用)
– SEC&作業負荷面から、当該グループ定義の変更権限
のみをsecondary管理者に委譲したい。
対策
– 下記手法で外部の専用コマンドを作成する。
(特定グループIDのみ変更可能にする)
– 【Redmine】Python で Redmine CLI ツールを作ってみる!
https://mlog.wlaboratory.com/entry/category/tools/redmine/python-redmine-cli
2020/11/14 第19回redmine.tokyo 勉強会 複数Redmine環境におけるユーザ管理作業の効率化 @y503unavailable
15
追加対応2
ユーザ・グループ定義以外の、
他のシステムレベル定義項目も共通化したい
参考資料(DB設計)
• RedmineのDB設計参考資料(サーバ統合事例)https://www.slideshare.net/y503unavailable/redmine-42182169
• Redmineデータベースのテーブル構造を紐解いてみるhttps://docs.google.com/presentation/d/e/2PACX-
1vSGC3DEnLZqAEs4zRmkCsrEz4m3Uj0qo0fiMHi2JexyVYUdV6wjoUftoIhhVTc1C-
r_6lJDDOBuafvu/pub?start=false&loop=false&delayms=3000&slide=id.p
対策
システムレベル項目の各テーブルも、テーブル単位で複製すれば良い。
(トラッカー,ステータス,ロール,ワークフロー,カスタムフィールド)
trackers, issue_statuses , roles,roles_managed_roles, workflows,
custom_fields,custom_fields_roles,custom_fields_trackers,
2020/11/14 第19回redmine.tokyo 勉強会 複数Redmine環境におけるユーザ管理作業の効率化 @y503unavailable
16
参考文献(DB複製関連)
具体的なDB設定手順は、下記など参照してください。
• [MySQL][MariaDB] DBのレプリケーション構築手順
– https://qiita.com/suzutsuki0220/items/e5be03ea8f44ad2f6533
• Replication Filters
– https://mariadb.com/kb/en/replication-filters/
• スレーブのレプリケーションフィルターについて
– https://gihyo.jp/dev/serial/01/mysql-road-construction-news/0088
• mariadbのスレーブトリガーを試してみる。(slave_run_triggers)
– https://qiita.com/sand_bash/items/b6169757e7d32df88467
• postgresql-10以降でテーブル単位の複製が可能(ロジカルレプリケーション)
– https://oss-db.jp/dojo/dojo_column_01
• 論理レプリケーション
– https://www.postgresql.jp/document/11/html/logical-replication.html
今回の/etc/my.cnf 追加内容(参考)
複製元Redmine
[mysqld]
log-bin
server-id=1
expire_logs_days=5
replicate-do-table=redmine.user
replicate-do-table=redmine.groups_users
複製先Redmine
[mysqld]
server-id=2
replicate-do-table=redmine.users
replicate-do-table=redmine.groups_users
接続状況確認
show slave status;
show master status;
2020/11/14 第19回redmine.tokyo 勉強会 複数Redmine環境におけるユーザ管理作業の効率化 @y503unavailable
17
御清聴ありがとうございました
• 各自のRedmine運用に、多少なりとも役に立て
ば幸いです。
• Redmineはオープンソースソフトです。
–協力して育成&利用していきましょう。
ユーザ会はそのための場所です。
• ご意見、内容指摘の連絡先
redmine.Tokyo UnofficialCooking
unofficial-redmine.org
y503unavailable@ twitter, slack

More Related Content

What's hot

Redmine4時代のプラグイン開発 redmine.tokyo #13
Redmine4時代のプラグイン開発 redmine.tokyo #13Redmine4時代のプラグイン開発 redmine.tokyo #13
Redmine4時代のプラグイン開発 redmine.tokyo #13Sho Douhashi
 
ある工場の Redmine 2021 ( Redmine of one plant 2021 )
ある工場の Redmine 2021 ( Redmine of one plant 2021 )ある工場の Redmine 2021 ( Redmine of one plant 2021 )
ある工場の Redmine 2021 ( Redmine of one plant 2021 )Kohei Nakamura
 
Unofficial Redmine Cookingの紹介
Unofficial Redmine Cookingの紹介Unofficial Redmine Cookingの紹介
Unofficial Redmine Cookingの紹介Yuuki Nara
 
講演1 redmineの簡易crmとしての活用事例r2
講演1 redmineの簡易crmとしての活用事例r2講演1 redmineの簡易crmとしての活用事例r2
講演1 redmineの簡易crmとしての活用事例r2Hidehisa Matsutani
 
RedMica 2.0 (2021-11) 新機能ハイライト
RedMica 2.0 (2021-11) 新機能ハイライトRedMica 2.0 (2021-11) 新機能ハイライト
RedMica 2.0 (2021-11) 新機能ハイライトGo Maeda
 
はじめる! Redmine (2021年版)
はじめる! Redmine (2021年版) はじめる! Redmine (2021年版)
はじめる! Redmine (2021年版) Go Maeda
 
UnofficialCookingの紹介とRedmine本家への貢献
UnofficialCookingの紹介とRedmine本家への貢献UnofficialCookingの紹介とRedmine本家への貢献
UnofficialCookingの紹介とRedmine本家への貢献Yuuki Nara
 
US進出でのAndroid開発inメルカリ Mercari US App Development
US進出でのAndroid開発inメルカリ Mercari US App Development US進出でのAndroid開発inメルカリ Mercari US App Development
US進出でのAndroid開発inメルカリ Mercari US App Development Tomoaki Imai
 
ある工場と Redmine 2020
ある工場と Redmine 2020ある工場と Redmine 2020
ある工場と Redmine 2020Kohei Nakamura
 
Redmineをちょっと便利に! プログラミング無しで使ってみるREST API
Redmineをちょっと便利に! プログラミング無しで使ってみるREST APIRedmineをちょっと便利に! プログラミング無しで使ってみるREST API
Redmineをちょっと便利に! プログラミング無しで使ってみるREST APIGo Maeda
 
Redmine 4.1 / RedMica 1.0ユーザーのための RedMica 1.1 (2020-05)・ 1.2 (2020-11) 新機能ガイド
Redmine 4.1 / RedMica 1.0ユーザーのための RedMica  1.1 (2020-05)・ 1.2 (2020-11) 新機能ガイドRedmine 4.1 / RedMica 1.0ユーザーのための RedMica  1.1 (2020-05)・ 1.2 (2020-11) 新機能ガイド
Redmine 4.1 / RedMica 1.0ユーザーのための RedMica 1.1 (2020-05)・ 1.2 (2020-11) 新機能ガイドGo Maeda
 
Redmine.tokyo21 questionnaire
Redmine.tokyo21 questionnaireRedmine.tokyo21 questionnaire
Redmine.tokyo21 questionnaireJun Naitoh
 
Redmine issue assign notice plugin の紹介
Redmine issue assign notice plugin の紹介Redmine issue assign notice plugin の紹介
Redmine issue assign notice plugin の紹介onozaty
 
挫折しないRedmine (2022)
 挫折しないRedmine  (2022) 挫折しないRedmine  (2022)
挫折しないRedmine (2022)Go Maeda
 
社内LT資料 Backlogのご紹介
社内LT資料 Backlogのご紹介社内LT資料 Backlogのご紹介
社内LT資料 Backlogのご紹介皓登 水上
 
Redmineのスマホアプリ RedminePM
Redmineのスマホアプリ RedminePMRedmineのスマホアプリ RedminePM
Redmineのスマホアプリ RedminePMproject mode, Inc.
 

What's hot (16)

Redmine4時代のプラグイン開発 redmine.tokyo #13
Redmine4時代のプラグイン開発 redmine.tokyo #13Redmine4時代のプラグイン開発 redmine.tokyo #13
Redmine4時代のプラグイン開発 redmine.tokyo #13
 
ある工場の Redmine 2021 ( Redmine of one plant 2021 )
ある工場の Redmine 2021 ( Redmine of one plant 2021 )ある工場の Redmine 2021 ( Redmine of one plant 2021 )
ある工場の Redmine 2021 ( Redmine of one plant 2021 )
 
Unofficial Redmine Cookingの紹介
Unofficial Redmine Cookingの紹介Unofficial Redmine Cookingの紹介
Unofficial Redmine Cookingの紹介
 
講演1 redmineの簡易crmとしての活用事例r2
講演1 redmineの簡易crmとしての活用事例r2講演1 redmineの簡易crmとしての活用事例r2
講演1 redmineの簡易crmとしての活用事例r2
 
RedMica 2.0 (2021-11) 新機能ハイライト
RedMica 2.0 (2021-11) 新機能ハイライトRedMica 2.0 (2021-11) 新機能ハイライト
RedMica 2.0 (2021-11) 新機能ハイライト
 
はじめる! Redmine (2021年版)
はじめる! Redmine (2021年版) はじめる! Redmine (2021年版)
はじめる! Redmine (2021年版)
 
UnofficialCookingの紹介とRedmine本家への貢献
UnofficialCookingの紹介とRedmine本家への貢献UnofficialCookingの紹介とRedmine本家への貢献
UnofficialCookingの紹介とRedmine本家への貢献
 
US進出でのAndroid開発inメルカリ Mercari US App Development
US進出でのAndroid開発inメルカリ Mercari US App Development US進出でのAndroid開発inメルカリ Mercari US App Development
US進出でのAndroid開発inメルカリ Mercari US App Development
 
ある工場と Redmine 2020
ある工場と Redmine 2020ある工場と Redmine 2020
ある工場と Redmine 2020
 
Redmineをちょっと便利に! プログラミング無しで使ってみるREST API
Redmineをちょっと便利に! プログラミング無しで使ってみるREST APIRedmineをちょっと便利に! プログラミング無しで使ってみるREST API
Redmineをちょっと便利に! プログラミング無しで使ってみるREST API
 
Redmine 4.1 / RedMica 1.0ユーザーのための RedMica 1.1 (2020-05)・ 1.2 (2020-11) 新機能ガイド
Redmine 4.1 / RedMica 1.0ユーザーのための RedMica  1.1 (2020-05)・ 1.2 (2020-11) 新機能ガイドRedmine 4.1 / RedMica 1.0ユーザーのための RedMica  1.1 (2020-05)・ 1.2 (2020-11) 新機能ガイド
Redmine 4.1 / RedMica 1.0ユーザーのための RedMica 1.1 (2020-05)・ 1.2 (2020-11) 新機能ガイド
 
Redmine.tokyo21 questionnaire
Redmine.tokyo21 questionnaireRedmine.tokyo21 questionnaire
Redmine.tokyo21 questionnaire
 
Redmine issue assign notice plugin の紹介
Redmine issue assign notice plugin の紹介Redmine issue assign notice plugin の紹介
Redmine issue assign notice plugin の紹介
 
挫折しないRedmine (2022)
 挫折しないRedmine  (2022) 挫折しないRedmine  (2022)
挫折しないRedmine (2022)
 
社内LT資料 Backlogのご紹介
社内LT資料 Backlogのご紹介社内LT資料 Backlogのご紹介
社内LT資料 Backlogのご紹介
 
Redmineのスマホアプリ RedminePM
Redmineのスマホアプリ RedminePMRedmineのスマホアプリ RedminePM
Redmineのスマホアプリ RedminePM
 

Similar to 複数Redmine環境におけるユーザ管理の効率化

View Customize Pluginで出来ること
View Customize Pluginで出来ることView Customize Pluginで出来ること
View Customize Pluginで出来ることonozaty
 
「dominoワークフローはここまで進化した!v12クラウドネイティブがもたらす新たなアプリ運用」ケートリックウェビナー2021.06.25
「dominoワークフローはここまで進化した!v12クラウドネイティブがもたらす新たなアプリ運用」ケートリックウェビナー2021.06.25「dominoワークフローはここまで進化した!v12クラウドネイティブがもたらす新たなアプリ運用」ケートリックウェビナー2021.06.25
「dominoワークフローはここまで進化した!v12クラウドネイティブがもたらす新たなアプリ運用」ケートリックウェビナー2021.06.25Kazunori Tatsuki
 
Kids, Ruby, Fun! ぼくたち、 Rubyプログラミング少年団! 〜小学生からはじめる Ruby プログラミング〜
Kids,Ruby,Fun! ぼくたち、 Rubyプログラミング少年団! 〜小学生からはじめる Ruby プログラミング〜Kids,Ruby,Fun! ぼくたち、 Rubyプログラミング少年団! 〜小学生からはじめる Ruby プログラミング〜
Kids, Ruby, Fun! ぼくたち、 Rubyプログラミング少年団! 〜小学生からはじめる Ruby プログラミング〜宏治 高尾
 
Redmineをプラグインで拡張しよう
Redmineをプラグインで拡張しようRedmineをプラグインで拡張しよう
Redmineをプラグインで拡張しようHaruyuki Iida
 
【19-B-5】出張!DDD難民救済キャンプ
【19-B-5】出張!DDD難民救済キャンプ【19-B-5】出張!DDD難民救済キャンプ
【19-B-5】出張!DDD難民救済キャンプkentaro watanabe
 
Line Creators Studio Android With Kotlin
Line Creators Studio Android With KotlinLine Creators Studio Android With Kotlin
Line Creators Studio Android With KotlinLINE Corporation
 
Unofficial Redmine Cooking 闇鍋_デモ環境への発展
Unofficial Redmine Cooking 闇鍋_デモ環境への発展Unofficial Redmine Cooking 闇鍋_デモ環境への発展
Unofficial Redmine Cooking 闇鍋_デモ環境への発展Yuuki Nara
 
Building Static Website With Github And Jekyll
Building Static Website With Github And JekyllBuilding Static Website With Github And Jekyll
Building Static Website With Github And JekyllYoji Shidara
 
RedMica 2.2 (2022-11) 新機能ハイライト
RedMica 2.2 (2022-11) 新機能ハイライトRedMica 2.2 (2022-11) 新機能ハイライト
RedMica 2.2 (2022-11) 新機能ハイライトGo Maeda
 
Efsta cod2012 master_for_slideshare
Efsta cod2012 master_for_slideshareEfsta cod2012 master_for_slideshare
Efsta cod2012 master_for_slideshareTakahito Sugishita
 
Metroアプリケーションのwin8/wp7の効率的ソース運用を考える
Metroアプリケーションのwin8/wp7の効率的ソース運用を考えるMetroアプリケーションのwin8/wp7の効率的ソース運用を考える
Metroアプリケーションのwin8/wp7の効率的ソース運用を考えるTakahito Sugishita
 
Embedded Webで加速するWeb of Things
Embedded Webで加速するWeb of ThingsEmbedded Webで加速するWeb of Things
Embedded Webで加速するWeb of ThingsFutomi Hatano
 
Webアプリ開発のトレンドとUIライブラリ開発事情(仙台Geek★Night #1)
Webアプリ開発のトレンドとUIライブラリ開発事情(仙台Geek★Night #1)Webアプリ開発のトレンドとUIライブラリ開発事情(仙台Geek★Night #1)
Webアプリ開発のトレンドとUIライブラリ開発事情(仙台Geek★Night #1)masakazusegawa
 
私が作成したVoltアプリの紹介
私が作成したVoltアプリの紹介私が作成したVoltアプリの紹介
私が作成したVoltアプリの紹介Masahiko Miyo
 
Japan Container Day 2018
Japan Container Day 2018Japan Container Day 2018
Japan Container Day 2018Yoshio Terada
 
【Redmine 4.2 を先取り】RedMica 1.1 (2020-05) 新機能ハイライト
【Redmine 4.2 を先取り】RedMica  1.1 (2020-05) 新機能ハイライト【Redmine 4.2 を先取り】RedMica  1.1 (2020-05) 新機能ハイライト
【Redmine 4.2 を先取り】RedMica 1.1 (2020-05) 新機能ハイライトGo Maeda
 
Cocos2d-x公開講座 in 鹿児島
Cocos2d-x公開講座 in 鹿児島Cocos2d-x公開講座 in 鹿児島
Cocos2d-x公開講座 in 鹿児島Tomoaki Shimizu
 
jus研究会名古屋大会「Redmineでプロジェクトを【見える化】しよう!」
jus研究会名古屋大会「Redmineでプロジェクトを【見える化】しよう!」jus研究会名古屋大会「Redmineでプロジェクトを【見える化】しよう!」
jus研究会名古屋大会「Redmineでプロジェクトを【見える化】しよう!」Taku Yajima
 

Similar to 複数Redmine環境におけるユーザ管理の効率化 (20)

View Customize Pluginで出来ること
View Customize Pluginで出来ることView Customize Pluginで出来ること
View Customize Pluginで出来ること
 
「dominoワークフローはここまで進化した!v12クラウドネイティブがもたらす新たなアプリ運用」ケートリックウェビナー2021.06.25
「dominoワークフローはここまで進化した!v12クラウドネイティブがもたらす新たなアプリ運用」ケートリックウェビナー2021.06.25「dominoワークフローはここまで進化した!v12クラウドネイティブがもたらす新たなアプリ運用」ケートリックウェビナー2021.06.25
「dominoワークフローはここまで進化した!v12クラウドネイティブがもたらす新たなアプリ運用」ケートリックウェビナー2021.06.25
 
Kids, Ruby, Fun! ぼくたち、 Rubyプログラミング少年団! 〜小学生からはじめる Ruby プログラミング〜
Kids,Ruby,Fun! ぼくたち、 Rubyプログラミング少年団! 〜小学生からはじめる Ruby プログラミング〜Kids,Ruby,Fun! ぼくたち、 Rubyプログラミング少年団! 〜小学生からはじめる Ruby プログラミング〜
Kids, Ruby, Fun! ぼくたち、 Rubyプログラミング少年団! 〜小学生からはじめる Ruby プログラミング〜
 
Redmineをプラグインで拡張しよう
Redmineをプラグインで拡張しようRedmineをプラグインで拡張しよう
Redmineをプラグインで拡張しよう
 
UE4.25新機能とTwinmotion 2020の紹介(オンライン【Unreal Engine Meetup Fukuoka】 2020/4/25)
UE4.25新機能とTwinmotion 2020の紹介(オンライン【Unreal Engine Meetup Fukuoka】 2020/4/25)UE4.25新機能とTwinmotion 2020の紹介(オンライン【Unreal Engine Meetup Fukuoka】 2020/4/25)
UE4.25新機能とTwinmotion 2020の紹介(オンライン【Unreal Engine Meetup Fukuoka】 2020/4/25)
 
【19-B-5】出張!DDD難民救済キャンプ
【19-B-5】出張!DDD難民救済キャンプ【19-B-5】出張!DDD難民救済キャンプ
【19-B-5】出張!DDD難民救済キャンプ
 
Line Creators Studio Android With Kotlin
Line Creators Studio Android With KotlinLine Creators Studio Android With Kotlin
Line Creators Studio Android With Kotlin
 
Unofficial Redmine Cooking 闇鍋_デモ環境への発展
Unofficial Redmine Cooking 闇鍋_デモ環境への発展Unofficial Redmine Cooking 闇鍋_デモ環境への発展
Unofficial Redmine Cooking 闇鍋_デモ環境への発展
 
Rxt study lt_jp#2
Rxt study lt_jp#2Rxt study lt_jp#2
Rxt study lt_jp#2
 
Building Static Website With Github And Jekyll
Building Static Website With Github And JekyllBuilding Static Website With Github And Jekyll
Building Static Website With Github And Jekyll
 
RedMica 2.2 (2022-11) 新機能ハイライト
RedMica 2.2 (2022-11) 新機能ハイライトRedMica 2.2 (2022-11) 新機能ハイライト
RedMica 2.2 (2022-11) 新機能ハイライト
 
Efsta cod2012 master_for_slideshare
Efsta cod2012 master_for_slideshareEfsta cod2012 master_for_slideshare
Efsta cod2012 master_for_slideshare
 
Metroアプリケーションのwin8/wp7の効率的ソース運用を考える
Metroアプリケーションのwin8/wp7の効率的ソース運用を考えるMetroアプリケーションのwin8/wp7の効率的ソース運用を考える
Metroアプリケーションのwin8/wp7の効率的ソース運用を考える
 
Embedded Webで加速するWeb of Things
Embedded Webで加速するWeb of ThingsEmbedded Webで加速するWeb of Things
Embedded Webで加速するWeb of Things
 
Webアプリ開発のトレンドとUIライブラリ開発事情(仙台Geek★Night #1)
Webアプリ開発のトレンドとUIライブラリ開発事情(仙台Geek★Night #1)Webアプリ開発のトレンドとUIライブラリ開発事情(仙台Geek★Night #1)
Webアプリ開発のトレンドとUIライブラリ開発事情(仙台Geek★Night #1)
 
私が作成したVoltアプリの紹介
私が作成したVoltアプリの紹介私が作成したVoltアプリの紹介
私が作成したVoltアプリの紹介
 
Japan Container Day 2018
Japan Container Day 2018Japan Container Day 2018
Japan Container Day 2018
 
【Redmine 4.2 を先取り】RedMica 1.1 (2020-05) 新機能ハイライト
【Redmine 4.2 を先取り】RedMica  1.1 (2020-05) 新機能ハイライト【Redmine 4.2 を先取り】RedMica  1.1 (2020-05) 新機能ハイライト
【Redmine 4.2 を先取り】RedMica 1.1 (2020-05) 新機能ハイライト
 
Cocos2d-x公開講座 in 鹿児島
Cocos2d-x公開講座 in 鹿児島Cocos2d-x公開講座 in 鹿児島
Cocos2d-x公開講座 in 鹿児島
 
jus研究会名古屋大会「Redmineでプロジェクトを【見える化】しよう!」
jus研究会名古屋大会「Redmineでプロジェクトを【見える化】しよう!」jus研究会名古屋大会「Redmineでプロジェクトを【見える化】しよう!」
jus研究会名古屋大会「Redmineでプロジェクトを【見える化】しよう!」
 

複数Redmine環境におけるユーザ管理の効率化

  • 1. 2020/11/14 第19回redmine.tokyo 勉強会 複数Redmine環境におけるユーザ管理作業の効率化 @y503unavailable 1 複数Redmine環境における ユーザ管理作業の効率化 2020/11/14 redmine.tokyo 第19回勉強会 @y503unavailable
  • 2. 2020/11/14 第19回redmine.tokyo 勉強会 複数Redmine環境におけるユーザ管理作業の効率化 @y503unavailable 2 自己紹介 • 名前:奈良 裕記 ( y503unavailable <- httpエラーコード503) – 製造業で開発部署のadminしてます。 • RedmineTokyoスタッフ unofficialcooking カスタマイズ情報サイト担当 – https://redmine.tokyo/projects/unofficialcooking • Kindle本やYoutube動画も作成、unofficial-redmine.org – https://www.slideshare.net/y503unavailable/unofficial-redmine-japan2020 • 6年前にRedmineサーバ統合を実施 (この時のDB構造知見が今回役に立った) – https://www.slideshare.net/y503unavailable/redmine-42182169
  • 3. 2020/11/14 第19回redmine.tokyo 勉強会 複数Redmine環境におけるユーザ管理作業の効率化 @y503unavailable 3 お断りと連絡先 • 本LTの内容はPoC段階であり無保証です。(普段よりも) • 実施時は自己責任でお願いします。 ご意見・ご提案などは Redmine.Tokyoのunofficialcookingまでお願いします。 https://redmine.tokyo/issues/1188 画面デモなど希望あれば、ユーザディスカッションの#1か懇 親会で声掛けてください。
  • 4. 2020/11/14 第19回redmine.tokyo 勉強会 複数Redmine環境におけるユーザ管理作業の効率化 @y503unavailable 4 Redmineは1台で足りますか? • 大規模運用で数百人/複数部署/複数用途で利用する場合、 1台のRedmine内に無理やり押し込んで運用するより、 複数のRedmineサーバに分割する方が運用し易い。 – 1台のRedmineの中でシステムレベル設定項目の使い分けは困 難。ユーザ間調整も面倒。 – Redmineの利用状況、利用者間の関係、admin間の関係、現場 差異、現場モチベーション –無理に統合 << 分割+統合管理仕組
  • 5. 2020/11/14 第19回redmine.tokyo 勉強会 複数Redmine環境におけるユーザ管理作業の効率化 @y503unavailable 5 Redmineの設定項目分類 区分 設定者 内容 システム単位の設定 Redmine管理者 トラッカー、ロール、ワークフロー、ステータス、カ スタムフィールド定義、用語定義、ユーザグループ定 義、その他システムレベル設定 Project単位の設定 PJ管理者 プロジェクト階層毎設定、バージョン、カテゴリ、メ ンバー ユーザ設定 各ユーザ 名前、パスワード、管理者権限、言語設定など システム単位の設定項目は、Redmine管理者のみが設定できる。 つまり、サーバの統合により、Redmine管理者の権限が無くなると、従来 行えていたシステムレベルの管理作業が行えなくなる。 (本表の対象は設定項目のみ、チケット/変更記録/活動は除外した。)
  • 6. 2020/11/14 第19回redmine.tokyo 勉強会 複数Redmine環境におけるユーザ管理作業の効率化 @y503unavailable 6 複数Redmine運用時の課題と改善案 • 単に複数Redmineを運用するだけなら苦労しない。 • しかしRedmine間で内容を連携し活用、組織単位などで集計したい場合、 運用負荷がn倍になる。 • 課題例 – 人事異動対応/各サーバ毎実行必要(人事異動/新人/退職) – 組織/ユーザ単位の利用状況集計作業が面倒 (ユーザID/組織グループがサーバ毎に異なるため、余計な変換作業が発生) • 改善案 – サーバ間でユーザとグループの定義内容の同一性を確保する。 – 変更内容を自動反映する(名前、パスワード変更、無効化、所属変更) – Redmine自体の機能で実現する必然性は無い。データはDB上だからDBの機能で実現すれば良い。
  • 7. 2020/11/14 第19回redmine.tokyo 勉強会 複数Redmine環境におけるユーザ管理作業の効率化 @y503unavailable 7 実現手法 下記手順により対応した(DBのテーブル単位複製) 1. Redmineをprimary/secondary(複数可)に分ける。 2. ユーザ/グループ定義の変更作業はprimaryのRedmineでのみ実施 (各個人またはシステム管理者の設定) 3. secondary側は、ユーザIDを追加不可の設定にする。 管理/設定/認証/ユーザーによるアカウント登録-無効 4. DBのテーブル単位複製機能を利用 – primary上のユーザ定義/グループ定義情報の変更のみを、secondaryに複製する。(DB設定) – (usersと users-groupsテーブル) – secondary側のreadonly指定は実施しない primary secondary users,users-groupsのみ複製
  • 8. 2020/11/14 第19回redmine.tokyo 勉強会 複数Redmine環境におけるユーザ管理作業の効率化 @y503unavailable 8 一応動いた ・動作確認内容 ユーザ/グループ定義が正しく反映されることを確認した 1. primary側のユーザ名を変更、secondary側を再表示し反映済確認 2. secondary側ユーザ名を変更、primary側を再表示し反映無確認 3. primary側ユーザ名を再度変更、secondary側を再表示し反映済確認 4. primary側グループ登録内容を変更、 secondary側を再表示し反映済確認 • 試行環境 – CentOS7,MariaDB10,Redmine4.1-trunk(unofficial-redmine版) – DB設定手順は本資料末尾の参考資料を参照 users,users-groupsのみ複製 primary secondary
  • 9. 2020/11/14 第19回redmine.tokyo 勉強会 複数Redmine環境におけるユーザ管理作業の効率化 @y503unavailable 9 ご利益と落とし穴 • 本設定による利点 – Redmineのユーザ/グループ定義作業箇所を一か所に集約した。 (人事異動対応作業効率化) – Redmineサーバ間のデータ分析、連携が容易になった。 • 問題点と対応 – 単にDBで設定内容を一元管理しただけなので、 問題点(+対策案)は勿論ある。 (次頁以降) users,users-groupsのみ複製
  • 10. 2020/11/14 第19回redmine.tokyo 勉強会 複数Redmine環境におけるユーザ管理作業の効率化 @y503unavailable 10 問題点と対策1 primaryへのログイン時、secondaryの最終ログイ ン日時が変更される。ユーザ使用状況把握困難 対策 ・primary側のソースを変更し更新させない – models/user.rb: def update_last_login_on! パスワード/名前変更時には変更されてしまうが、 大規模環境ならAD利用で直接変更しないのでは? 原因 users.last_login_on (最終ログイン日時)も複製されるため
  • 11. 2020/11/14 第19回redmine.tokyo 勉強会 複数Redmine環境におけるユーザ管理作業の効率化 @y503unavailable 11 問題点と対策2 各secondaryのみのシステム管理者権限を設定できない secondary管理者へのprimary管理者権限設定は不可 対策案(未検証) • secondary内でDBのレプリケーショントリガーを利用し、 usersテーブル更新時に、特定IDにadminを強制設定する • 定期的にsqlでupdateする。(頻繁な変更は無い筈) システム管理者権限のフラグは、users.adminであり、 primaryの内容が当然複製される。
  • 12. 2020/11/14 第19回redmine.tokyo 勉強会 複数Redmine環境におけるユーザ管理作業の効率化 @y503unavailable 12 問題点と対策3 secondary側で、ユーザ情報・グループ定義情報の 変更/追加/削除操作が可能だが primary側更新で,ユーザ情報上書/グループ定義破損する。 対策  運用で対処(危険)  secondary側のソース変更し更新操作させない  Viewcustomizeでメニューから項目削除  特定ユーザに対して一部管理者メニューを非表示にする  https://github.com/onozaty/redmine-view-customize-scripts/blob/master/hide_part_of_admin_menu.js 原因 グループ定義は、グループ定義中ユーザ単位のレコードのため
  • 13. 2020/11/14 第19回redmine.tokyo 勉強会 複数Redmine環境におけるユーザ管理作業の効率化 @y503unavailable 13 問題点と対策4 他にも問題点あるかもしれない(未検証) 二要素認証のusers.twofa_totp_last_used_at など心配 各環境で検証お願いします。本LTはPoC段階の提案です。 原因 usersテーブル内に、定義情報とサー バ内動的情報が同居している以上不可避
  • 14. 2020/11/14 第19回redmine.tokyo 勉強会 複数Redmine環境におけるユーザ管理作業の効率化 @y503unavailable 14 追加対応1 特定グループ定義の編集権限のみ移譲したい – 一部のグループ定義が、頻繁に変更される。 (特定secondaryのみ利用) – SEC&作業負荷面から、当該グループ定義の変更権限 のみをsecondary管理者に委譲したい。 対策 – 下記手法で外部の専用コマンドを作成する。 (特定グループIDのみ変更可能にする) – 【Redmine】Python で Redmine CLI ツールを作ってみる! https://mlog.wlaboratory.com/entry/category/tools/redmine/python-redmine-cli
  • 15. 2020/11/14 第19回redmine.tokyo 勉強会 複数Redmine環境におけるユーザ管理作業の効率化 @y503unavailable 15 追加対応2 ユーザ・グループ定義以外の、 他のシステムレベル定義項目も共通化したい 参考資料(DB設計) • RedmineのDB設計参考資料(サーバ統合事例)https://www.slideshare.net/y503unavailable/redmine-42182169 • Redmineデータベースのテーブル構造を紐解いてみるhttps://docs.google.com/presentation/d/e/2PACX- 1vSGC3DEnLZqAEs4zRmkCsrEz4m3Uj0qo0fiMHi2JexyVYUdV6wjoUftoIhhVTc1C- r_6lJDDOBuafvu/pub?start=false&loop=false&delayms=3000&slide=id.p 対策 システムレベル項目の各テーブルも、テーブル単位で複製すれば良い。 (トラッカー,ステータス,ロール,ワークフロー,カスタムフィールド) trackers, issue_statuses , roles,roles_managed_roles, workflows, custom_fields,custom_fields_roles,custom_fields_trackers,
  • 16. 2020/11/14 第19回redmine.tokyo 勉強会 複数Redmine環境におけるユーザ管理作業の効率化 @y503unavailable 16 参考文献(DB複製関連) 具体的なDB設定手順は、下記など参照してください。 • [MySQL][MariaDB] DBのレプリケーション構築手順 – https://qiita.com/suzutsuki0220/items/e5be03ea8f44ad2f6533 • Replication Filters – https://mariadb.com/kb/en/replication-filters/ • スレーブのレプリケーションフィルターについて – https://gihyo.jp/dev/serial/01/mysql-road-construction-news/0088 • mariadbのスレーブトリガーを試してみる。(slave_run_triggers) – https://qiita.com/sand_bash/items/b6169757e7d32df88467 • postgresql-10以降でテーブル単位の複製が可能(ロジカルレプリケーション) – https://oss-db.jp/dojo/dojo_column_01 • 論理レプリケーション – https://www.postgresql.jp/document/11/html/logical-replication.html 今回の/etc/my.cnf 追加内容(参考) 複製元Redmine [mysqld] log-bin server-id=1 expire_logs_days=5 replicate-do-table=redmine.user replicate-do-table=redmine.groups_users 複製先Redmine [mysqld] server-id=2 replicate-do-table=redmine.users replicate-do-table=redmine.groups_users 接続状況確認 show slave status; show master status;
  • 17. 2020/11/14 第19回redmine.tokyo 勉強会 複数Redmine環境におけるユーザ管理作業の効率化 @y503unavailable 17 御清聴ありがとうございました • 各自のRedmine運用に、多少なりとも役に立て ば幸いです。 • Redmineはオープンソースソフトです。 –協力して育成&利用していきましょう。 ユーザ会はそのための場所です。 • ご意見、内容指摘の連絡先 redmine.Tokyo UnofficialCooking unofficial-redmine.org y503unavailable@ twitter, slack