@legitwhiz

legit whiz 技術レポート

View on GitHub

OSS ジョブスケジューラ(Rundeck)を自宅サーバに入れてみた

自宅サーバで運用スクリプトを実行する場面は多くはないですが、商用ジョブスケジューラ(JP1/AJS,TWS,SystemWalker等)と比較し、OSSでも使えるジョブスケジューラとなっているのか検証してみました。

検証する環境は、Ubuntu16.04LTSとCentOS7.5

0.検証環境

OS:Ubuntu 16.04 LTS
OS:CentOS 7.5
ミドルウェア:Rundeck 3.0.7 (20181008)
前提ミドルウェア:JRE 1.8.0

1.Rundeckとは

まず、OSS ジョブスケジューラである『Rundeck』とは、どういった製品なのか調査してみました。

『Rundeck』とは、LinuxもしくはWindowsで動作する、オープンソースのJob管理ツールであり、ライセンスは「Apache Software License 2.0」で商用利用が可能なライセンスとなっています。エージェントは、エージェントレスのシステムであることも(SSHを介してジョブ実行する。エージェント)その為、FW等のネットワーク設計も容易と思われる。

Cronのようにシェルスクリプトなどを定時実行するだけでなく、結果に応じて、通知や別スクリプトを実行するなどCronだけでは実施が難しいフロー制御が可能となっています。 『Rundeck』は、Java/Groovyで作られています。また、バックエンドDBは、デフォルトの『H2 Database』も同梱していますが、『MariaDB』に変更することも可能です。

ジョブ管理ソフトウェアとして、[Web GUI],[Web API]、[コマンドライン]を介してジョブの作成、実行、管理、スケジューリングすることも可能です。

日本語化については、公式には行われておらず、propertiesファイルを_jpとしてコピーし、編集することで可能なようだ。※要調査

『Rundeck』には、コミュニティサポート版でフリーである『Rundeck Community』と、有償のプロサポート版である『Rundeck Enterprise』がある。 『Rundeck Enterprise』では、プロのサポートを受けられる他にクラスタ環境でも使用することができ(DBはReplication)、使用できるPluginもPRO仕様となります。

連携については、Slack通知プラグインSCM(Git)連携、LDAP/ActiveDirectory連携、Graylogを使ってログに特定のメッセージを出力した際にジョブを実行することも可能みたいです。

『Rundeck』

2.Rundeck(3.0.7) インストール

2.1.Ubutnu16.04LTSにインストール

2.1.1.javaをインストール

まずは、『Rundeck』の前提となっているjavaをインストールする。

$ sudo apt update
$ sudo apt upgrade
$ sudo apt install openjdk-8-jdk-headless
install openjdk-8-jdk-headless

2.1.2.JAVA_HOME追加

$ sudo vi ~/.bashrc

#一番下へ以下4行を追加
JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export JAVA_HOME
PATH=$PATH:$JAVA_HOME/bin
export PATH

$ source ~/.bashrc

2.1.3.『Rundeck』インストール

次に『Rundeck』パッケージをインストール

$ wget https://dl.bintray.com/rundeck/rundeck-deb/rundeck_3.0.7.20181008-1.201810082317_all.deb
$ sudo dpkg -i rundeck_3.0.7.20181008-1.201810082317_all.deb
$ sudo dpkg -l rundeck

2.1.4. Java VM設定

使用するJava VMを設定する。

$ sudo update-alternatives --config java

2.1.5.リダイレクトURLの設定

$ sudo vi /etc/rundeck/rundeck-config.properties
grails.serverURL=http://ホスト名:4440 ドメイン名に変更
$ sudo vi /etc/rundeck/framework.properties
framework.server.name = ドメイン名 ← localhostからドメイン名に修正
framework.server.hostname = ドメイン名 ← localhostからドメイン名に修正
framework.server.port = 4440
framework.server.url = http://ホスト名:4440 ← localhostからドメイン名に修正

2.1.6.『Rundeck』起動

$ sudo systemctl status rundeckd
$ sudo systemctl start rundeckd

2.1.7.ブラウザから『Rundeck』にアクセスする。

HTTPの場合は、http://ドメイン名:4440
HTTPSの場合は、、https://ドメイン名:4443

初期状態のAdminユーザーでログインするにはUsernameに[admin]とPasswordに[admin]を入力します。 ログイン後のページが表示されればインストール完了です。

2.2.CentOS7.5にインストール

2.2.1.インストール

# yum install java-1.8.0
# wget https://repo.rundeck.org/latest.rpm
# rpm -Uvh ./latest.rpm
# yum install rundeck

2.2.2.JAVA_HOME追加

$ sudo vi ~/.bashrc

#一番下へ以下4行を追加
JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export JAVA_HOME
PATH=$PATH:$JAVA_HOME/bin
export PATH

$ source ~/.bashrc

2.2.3.リダイレクトURLの設定

# vi /etc/rundeck/rundeck-config.properties
grails.serverURL=http://IPアドレス:4440 ← ■localhostからIPアドレス変更
# vi /etc/rundeck/framework.properties
framework.server.name = localhost
framework.server.hostname = localhost
framework.server.port = 4440
framework.server.url = http://IPアドレス:4440 ← ■localhostからIPアドレスに修正

2.2.4.『Rundeck』起動

# systemctl status rundeckd
# systemctl start rundeckd

2.2.5. firewalldのポート許可設定

# firewall-cmd --list-ports --zone=public
# firewall-cmd --add-port=4440/tcp --zone=public --permanent
# firewall-cmd --list-ports --zone=public

2.2.6.ブラウザから『Rundeck』にアクセスする。

HTTPの場合は、http://IPアドレス:4440

Ubuntuと同様に初期状態のAdminユーザーでログインするにはUsernameに[admin]とPasswordに[admin]を入力し、ログイン後のページが表示されればインストール完了です。

3.Apacheとの連携設定

『Rundeck』にアクセスするにはポート4440もしくは4443を使用するのですが Apacheと連携することでポート80からアクセスすることが可能です。

Ubuntu16.04LTSは、HTTPSからもアクセス出来るようにしたいためApache連携し、かつHTTPSでのアクセスを目的とする。

3.1. Ubuntu16.04LTSの場合

3.1.1.Java起動パラメータ修正

[/etc/rundeck/profile]ファイルはJava起動パラメータが設定されていますが、そこにapacheに連携するように”-Dserver.web.content”を追加します。

# vi /etc/rundeck/profile

RDECK_JVM="-Drundeck.jaaslogin=$JAAS_LOGIN \
-Djava.security.auth.login.config=$JAAS_CONF \
-Dloginmodule.name=$LOGIN_MODULE \
-Drdeck.config=$RDECK_CONFIG \
-Drundeck.server.configDir=$RDECK_SERVER_CONFIG \
-Dserver.datastore.path=$RDECK_SERVER_DATA/rundeck \
-Drundeck.server.serverDir=$RDECK_INSTALL \
-Drdeck.projects=$RDECK_PROJECTS \
-Drdeck.runlogs=$RUNDECK_LOGDIR \
-Drundeck.config.location=$RDECK_CONFIG_FILE \
-Djava.io.tmpdir=$RUNDECK_TEMPDIR \
-Drundeck.server.workDir=$RUNDECK_WORKDIR \
-Dserver.http.port=$RDECK_HTTP_PORT \
-Dserver.web.context=/rundeck \               ←■この行を追加
-Drdeck.base=$RDECK_BASE"

3.1.2.リダイレクトURLの設定修正

$ sudo vi /etc/rundeck/rundeck-config.properties
grails.serverURL=http://IPアドレス/rundeck ←■修正
$ sudo vi /etc/rundeck/framework.properties
framework.server.name = ドメイン名 ←■修正
framework.server.hostname = ドメイン名 ←■修正
framework.server.port = 4440
grails.serverURL=https://ドメイン名/rundeck ←■修正
framework.rundeck.url = https://ドメイン名/rundeck ←■追加

3.1.3.Rundeckの再起動

systemctl restart rundeckd

3.1.4.『Rundeck』用Apache Config作成

$ sudo vi /etc/apache2/sites-available/rundeck.conf

<Location "/rundeck">
        ProxyPass http://localhost:4440/rundeck
        ProxyPassReverse http://localhost:4440/rundeck
        Require all granted
</Location>

$ sudo a2ensite rundeck

3.1.5.Apacheの再起動

$ sudo systemctl reload apache2

3.1.6.ブラウザから『Rundeck』にアクセスする。

https://ドメイン名/rundeck

3.2. CentOS7.5の場合

CentOS7.5もUbuntu16.04LTS同様にApacheと連携するが、HTTPのみとする。

3.2.1.Java起動パラメータ修正

[/etc/rundeck/profile]ファイルはJava起動パラメータが設定されていますが、そこにapacheに連携するように”-Dserver.web.content”を追加します。

# vi /etc/rundeck/profile

RDECK_JVM="-Drundeck.jaaslogin=$JAAS_LOGIN \
-Djava.security.auth.login.config=$JAAS_CONF \
-Dloginmodule.name=$LOGIN_MODULE \
-Drdeck.config=$RDECK_CONFIG \
-Drundeck.server.configDir=$RDECK_SERVER_CONFIG \
-Dserver.datastore.path=$RDECK_SERVER_DATA/rundeck \
-Drundeck.server.serverDir=$RDECK_INSTALL \
-Drdeck.projects=$RDECK_PROJECTS \
-Drdeck.runlogs=$RUNDECK_LOGDIR \
-Drundeck.config.location=$RDECK_CONFIG_FILE \
-Djava.io.tmpdir=$RUNDECK_TEMPDIR \
-Drundeck.server.workDir=$RUNDECK_WORKDIR \
-Dserver.http.port=$RDECK_HTTP_PORT \
-Dserver.web.context=/rundeck \               ←■この行を追加
-Drdeck.base=$RDECK_BASE"

3.2.2.リダイレクトURLの設定修正

# vi /etc/rundeck/rundeck-config.properties
grails.serverURL=http://IPアドレス/rundeck ←■修正
# vi /etc/rundeck/framework.properties
framework.server.name = localhost
framework.server.hostname = localhost
framework.server.port = 4440
framework.server.url = http://IPアドレス/rundeck ←■修正

3.2.3.Rundeckの再起動

# systemctl restart rundeckd

3.2.4.『Rundeck』用Apache Config作成

# vi /etc/httpd/conf.d/rundeck.conf

<Location "/rundeck">
        ProxyPass http://localhost:4440/rundeck
        ProxyPassReverse http://localhost:4440/rundeck
        Require all granted
</Location>

3.2.5.Apacheの再起動

# systemctl reload httpd

3.2.6.ブラウザから『Rundeck』にアクセスする。

http://IPアドレス/rundeck

Rundeck プロジェクト作成やジョブ作成と実行については、追々書いていこうかと思います。