ラズパイ で Rundeck Community を 動かしてみた
クラウドでもなくローカルでもない場所ということで、ラズパイで動かすことを考えてみました。
結果4B(メモリ4GB)では、なんとか動作することが確認できました。
- 利用したラズパイ : Raspberry Pi 4B (4GB)
- ラズパイのOS : Raspberry Pi OS with desktop
- 導入したRundeck : Rundeck Community 4.8.0
本格的に使うには、8GBは最低限欲しいかなぁ(バックエンドにMySQLなども必要だし)
導入情報
公式の Debian 情報みながら Rundeck Community を導入します。
- https://www.rundeck.com/community-downloads/4.8.0
- https://docs.rundeck.com/docs/history/4_x/version-4.8.0.html
一つだけ依存関係のパッケージ (uuid-runtime) が不足してたので、そのあたりを補って導入。
rundeck本体は、deb状態で 230MB程度あります。
wget https://packagecloud.io/pagerduty/rundeck/packages/any/any/rundeck_4.8.0.20221110-1_all.deb/download.deb -O rundeck_4.8.0.20221110-1_all.deb
apt-get install openjdk-8-jdk-headless uuid-runtime
dpkg -i rundeck_4.8.0.20221110-1_all.deb
昔はリポジトリ提供があったのですが、いまは無いのかな? (Enterprise版は提供つづいてる)
起動 と ログ
導入直後はサービス落ちたままなので、コマンドいれて立ち上げます
## デーモン起動
$ sudo systemctl status rundeckd
## 自動起動を設定 (お好みで)
$ sudo systemctl enable rundeckd
起動時間 300秒ぐらいかかりますので、気長に待ちましょう (汗
個人的なオススメは、 service.log を tail / less で自動読み込みしておく。もれなくエラーがでてると、すぐ気づけますし。
このログに "running at http://localhost:4440" が出たら、WebUIがちゃんと反応してくれます。
ログの例
## /var/log/rundeck/service.log
...
[Development Mode] Usage of H2 database is recommended only for development and testing
INFO rundeckapp.BootStrap - Rundeck startup finished in 5688ms
INFO rundeckapp.Application - Started Application in 321.211 seconds (JVM running for 353.955)
Grails application running at http://localhost:4440 in environment: production
localhost:4440 で動きます
Rundeckのデフォルトは localhost , ポート番号 4440 で動いてます。
僕がはまったのは、LAN、WANアドレスでも、WebUIのログイン画面はでます (例: http://192.168.100.123:4440)。
ですが、ログイン後に localhost:4440 にリダイレクトされるので、実質動作しません。
ラズパイで使う場合、ラズパイにVNCしてRundeckのWebUIというケースは、あまり無いかなと思います。
対応1 : 設定ファイルで変更
公式 System Properties Configuration を参考に。
次のファイルを編集。
その1。'http://localhost:4440' の部分を、自分が望むIP・FQDNとポート番号に変更します
- /etc/rundeck/rundeck-config.properties
- grails.serverURL = http://localhost:4440
- /etc/rundeck/framework.properties
- framework.server.url = http://localhost:4440
その2。待受ポート番号の変更を行います。
環境変数 RDECK_JVM の中 で -Dserver.http.port=$RDECK_HTTP_PORT で設定されます。
- /etc/rundeck/profile
- RDECK_HTTP_PORT=<任意ポート番号> を RDECK_JVM よりも前に設定
設定したら、 rundeckd をリスタートします。
対応2 : nginxでリバースプロキシ
個人的には、後述のように nginx をリバースプロキシで設定するのがオススメ。
ポート番号の変更も手軽です。
H2 データベース で動いてます
インストール直後のバックエンドは H2データベース (Java内蔵?) で開発用途となっています。
本番利用や大量のジョブを仕込むときは、 H2からMySQLへの変更などが必要です。
ジョブ自体は、プロジェクト毎にGitHubなどに連動が可能。
ただ、DBマイグレーションは、なさそう。
過去の実行ログなどを捨てれば、運用後にも移行はできそうではあるかな。
nginx リバースプロキシ で動作させる
公式の情報をもとに、対応するといいかと思います。
SSL対応も Rundeck内蔵Webサーバーで可能ですが、その場合にも、nginxで管理したほうが楽じゃないでしょうか?
nginx側の設定
/etc/nginx/site-available/default への追記をする場合だと、こんな感じでいけるかな。
設定したら nginx をリロード (# systemctl reload nginx) します。
server {
listen 80 default_server;
listen [::]:80 default_server;
location / {
proxy_pass http://localhost:4440;
proxy_set_header X-Forwarded-Host $host:$server_port;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
Rundeck側の設定
次の2ファイルを編集します。
'http://localhost:4440' の部分を 'http://192.168.100.123' のように、nginxでホストするIPアドレスFQDNに変更します。
これらのファイルを編集しなくても一見動いてるように見えますが、WebUIの内部APIコールに失敗して、プラグインが読み込めないなどの副作用が出てしまいます(僕が、はまりました。。)
- /etc/rundeck/rundeck-config.properties
- grails.serverURL = http://localhost:4440
- /etc/rundeck/framework.properties
- framework.server.url = http://localhost:4440
設定したら、 rundeckd をリスタート (# systemctl restart rundeckd) します。
WebUI ログイン後
ダークモードにも対応してた!
その他
起動後のパフォーマンス
ジョブゼロの状態で、WebUIにログインしたときに取得しました。
なお、ベースは Raspbian Desktop なので、Xも動いてます。。。 (最適化は、手抜きした)
## メモリ と TOP
$ free
total used free shared buff/cache available
Mem: 3930868 691396 2764040 33032 475432 3078440
Swap: 102396 0 102396
$ top
top - 19:25:38 up 13 min, 3 users, load average: 0.07, 0.33, 0.33
Tasks: 159 total, 1 running, 158 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.2 us, 0.2 sy, 0.0 ni, 99.6 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
MiB Mem : 3838.7 total, 2642.6 free, 726.4 used, 469.8 buff/cache
MiB Swap: 100.0 total, 100.0 free, 0.0 used. 2954.9 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
492 rundeck 20 0 1320932 625624 17168 S 57.6 15.9 7:21.08 java
...
ラズパイ情報
Raspberry Pi 4B (4GB) を使ってます
pinout コマンド知らなかったけど、ピンアサイン見れるのは便利 !!
$ pinout
...
Revision : c03112
SoC : BCM2711
RAM : 4GB
Storage : MicroSD
USB ports : 4 (of which 2 USB3)
Ethernet ports : 1 (1000Mbps max. speed)
Wi-fi : True
Bluetooth : True
Camera ports (CSI) : 1
Display ports (DSI): 1
$ lsb_release -a
No LSB modules are available.
Distributor ID: Raspbian
Description: Raspbian GNU/Linux 10 (buster)
Release: 10
Codename: buster
参考
Discussion