Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Redmine Ansible

5,463 views

Published on

インターネット非接続環境で、Redmine & Subversion のインストール&設定を、Ansible を使って自動化してみた

第8回 redmine.tokyo 勉強会
2015-05-16 (土)

Published in: Technology
  • Be the first to comment

Redmine Ansible

  1. 1. インターネット非接続環境で、 Redmine & Subversion の インストール&設定を、 Ansible を使って自動化してみた 第8回 redmine.tokyo 勉強会 2015-05-16 (土) 伊藤 喜一 (@glad2121)
  2. 2. 自己紹介 • ハンドルネーム: GLAD!! (@glad2121) • 氏名: 伊藤 喜一(いとう よしいち) • 所属: 株式会社オージス総研 エンタープライズオープンソースセンター (EOSC) • 主な仕事: ▫ アーキテクトとして案件の立ち上げと支援 ▫ OSS を活用したビジネスの拡大 2
  3. 3. 1年前 • とあるお客様(銀行)で、開発ツール(Redmine、 Subversion、Jenkins 等)の導入・標準化支援をする ことに 3
  4. 4. インストールをどうしようか・・・ • ALMinium ▫ https://github.com/alminium/alminium ▫ Redmine、Subversion、Jenkins、Backlogs プラグイン 等のインストールが簡単にできる ▫ インターネット接続が必要 ⇒ 断念 • Redmine JP のインストール手順 ▫ http://redmine.jp/install/ ▫ これもインターネット接続が必要 ⇒ 断念 • BitNami Redmine Stack ▫ https://bitnami.com/stack/redmine ▫ スタンドアローンで実行可能 ⇒ 採用 4
  5. 5. BitNami Redmine Stack の特徴 • プラットフォーム ▫ Linux、Windows、OS X、VMware、Clouds • メリット ▫ Apache、MySQL、Ruby on Rails など必要なもの一式 がインストールされる • デメリット、問題点 ▫ Linux 版はサービスとして登録されない ▫ Subversion は svnserve (svn://) が起動しており、 Apache と連携 (http://) していない ▫ Windows 版 Apache 2.4 が mod_perl に対応しておら ず、Redmine.pm によるアカウントの連携ができない 5
  6. 6. 案件の方は・・・ • Redmine 採用プロジェクトの増加、社内標準化 • 商用構成管理ツールから Subversion への移行 • お客様の状況や要望に応えたカスタマイズ • 独自プラグインも作成 ⇒ サーバーを何台もセットアップするのは面倒 6
  7. 7. インストール作業を自動化したい 1. BitNami Redmine Stack のインストール 2. Redmine の初期設定 3. Redmine のパッチ(カスタマイズ)適用 4. Redmine のプラグインのインストール Banner、SCM Creator、Issue Importer、 Wiki Extensions、独自プラグイン、etc. 5. Redmine のテーマのインストール 6. Subversion と Redmine のアカウント連携 7. LDAP 認証の設定 8. バックアップ、ログローテーションの設定 7
  8. 8. サーバー構成管理ツール? • サーバーの構成情報を管理し、構築を自動化する ツール 8 構成管理ツール 実行環境 管理対象サーバー 管理対象サーバー 管理対象サーバー 構成情報 - Redmine - 初期設定 - Subversion - etc. Redmine 初期設定 Subversion etc.
  9. 9. Ansible vs Chef 9 Ansible Chef 実行環境 Python 2.6 以上 Ruby 構成情報の 記述 YAML で記述 比較的シンプル Playbook DSL (Ruby) で記述 若干複雑 Cookbook、Recipe 管理対象 サーバー エージェントの インストール不要 Python が動作し、SSH で接続できればOK エージェントの インストールが必要 chef-client chef-solo アーキテクチャ Push 型 Pull 型 共有リポジトリ Ansible Galaxy Supermarket
  10. 10. BitNami インストーラの自動起動 • installer --help でオプションが確認できる ▫ --mode unattended :非対話形式で実行 ▫ --prefix <dir> :インストールディレクトリ ▫ --base_user<user> :管理者アカウント ▫ --redmine_language <lang> :使用言語 ▫ --optionfile <file> :オプションをファイルに記述 • ところが・・・ 肝心な --redmine_language ja が効かない ⇒ しかたがないので、非対話形式での実行を断念 10
  11. 11. expect • 対話形式のプログラムを 自動実行するためのツール • Tcl 言語を拡張 • expect <pattern> で 指定の出力を待って、 send <text> で 自動入力を行う 11 #!/usr/bin/expect -- set installer [lindex $argv 0] set optionfile [lindex $argv 1] spawn $installer --optionfile $optionfile while {1} { expect { "Please choose an option ?4] :" { send “9¥n“ } "Press ?Enter] to continue:" { send “¥n“ break } … "]:" { send "¥n“ } } } 4 (English)? と聞かれたら、 9 (Japanese) と訂正する 最後の質問で、 ループを抜ける
  12. 12. Ansible のインストール 1. yum downloadonly プラグインのインストール # yum install yum-plugin-downloadonly 2. RPM ファイルのダウンロード # yum install ansible --downloadonly --downloaddir=<directory> 3. createrepo のインストール # yum install createrepo 4. ローカルリポジトリの作成 # createrepo <repodir> 5. ZIP に固めてサーバーへ 6. .repo ファイルの作成 eg. /etc/yum.repos.di/local.repo 7. Ansible のインストール # yum install ansible –disablerepo=* --enablerepo=local ※ ローカルリポジトリが作成できれば、BitNami じゃなくてもいいんだけどね (^^;) 12 [local] name=Local baseurl=file:///var/local/repo
  13. 13. Ansible の基本概念 • Inventory ファイル ▫ 管理対象のサーバーを記述したファイル ▫ サーバーの用途、種類などでグルーピングが可能 • Playbook ▫ サーバーの構成情報、構築手順を記述したもの ▫ 1ファイルでも記述できるが、分割も可能 • Role ▫ サーバーが持つ役割ごとに、構成情報、構築手順を まとめたもの、再利用の単位になる 13
  14. 14. Ansible の基本的なモジュール • copy ▫ ファイルを管理対象サーバーへコピーする • template ▫ テンプレートを元にファイルを作成する • file ▫ ファイルの所有者、モードの変更、ディレクトリの作成など • lineinfile / replace ▫ 管理対象サーバー上のファイルを編集する • service ▫ サービスの起動、停止、再起動など • command ▫ 任意のコマンドを実行する、パイプやリダイレクトは利用不可 • shell ▫ 任意のコマンドを実行する、パイプやリダイレクトも利用可能 14
  15. 15. Playbook の作成 15 --- - hosts: redmine-servers sudo: yes pre_tasks: - debug: var=bitnami_home roles: - common - expect - bitnami - redmine-settings - redmine-patches - redmine-plugins - redmine-themes - subversion bitnami-redmine.yml - roles/ - common/ - expect/ - bitnami/ - tasks/ - main.yml - handlers/ - files/ - templates/ - redmine-settings/ … - name: copy installer copy: … - name: install bitnami-redmine command: …
  16. 16. Playbook の実行 • よく使うオプション ▫ -i <inventory> :インベントリファイルの指定 ▫ -v :詳細表示 ▫ -k :SSH パスワードの問合せ(プロンプトを表示) ▫ -K :sudo パスワードの問合せ(プロンプトを表示) ▫ -u <user> :リモートユーザーの指定 ▫ --check :チェックモード(実際の変更は行われない) • こんな感じで実行 ansible-playbook bitnami-redmine.yml –i hosts –vkK • 何回実行しても OK(冪等性) 16
  17. 17. Tips: DB パスワードの取得 • database.yml に記載されているパスワードを取得する • grep | sed ⇒ register ⇒ set_fact • チェックモード (--check) でも実行&変更扱いしない - name: get bitnami mysql password shell: >- grep -E '^¥s+password¥:¥s+¥w+' {{ redmine_home }}/config/database.yml | sed -E 's/¥s+password¥:¥s+//' always_run: yes register: bitnami_mysql_password_result changed_when: false - name: set bitnami_mysql_password set_fact: bitnami_mysql_password: "{{ bitnami_mysql_password_result.stdout }}" 17
  18. 18. Tips: Redmine の設定変更 • Rake タスクで DB を変更(でよい?) • $REDMINE_HOME/lib/tasks/redmine_setup.rake を作成 • 普通に Redmine (Rails) の model が使用できる • 設定の変更は Setting[key] = value で OK • $REDMINE_HOME で以下のコマンドを実行 bundle exec rake redmine_setup RAILS_ENV=production 18 desc "Setup Redmine." task :redmine_setup => :environment do Setting[:repositories_encodings] = 'utf-8,cp932,euc-jp' Setting[:user_format] = :lastname_firstname … end
  19. 19. まとめ • Ansible はシンプル! • インターネット非接続環境でも使える! • 一度 Playbook を作成すれば、構成の変更やサーバー の追加が簡単! 19
  20. 20. 参考: Redmine 関連① • Redmine ▫ http://www.redmine.org • Redmine JP ▫ http://redmine.jp • BitNami Redmine Stack ▫ https://bitnami.com/stack/redmine • BitNami Redmine Documentation ▫ https://wiki.bitnami.com/Applications/BitNami_Redmine • ALMinium ▫ https://github.com/alminium/alminium • Redmine SCM Creator ▫ http://projects.andriylesyuk.com/project/redmine/scm- creator 20
  21. 21. 参考: Redmine 関連② • BitNami Redmine 2.4.2 初期設定 ▫ http://ossfan.net/setup/redmine-02.html • Subversion の Apache 経由アクセスの設定 ▫ http://sc1h5r.cswiki.jp/index.php?SubversionのApache経由 アクセスの設定 • 閉鎖環境で Redmine をインストールする ▫ https://github.com/glad2121/bitnami-redmine-ext/wiki • Rails でバッチ処理を作成してみる(Rake のタスクの場合) ▫ http://d.hatena.ne.jp/yk5656/20140803/1407569988 21
  22. 22. 参考: Ansible 関連 • Ansible ▫ http://www.ansible.com • Ansible Documentation ▫ http://docs.ansible.com • Ansible チュートリアル ▫ http://yteraoka.github.io/ansible-tutorial/ • 構成管理ツール Ansible を使ってみる ▫ http://dev.classmethod.jp/tool/ansible/ • Ansible マジック変数の一覧と内容 ▫ http://qiita.com/h2suzuki/items/15609e0de4a2402803e9 • Ansible 入門 ▫ http://dotinstall.com/lessons/basic_ansible 22
  23. 23. 参考: その他 • Expect 入門 ▫ http://nsa.kpu-m.ac.jp/gijutu/expect/doc-expect.php • yum を使用して、パッケージをインストールせずにダウンロードだけ を行う方法 ▫ https://access.redhat.com/ja/node/395763 • yum リポジトリのセットアップ方法 (createrepo) ▫ http://darutk-oboegaki.blogspot.jp/2012/11/yum.html • sed コマンド ▫ http://hydrocul.github.io/wiki/commands/sed.html 23
  24. 24. 24 ご清聴どうもありがとうございました。 本日の発表の成果物はこちら https://github.com/glad2121/bitnami-ansible

×