#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できたら、コンテナを一旦削除する。