1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Docker(Docker-Compose)でRundeckを構築

Last updated at Posted at 2024-07-16

背景

プロジェクトの共有環境で、定期実行するコマンドをcronで実行していたが、実行しているコマンドをメンバー内で可視化するために、ジョブマネージャであるRundeckを用いてコマンドを実行することにした。

Rundeckを選択した理由

  • OSSである(=有償ではない)
  • UIがリッチで直感的に使用できる
  • プロジェクトメンバに利用経験者がいる

構築環境

  • OS : Ubunt 20.04.4 LTS
  • Docker : 20.10.17, build 100c701
  • Docker compose : version 1.29.1, build c34c88b2

フォルダ構成

rundeck 
 ├─ rundeck      : rundeckのデータを格納
 │  ├─ data      : rundeckのデータを格納
 │  ├─ job       : rundeckで実行したジョブの実行結果を格納
 ├─ mysql
 │  └─ db        : dbデータを格納
 └─ docker-compose.yaml

Docker Compse

共通

  • Rundeckは、デフォルトでH2データベースを利用するようになっているが、本番環境での利用は非推奨となっていので、念のため、MySQLを使用する。別コンテナを作成するため、Docker-composeで構成を作成する
  • Docker composeのバージョンは作成時に最新のバージョンだった3.8を指定する

Rundeck

  • 作成時(2024/07/16)の最新バージョンである5.4.0を指定する
  • コンテナのタイムゾーンをホストサーバと合わせるために、ホストサーバの/etc/localtimeをマウントする 1
  • 実行結果などのログを記録するために以下を永続化する2
    /home/rundeck/var/logs
    /home/rundeck/server/data
  • コンテナの実行ユーザが、ログ出力先フォルダの所有者ではない場合、パーミッションエラーが発生してRundeckのジョブ実行に失敗する
    回避方法はいろいろあるが、コンテナの実行ユーザをホスト側の実行ユーザに指定して実行する3
    MySQL
  • mysqlは、デフォルトの文字コードがlatin1になっているので、utf-8を指定する
    これを指定しないと、Rundeckのジョブ名称や実行コマンドで日本語を使用できない
    mysqld --character-set-server=utf8 --collation-server=utf8_unicode_ci
  • コンテナのタイムゾーンをホストサーバと合わせるために、環境変数にTZ=Asia/Tokyoを指定する1
version: '3.8'

services:
  rundeck:
    image: rundeck/rundeck:5.4.0
    environment:
      RUNDECK_DATABASE_DRIVER: org.mariadb.jdbc.Driver
      RUNDECK_DATABASE_USERNAME: rundeck
      RUNDECK_DATABASE_PASSWORD: rundeck
      RUNDECK_DATABASE_URL: jdbc:mysql://mysql/rundeck?autoReconnect=true&useSSL=false
      RUNDECK_GRAILS_URL: http://<ホストサーバのIPアドレス|ホスト名称>:4440
    volumes:
      - ./rundeck/data:/home/rundeck/server/data
      - ./rundeck/job:/home/rundeck/var/logs/rundeck
      - /etc/localtime:/etc/localtime:ro
      - /etc/passwd:/etc/passwd:ro
      - /etc/group:/etc/group:ro
    user: 1000:1000
    ports:
      - 4440:4440
  mysql:
    image: mysql:5.7
    environment:
      - MYSQL_ROOT_PASSWORD=root
      - MYSQL_DATABASE=rundeck
      - MYSQL_USER=rundeck
      - MYSQL_PASSWORD=rundeck
      - TZ=Asia/Tokyo
    volumes:
      - ./mysqld:/var/lib/mysql
    command: mysqld --character-set-server=utf8 --collation-server=utf8_unicode_ci

起動&ログイン

user@server:/home/com/rundeck$ docker-compose up -d

起動にはしばらく時間がかかるので待つ。

http://<ホストサーバのIPアドレス|ホスト名称>:4440にアクセスする。
下記のログイン画面が表示されたら起動完了
image.png

Username:admin, Password:adminを入力してログイン
下記の画面が表示されれば、ログイン完了
image.png

ジョブ実行の確認

正常に環境構築できたことを確認するために、ジョブの実行を試行する。
ジョブを登録するためには、プロジェクトが必要になるため作成する。

プロジェクトの作成

「Create New Projekut+」を押下して、プレジェクト作成画面に遷移する。
以下の画面でプロジェクトの情報を入力して、「作成」を押下する。
image.png

ジョブの作成

左サイドバーのジョブを押下して、ジョブ管理画面に遷移する。
ジョブ管理画面にて、「新しいジョブを作成」を押下する。
image.png

新規ジョブ作成画面にて、「details」と「Workflow」を設定する。

  1. 「details」タブで、ジョブ名を登録する。
    image.png

2-1. 「Workflow」で、ステップとして「command」を選択する。
image.png

2-2. 「command」に、実行するコマンドを入力する。
入力後、「保存」→「作成」と順に押下する。
image.png

「今すぐジョブを実行」を押下して、登録したコマンドを実行する。
image.png

正常に実行が完了した場合は、以下の画面が表示される。
image.png

無事に実行することができましたら、環境構築は完了です!

参考

rundeck公式 dockerでのインストール
https://docs.rundeck.com/docs/administration/install/docker.html

rundeck公式 docker-composeサンプル
https://github.com/rundeck/docker-zoo

rundeck構成概要
https://docs.rundeck.com/docs/administration/configuration/database/

追記

2024/07/22

  • 実行結果などのログを記録するために永続化するディレクトリが、特定のプロジェクトだけになっていたので修正
  • コンテナ実行ユーザを指定するようにdocker-composeを修正
  1. DockerイメージがAlpineなど、/etc/localtimeも/usr/share/zoneinfo/も存在していない場合は、環境変数TZを指定しても、タイムゾーンは変更されない。
    ホストにある/usr/share/zoneinfo/Asia/Tokyoをコンテナの/etc/localtimeにコピーかマウントすることでタイムゾーンを変更することができる。 2

  2. rundeckのバックアップを rundeck自身で取る
    https://qiita.com/spamoc/items/7b1f62fb3e14cd48d349

  3. Dockerコンテナの実行ユーザーと権限の関係
    https://qiita.com/yitakura731/items/36a2ba117ccbc8792aa7

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?