CentOS 7にOSSのWebベースAnsible操作・管理ツール「Ansible Semaphore」をインストールする

AnsibleのWebベースでの操作・管理ツールといえばAnsible Towerが有名だが、10ホスト以上になると有償となってしまうため、あまり気軽に入れられないところがある。
で、他に何かないかと探していたところ、「Ansible Semaphore」というものがあったので、すこし触ってみることにする。一応Dockerもあるようだが、今後のことも考えてCentOS 7に入れてみることにする。
OSS Alternative Ansible Towerと言っているので、なかなか期待できそうだ。

1.前提パッケージのインストール

まずは前提となるパッケージのインストールから。
以下のコマンドを実行する。

sudo yum -y install epel-release
sudo yum -y install ansible mariadb mariadb-server

MariaDBのサービス起動設定と、最低限のセキュリティ設定を行っておく。

systemctl start mariadb
systemctl enable mariadb
mysql_secure_installation

データベースとそこにアクセスするユーザを作成する。

mysql -u root -p -e "
CREATE DATABASE semaphore;
CREATE USER 'semaphore'@'localhost' IDENTIFIED BY 'パスワード';
GRANT ALL PRIVILEGES ON semaphore.* TO 'semaphore'@'localhost' WITH GRANT OPTION;"

Playbookの配置先として、opt配下にディレクトリを作成しておく。

mkdir /opt/semaphore

2.Semaphoreのインストール

次に、Semaphoreのインストールを行う。
コンパイル済みのバイナリがあるので、ダウンロードしてセットアップさせる。

cd /usr/bin
wget https://github.com/ansible-semaphore/semaphore/releases/download/v2.0.4/semaphore_linux_amd64
mv semaphore_linux_amd64 semaphore
chmod a+x semaphore
semaphore -setup
[root@BS-PUB-CENT7-01 bin]# semaphore -setup

 Hello! You will now be guided through a setup to:

 1. Set up configuration for a MySQL/MariaDB database
 2. Set up a path for your playbooks (auto-created)
 3. Run database Migrations
 4. Set up initial seamphore user & password

 > DB Hostname (default 127.0.0.1:3306):
 > DB User (default root): semaphore
 > DB Password: P@ssw0rd
 > DB Name (default semaphore): semaphore
 > Playbook path: /opt/semaphore

 Generated configuration:
 {
        "mysql": {
                "host": "127.0.0.1:3306",
                "user": "semaphore",
                "pass": "P@ssw0rd",
                "name": "semaphore"
        },
        "port": "",
        "bugsnag_key": "",
        "tmp_path": "/opt/semaphore",
        "cookie_hash": "pi2crua6ZVIrUvbLAj8BLldw1uANvJwRWaS7pFCWmRw=",
        "cookie_encryption": "Sj1f/Z2XT592b/jeHue3K3pVBd9icJeubh1ixh58+yQ="
 }

 > Is this correct? (yes/no): yes
 Running: mkdir -p /opt/semaphore..
 Configuration written to /opt/semaphore/semaphore_config.json..
 Pinging database..

 Running DB Migrations..
Creating migrations table
Executing migration v0.0.0 (at 2016-09-25 00:09:01.221793369 +0900 JST)...
 [11/11]
Executing migration v1.0.0 (at 2016-09-25 00:09:01.53705146 +0900 JST)...
 [7/7]
Executing migration v1.1.0 (at 2016-09-25 00:09:01.858125307 +0900 JST)...
 [1/1]
Executing migration v1.2.0 (at 2016-09-25 00:09:01.930146649 +0900 JST)...
 [1/1]
Executing migration v1.3.0 (at 2016-09-25 00:09:01.963162965 +0900 JST)...
 [3/3]
Executing migration v1.4.0 (at 2016-09-25 00:09:02.123194544 +0900 JST)...
 [2/2]
Executing migration v1.5.0 (at 2016-09-25 00:09:02.238933666 +0900 JST)...
 [1/1]
Executing migration v0.1.0 (at 2016-09-25 00:09:02.268897766 +0900 JST)...
 [6/6]
Executing migration v1.6.0 (at 2016-09-25 00:09:02.410236064 +0900 JST)...
 [4/4]
Executing migration v1.7.0 (at 2016-09-25 00:09:02.601744445 +0900 JST)...
 [1/1]

 > Username: semaphore
 > Email:
 > Your name: semaphore
 > Password: P@ssw0rd
 You are all setup semaphore!
 Re-launch this program pointing to the configuration file

./semaphore -config /opt/semaphore/semaphore_config.json

 To run as daemon:

nohup ./semaphore -config /opt/semaphore/semaphore_config.json &

 You can login with  or semaphore.

最後に、以下のコマンドでsemaphoreを起動する。

nohup ./semaphore -config /opt/semaphore/semaphore_config.json &

3.ブラウザからアクセスする

無事インストールが完了したら、「http://IPアドレス:3000」へブラウザからアクセスする。
ログインには、先ほど設定したIDorメールアドレスとパスワードを用いる。

ログイン直後の画面。まだ何もない状態。
まずは右上の「Projects」からプロジェクトを作成する。

プロジェクト作成後、対象のプロジェクトを選択して「Key Store」からキーの登録をする。
このキーは、Ansibleでのデプロイでもそうだが、git cloneでも使用されるようだ。

Playbookを登録しているgitリポジトリがあれば、左メニューの「Playbook Repositories」から登録できる。
ここで指定した場所にあるPlaybookを指定してタスクをキックすることになる。

Inventoryを登録する。
このインベントリでAnsible hostsの役割も兼ねているようだ。右側にある「edit inventory contents」を編集し、グループとホストの情報を入力する。

最後に、Task Templeteからタスクを作成する。
このとき、実行したいPlaybookを指定してやる。

あとは、対象のタスクをrunするだけだ。

無事、Playbookを適用できた。
対象サーバもGUIで手軽に設定できるし、Playbookもgitで手軽に取得できる。
ユーザごとの権限管理を気を付ければ手軽にチームでも使えるだろうし、かなりいいと思う。