Last-modified: 2021-09-06 (月) 22:53:29 (952d)

Redmineの導入

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

導入サーバの前提条件

  1. OSはRHEL7(or CentOS7)かそれ以降の版とする。
  2. 事前導入するソフトウェアパッケージは最小構成。
  3. インターネットに接続可能 ※必要なら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}
  4. パッケージの更新が事前に実行されている
    dnf clean all && dnf -y update && reboot

導入準備

configuration.yml

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

settings.sql

  • filesettings.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

  • filepb_its_server-redmine.yml
  • Ansibleサーバ上の導入作業用ディレクトリに配置する。
  • "become_method"は、"sudo"でも"su"でも可。
  • TODO: Redmine.pmを用いてgit/svnのLDAP認証をするなら、perl-LDAPとcpanのAuthen::Simple::LDAPモジュールをhttpd-perlに追加導入する必要がある。

導入実施

playbookの実行

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

補足

  1. mysqlコンテナを停止・削除すると、DBデータはどうなる?
     mysqlコンテナを停止・削除しても、ホストの /var/lib/mysql にMySQLのDBデータは永続化される。
  2. 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;
  3. mysql_native_passwordの指定は必要?
     defaultのsha2_passwordにrailsが対応していない場合を考慮して必要。
  4. MySQLやmemcashedは、コンテナではなく、ホスト側にrpm導入したらどうか。
     それもシンプルで好いかも。podmanなら127.0.0.1で参照できるようだし。
  5. RedmineのURLに、コンテキストパス(/redmine)を設定できる?
     RedmineのWebサイトに紹介されている。コンテナ内のpassengerを再設定することで、技術的には可能。難易度は高い。しかし、できるだけコンテナの編集は避けたい。
  6. Redmine導入用のplaybookに、git用のタスクがあるんだけど
     gitリポジトリ用のSELinux設定は、コンテナ作成前に実施する必要があるため、仕方なく。
  7. ログの循環
     Redmineのproduction.logは、additional_environment.rbで循環設定している。
     httpd-perlコンテナのログは、あえて未設定。各自対処してください。

Redmine Pluginの導入

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

ansible playbook

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

playbookの実行

  • Ansibleサーバ上の一般ユーザで実行
    ansible-playbook -i inventory.yml pb_its_server-plugin.yml

Gitの導入

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

httpd用設定ファイルの作成

  • filerepos-git.conf
  • Ansibleサーバ上の導入作業用ディレクトリに配置する。

ansible playbook

  • filepb_its_server-git.yml
  • Ansibleサーバ上の導入作業用ディレクトリに配置する。
  • "become_method"は、"sudo"でも"su"でも可。
    • パスワードが必要ならansibleのinventoryファイルなどに書く。

playbookの実行

  • Ansibleサーバ上の一般ユーザで実行
    ansible-playbook -i inventory.yml pb_its_server-git.yml

Subversionの導入

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

httpd用設定ファイルの作成

  • filerepos-svn.conf
  • Ansibleサーバ上の導入作業用ディレクトリに配置する。

ansible playbook

  • filepb_its_server-svn.yml
  • Ansibleサーバ上の導入作業用ディレクトリに配置する。
  • "become_method"は、"sudo"でも"su"でも可。
    • パスワードが必要ならansibleのinventoryファイルなどに書く。

playbookの実行

  • Ansibleサーバ上の一般ユーザで実行
    ansible-playbook -i inventory.yml pb_its_server-svn.yml

管理作業

Gitリポジトリの新規作成

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

Subversionリポジトリの新規作成

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

異常停止などで、http-perlが起動しなくなった場合

  • OSが異常停止したりすると、「pidが既にある」とか言って、http-perl(内のApache)が起動しなくなることがある。
  • filererun_http-perl.sh のように、コンテナを作り直せば解決する。

各コンテナのバージョンアップ


添付ファイル: filepb_its_server-redmine_update.yml 1646件 [詳細] filepb_its_server-redmine.yml 1877件 [詳細] filererun_http-perl.sh 1768件 [詳細] filepb_its_server-plugin.yml 1936件 [詳細] filesettings.sql 1970件 [詳細] filerepos-svn.conf 1932件 [詳細] filerepos-git.conf 1910件 [詳細] filepb_its_server-svn.yml 1843件 [詳細] filepb_its_server-git.yml 1784件 [詳細] fileconfiguration.yml 1825件 [詳細]

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