Redmine Ansible

24
インターネット非接続環境で、 Redmine & Subversion インストール&設定を、 Ansible を使って自動化してみた 8redmine.tokyo 勉強会 2015-05-16 () 伊藤 喜一 (@glad2121)

Transcript of Redmine Ansible

Page 1: Redmine Ansible

インターネット非接続環境で、

Redmine & Subversion の

インストール&設定を、

Ansible を使って自動化してみた

第8回 redmine.tokyo 勉強会

2015-05-16 (土)

伊藤 喜一 (@glad2121)

Page 2: Redmine Ansible

自己紹介

• ハンドルネーム: GLAD!! (@glad2121)

• 氏名: 伊藤 喜一(いとう よしいち)

• 所属: 株式会社オージス総研

エンタープライズオープンソースセンター (EOSC)

• 主な仕事: ▫ アーキテクトとして案件の立ち上げと支援

▫ OSS を活用したビジネスの拡大

2

Page 3: Redmine Ansible

1年前

• とあるお客様(銀行)で、開発ツール(Redmine、Subversion、Jenkins 等)の導入・標準化支援をすることに

3

Page 4: Redmine Ansible

インストールをどうしようか・・・

• 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

Page 5: Redmine Ansible

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

Page 6: Redmine Ansible

案件の方は・・・

• Redmine 採用プロジェクトの増加、社内標準化

• 商用構成管理ツールから Subversion への移行

• お客様の状況や要望に応えたカスタマイズ

• 独自プラグインも作成

⇒ サーバーを何台もセットアップするのは面倒

6

Page 7: Redmine Ansible

インストール作業を自動化したい

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

Page 8: Redmine Ansible

サーバー構成管理ツール?

• サーバーの構成情報を管理し、構築を自動化する ツール

8

構成管理ツール 実行環境

管理対象サーバー

管理対象サーバー

管理対象サーバー

構成情報 - Redmine - 初期設定 - Subversion - etc.

Redmine

初期設定

Subversion

etc.

Page 9: Redmine Ansible

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

Page 10: Redmine Ansible

BitNami インストーラの自動起動

• installer --help でオプションが確認できる

▫ --mode unattended :非対話形式で実行

▫ --prefix <dir> :インストールディレクトリ

▫ --base_user<user> :管理者アカウント

▫ --redmine_language <lang> :使用言語

▫ --optionfile <file> :オプションをファイルに記述

• ところが・・・ 肝心な --redmine_language ja が効かない ⇒ しかたがないので、非対話形式での実行を断念

10

Page 11: Redmine Ansible

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) と訂正する

最後の質問で、 ループを抜ける

Page 12: Redmine Ansible

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

Page 13: Redmine Ansible

Ansible の基本概念

• Inventory ファイル

▫ 管理対象のサーバーを記述したファイル

▫ サーバーの用途、種類などでグルーピングが可能

• Playbook

▫ サーバーの構成情報、構築手順を記述したもの

▫ 1ファイルでも記述できるが、分割も可能

• Role

▫ サーバーが持つ役割ごとに、構成情報、構築手順を まとめたもの、再利用の単位になる

13

Page 14: Redmine Ansible

Ansible の基本的なモジュール

• copy ▫ ファイルを管理対象サーバーへコピーする

• template ▫ テンプレートを元にファイルを作成する

• file ▫ ファイルの所有者、モードの変更、ディレクトリの作成など

• lineinfile / replace ▫ 管理対象サーバー上のファイルを編集する

• service ▫ サービスの起動、停止、再起動など

• command ▫ 任意のコマンドを実行する、パイプやリダイレクトは利用不可

• shell ▫ 任意のコマンドを実行する、パイプやリダイレクトも利用可能

14

Page 15: Redmine Ansible

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: …

Page 16: Redmine Ansible

Playbook の実行

• よく使うオプション

▫ -i <inventory> :インベントリファイルの指定

▫ -v :詳細表示

▫ -k :SSH パスワードの問合せ(プロンプトを表示)

▫ -K :sudo パスワードの問合せ(プロンプトを表示)

▫ -u <user> :リモートユーザーの指定

▫ --check :チェックモード(実際の変更は行われない)

• こんな感じで実行

ansible-playbook bitnami-redmine.yml –i hosts –vkK

• 何回実行しても OK(冪等性)

16

Page 17: Redmine Ansible

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

Page 18: Redmine Ansible

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

Page 19: Redmine Ansible

まとめ

• Ansible はシンプル!

• インターネット非接続環境でも使える!

• 一度 Playbook を作成すれば、構成の変更やサーバーの追加が簡単!

19

Page 20: Redmine Ansible

参考: 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

Page 21: Redmine Ansible

参考: 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

Page 22: Redmine Ansible

参考: 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

Page 23: Redmine Ansible

参考: その他

• 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

Page 24: Redmine Ansible

24

ご清聴どうもありがとうございました。

本日の発表の成果物はこちら https://github.com/glad2121/bitnami-ansible