Redmineの導入 †
公式dockerイメージとpodmanを用いて、RHEL8にRedmineを導入する。
gitのsvnの認証をRedmineと統合するのに必要な「mod_perl」が、RHEL8には無いので、代替のコンテナをCentOS7で作る。
また、導入にはansibleを用い、以下の導入作業は(導入対象のサーバではなく)ansibleサーバで実施する。
導入サーバの前提条件 †
- 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
導入準備 †
configuration.yml †
- configuration.yml
- Ansibleサーバ上の導入作業用ディレクトリ(どこでも可)に配置する。
- Redmineの設定ファイル
- SMTP情報など、環境に応じて編集しておく。
settings.sql †
- settings.sql
- Ansibleサーバ上の導入作業用ディレクトリに配置する。
- Redmineのsettings表のデータ
- 好みに合わせて編集しておく。後で画面から変更もできる。
コンテナ用環境変数ファイルの作成 †
- 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 †
- pb_its_server-redmine.yml
- Ansibleサーバ上の導入作業用ディレクトリに配置する。
- "become_method"は、"sudo"でも"su"でも可。
- パスワードが必要ならansibleのinventoryファイルなどに書く。
導入実施 †
playbookの実行 †
補足 †
- 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サイトに紹介されている。コンテナ内のpassengerを再設定することで、技術的には可能。難易度は高い。しかし、できるだけコンテナの編集は避けたい。
- Redmine導入用のplaybookに、git用のタスクがあるんだけど
gitリポジトリ用のSELinux設定は、コンテナ作成前に実施する必要があるため、仕方なく。
- ログの循環
Redmineのproduction.logは、additional_environment.rbで循環設定している。
httpd-perlコンテナのログは、あえて未設定。各自対処してください。
Redmine Pluginの導入 †
導入しなくても、Redmineは使えるが…。
ansible playbook †
- pb_its_server-plugin.yml
- Ansibleサーバ上の導入作業用ディレクトリに配置する。
- "become_method"は、"sudo"でも"su"でも可。
- パスワードが必要ならansibleのinventoryファイルなどに書く。
playbookの実行 †
Gitの導入 †
http://{hostname}/git/{repos_name} でアクセスするGitサービス。認証はRedmineと統合。
導入しなくても、Redmineは使える。
httpd用設定ファイルの作成 †
ansible playbook †
- pb_its_server-git.yml
- Ansibleサーバ上の導入作業用ディレクトリに配置する。
- "become_method"は、"sudo"でも"su"でも可。
- パスワードが必要ならansibleのinventoryファイルなどに書く。
playbookの実行 †
http://{hostname}/svn/{repos_name} でアクセスするSubversionサービス。認証はRedmineと統合。
導入しなくても、Redmineは使える。
httpd用設定ファイルの作成 †
ansible playbook †
- pb_its_server-svn.yml
- Ansibleサーバ上の導入作業用ディレクトリに配置する。
- "become_method"は、"sudo"でも"su"でも可。
- パスワードが必要ならansibleのinventoryファイルなどに書く。
playbookの実行 †
管理作業 †
Gitリポジトリの新規作成 †
- "users"グループのユーザで、下記を実行する。
gitcreate.sh ${リポジトリ名}
- リポジトリ名の"."より前は、Redmineプロジェクトの"識別子"と同一にする。でなければ利用できない。
- リポジトリ名の"."より後は、リポジトリを区別できる任意の文字列でよい。
- "users"グループのユーザで、下記を実行する。
svncreate.sh ${リポジトリ名}
- リポジトリ名の"."より前は、Redmineプロジェクトの"識別子"と同一にする。でなければ利用できない。
- リポジトリ名の"."より後は、リポジトリを区別できる任意の文字列でよい。