#author("2021-05-21T16:48:51+09:00","default:jomura","jomura")
#author("2021-09-06T22:53:13+09:00","default:jomura","jomura")
* Redmineの導入 [#wa722c9e]

 公式dockerイメージとpodmanを用いて、RHEL8にRedmineを導入する。
 gitやsvnの認証をRedmineと統合するのに必要な「mod_perl」が、RHEL8には無いので、代替のコンテナをCentOS7で作る。
 また、導入には[[Ansible]]を用い、以下の導入作業は(導入対象のサーバではなく)Ansibleサーバで実施する。

#contents

** 導入サーバの前提条件 [#zd6f11f2]
+ OSはRHEL7(or CentOS7)かそれ以降の版とする。
+ 事前導入するソフトウェアパッケージは最小構成。
+ インターネットに接続可能   ※必要ならproxy設定
 /etc/dnf/dnf.conf
 proxy=http://proxy.jomura.net:8080/     #as your own
 /etc/profile.d/http_proxy.sh
 export HTTP_PROXY=http://proxy.jomura.net:8080/     #as your own
 export HTTPS_PROXY=${HTTP_PROXY}
+ パッケージの更新が事前に実行されている
 dnf clean all && dnf -y update && reboot

** 導入準備 [#g2a13c78]

*** configuration.yml [#q7e124c4]
- &ref(configuration.yml);
- Ansibleサーバ上の導入作業用ディレクトリ(どこでも可)に配置する。
- Redmineの設定ファイル
- SMTP情報など、環境に応じて編集しておく。

*** settings.sql [#xac1b7f0]
- &ref(settings.sql);
- Ansibleサーバ上の導入作業用ディレクトリに配置する。
- Redmineのsettings表のデータ
- 好みに合わせて編集しておく。後で画面から変更もできる。

*** コンテナ用環境変数ファイルの作成 [#fe007076]
- Ansibleサーバ上の導入作業用ディレクトリで実行する。
- 作業用ディレクトリに書き込み権限のある一般ユーザで実行する。
 cat << _EOF_ > dot-env
 REDMINE_PATH={{ redmine_path }}
 TZ=Asia/Tokyo
 MYSQL_ROOT_PASSWORD=$(< /dev/urandom tr -dc 'A-Za-z0-9!$%&()*+,-./:;<=>?@[\]^_{|}~' | head -c 16; echo)
 REDMINE_DB_MYSQL=mysql
 REDMINE_DB_DATABASE=redmine
 REDMINE_DB_USERNAME=redmine
 REDMINE_DB_PASSWORD=$(< /dev/urandom tr -dc 'A-Za-z0-9!$%&()*+,-./:;<=>?@[\]^_{|}~' | head -c 16; echo)
 REDMINE_DB_ENCODING=utf8mb4
 REDMINE_MEMCACHED=memcached
 _EOF_
 chmod go-rwx docker-env
- catに指定する _EOF_ を"でくくってはいけない。urandamコマンド等が実行されなくなる。

*** ansible playbook [#jc77d63e]
- &ref(pb_its_server-redmine.yml);
- Ansibleサーバ上の導入作業用ディレクトリに配置する。
- "become_method"は、"sudo"でも"su"でも可。
-- パスワードが必要ならansibleの[[inventoryファイル>Ansible#r2e36e99]]などに書く。
- TODO: Redmine.pmを用いてgit/svnのLDAP認証をするなら、perl-LDAPとcpanのAuthen::Simple::LDAPモジュールをhttpd-perlに追加導入する必要がある。

** 導入実施 [#ueaeb6d2]

*** playbookの実行 [#tce4a7d7]
- Ansibleサーバ上の一般ユーザで実行
- 実行前に文法チェックしよう
 ansible-playbook -i inventory.yml pb_its_server-redmine.yml --syntax-check
- 問題なければ実行
 ansible-playbook -i inventory.yml pb_its_server-redmine.yml

** 補足 [#x4427712]

+ mysqlコンテナを停止・削除すると、DBデータはどうなる?
 mysqlコンテナを停止・削除しても、ホストの /var/lib/mysql にMySQLのDBデータは永続化される。
+ MySQLへの設定追加
 ホストの/srv/mysql/conf.d/redmine.cnf に永続化されているMySQLの設定ファイルに追記し、mysqlコンテナを再起動すると反映される。
 ファイルに記述する前に、"set global …"コマンドを用いて稼働中に動的設定し、要否の判断をするとよい。
 また、slow queryの常時出力設定は不要と考えている。必要な時に、動的に設定(set global slow_query=1)すればよい。
 set global slow_query_log_file = 'slow.log';
 set global long_query_time = 5;
 set global slow_query_log = ON;
+ mysql_native_passwordの指定は必要?
 defaultのsha2_passwordにrailsが対応していない場合を考慮して必要。
+ MySQLやmemcashedは、コンテナではなく、ホスト側にrpm導入したらどうか。
 それもシンプルで好いかも。podmanなら127.0.0.1で参照できるようだし。
+ RedmineのURLに、コンテキストパス(/redmine)を設定できる?
 [[RedmineのWebサイト>https://hub.docker.com/_/redmine]]に紹介されている。コンテナ内のpassengerを再設定することで、技術的には可能。難易度は高い。しかし、できるだけコンテナの編集は避けたい。
+ Redmine導入用のplaybookに、git用のタスクがあるんだけど
 gitリポジトリ用のSELinux設定は、コンテナ作成前に実施する必要があるため、仕方なく。
+ ログの循環
 Redmineのproduction.logは、additional_environment.rbで循環設定している。
 httpd-perlコンテナのログは、あえて未設定。各自対処してください。

** Redmine Pluginの導入 [#v146f34a]

 導入しなくても、Redmineは使えるが…。

*** ansible playbook [#u34924ce]
- &ref(pb_its_server-plugin.yml);
- Ansibleサーバ上の導入作業用ディレクトリに配置する。
- "become_method"は、"sudo"でも"su"でも可。
-- パスワードが必要ならansibleのinventoryファイルなどに書く。
- pluginは好みで追加してください。

*** playbookの実行 [#bde1be95]
- Ansibleサーバ上の一般ユーザで実行
 ansible-playbook -i inventory.yml pb_its_server-plugin.yml

** Gitの導入 [#k595d970]

 http://{hostname}/git/{repos_name} でアクセスするGitサービス。認証はRedmineと統合。
 導入しなくても、Redmineは使える。

*** httpd用設定ファイルの作成 [#nc3df193]
- &ref(repos-git.conf);
- Ansibleサーバ上の導入作業用ディレクトリに配置する。

*** ansible playbook [#g47ca987]
- &ref(pb_its_server-git.yml);
- Ansibleサーバ上の導入作業用ディレクトリに配置する。
- "become_method"は、"sudo"でも"su"でも可。
-- パスワードが必要ならansibleのinventoryファイルなどに書く。

*** playbookの実行 [#be9ebb56]
- Ansibleサーバ上の一般ユーザで実行
 ansible-playbook -i inventory.yml pb_its_server-git.yml

** Subversionの導入 [#m35b32a5]

 http://{hostname}/svn/{repos_name} でアクセスするSubversionサービス。認証はRedmineと統合。
 導入しなくても、Redmineは使える。

*** httpd用設定ファイルの作成 [#x9d4ac4b]
- &ref(repos-svn.conf);
- Ansibleサーバ上の導入作業用ディレクトリに配置する。

*** ansible playbook [#e1559e43]
- &ref(pb_its_server-svn.yml);
- Ansibleサーバ上の導入作業用ディレクトリに配置する。
- "become_method"は、"sudo"でも"su"でも可。
-- パスワードが必要ならansibleのinventoryファイルなどに書く。

*** playbookの実行 [#h1486b3a]
- Ansibleサーバ上の一般ユーザで実行
 ansible-playbook -i inventory.yml pb_its_server-svn.yml


* 管理作業 [#p0d7abe6]

** Gitリポジトリの新規作成 [#cb0b1e6a]
- 導入対象のサーバにおいて、"users"グループのユーザで、下記を実行する。
 gitcreate.sh ${リポジトリ名}
- リポジトリ名の"."より前は、Redmineプロジェクトの"識別子"と同一にする。でなければ利用できない。
- リポジトリ名の"."より後は、リポジトリを区別できる任意の文字列でよい。

** Subversionリポジトリの新規作成 [#a7adfeac]
- 導入対象のサーバにおいて、"users"グループのユーザで、下記を実行する。
 svncreate.sh ${リポジトリ名}
- リポジトリ名の"."より前は、Redmineプロジェクトの"識別子"と同一にする。でなければ利用できない。
- リポジトリ名の"."より後は、リポジトリを区別できる任意の文字列でよい。

** 異常停止などで、http-perlが起動しなくなった場合 [#e0a30408]
- OSが異常停止したりすると、「pidが既にある」とか言って、http-perl(内のApache)が起動しなくなることがある。
- &ref(rerun_http-perl.sh); のように、コンテナを作り直せば解決する。

** 各コンテナのバージョンアップ [#u435634c]
- &ref(pb_its_server-redmine_update.yml);
- イメージをpullできたら、コンテナを一旦削除する。


トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS