らくがきちょう

なんとなく ~所属組織/団体とは無関係であり、個人の見解です~

Rocky Linux8 へ digdag をインストールする

Rocky Linux8 に digdag をインストールする手順をメモしておきます。

作業の流れ

作業は以下の流れで行います。

  1. digdag のバックエンドで利用している為、PostgreSQL をインストールします。
  2. digdag は Java で動作する為、JDK をインストールします。
  3. digdag 本体をインストールします。
  4. (任意) digdag へのアクセスを Proxy させる為に、フロントへ Nginx をインストールします。

PostgreSQL

PostgreSQL をセットアップしていきます。

インストール

PostgreSQL をインストールします。

dnf -y install postgresql-server postgresql-contrib
postgresql-setup initdb
systemctl start postgresql
systemctl enable postgresql

postgres ユーザのパスワード設定

postgres ユーザへパスワードを設定しておきます。

sudo su - postgres
psql
alter user postgres with password 'PASSWORD';
\q
exit

実際の作業ログは以下の通りです。

# sudo su - postgres
$ psql
psql (10.17)
Type "help" for help.

postgres=# alter user postgres with password 'PASSWORD';
ALTER ROLE
postgres=# \q
$ exit
#

認証設定の変更

認証の設定を変更しておきます。 /var/lib/pgsql/data/pg_hba.conf を以下のように変更します (peeridentmd5 へ変更します)。

変更前

# "local" is for Unix domain socket connections only
local   all             all                                     peer
# IPv4 local connections:
host    all             all             127.0.0.1/32            ident
# IPv6 local connections:
host    all             all             ::1/128                 ident

変更後

# "local" is for Unix domain socket connections only
local   all             all                                     md5
# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
# IPv6 local connections:
host    all             all             ::1/128                 md5

設定が完了したら PostgreSQL を再起動し、設定変更を反映します。

systemctl restart postgresql

digdag 用ユーザとデータベースの作成

digdag で利用するユーザとデータベースを作成します。 postgres ユーザでログインします。 設定済みのパスワードを設定します。

psql -U postgres

実際の作業ログは以下の通りです。

# psql -U postgres
Password for user postgres: PASSWORD

digdag 用のユーザとデータベースを作成します。

CREATE ROLE digdag WITH PASSWORD 'PASSWORD' NOSUPERUSER NOCREATEDB NOCREATEROLE LOGIN;
CREATE DATABASE digdag_db WITH OWNER digdag;

実際の作業ログは以下の通りです。

postgres=# CREATE ROLE digdag WITH PASSWORD 'PASSWORD' NOSUPERUSER NOCREATEDB NOCREATEROLE LOGIN;
CREATE ROLE
postgres=# CREATE DATABASE digdag_db WITH OWNER digdag;
CREATE DATABASE

uuid-ossp 拡張機能を有効化しておきます。 uuid-ossp は公式サイトで以下のように記載されています。

uuid-osspモジュールは複数の標準的なアルゴリズムの1つを使用して汎用一意識別子(UUID)を生成する関数を提供します。 また、特殊なUUID定数を生成する関数も提供します。

\c digdag_db;
CREATE EXTENSION "uuid-ossp";
\q

実際の作業ログは以下の通りです。

postgres=# \c digdag_db;
You are now connected to database "digdag_db" as user "postgres".
digdag_db=# CREATE EXTENSION "uuid-ossp";
CREATE EXTENSION
digdag_db=# \q

JDK

digdag は Java で書かれている為、JDK をインストールしておきます。

dnf -y install java-11-openjdk

digdag

digdag をセットアップします。

digdag 用ユーザとグループの作成

digdag をサービスとして動作させる際に利用するユーザとグループを作成しておきます。 -r オプションを指定し、システムアカウントとして作成します。

groupadd -r digdag
useradd -r -g digdag -s /sbin/nologin digdag

インストール

digdag をインストールします。

curl -L https://dl.digdag.io/digdag-latest -o /usr/local/bin/digdag
chmod +x /usr/local/bin/digdag

現時点ではバージョン 0.10.3 がインストールされました。

# digdag --version
OpenJDK 64-Bit Server VM warning: Option AggressiveOpts was deprecated in version 11.0 and will likely be removed in a future release.
0.10.3

digdag の設定

digdag の設定を行っています。 まず /etc/digdag/digdag.properties にデータベースへ接続する為の設定を行います。

mkdir /etc/digdag
cat << 'EOF' > /etc/digdag/digdag.properties
database.type = postgresql
database.host = localhost
database.port = 5432
database.user = digdag
database.password = PASSWORD
database.database = digdag_db
database.maximumPoolSize = 20
EOF

/etc/sysconfig/digdag-server に digdag をサーバとして起動する際の設定を行います。

cat << 'EOF' > /etc/sysconfig/digdag-server
CONFIG_FILE=/etc/digdag/digdag.properties
PORT=65432
BINDING=0.0.0.0
ACCESS_LOG=/var/log/digdag-server/access
TASK_LOG=/var/log/digdag-server/task
EOF

digdag を systemd でデーモンとして動作させる為の Unit ファイルを作成します。

cat << 'EOF' > /usr/lib/systemd/system/digdag-server.service
[Unit]
Description=Digdag server daemon
After=network.target postgresql.service

[Service]
User=digdag
EnvironmentFile=/etc/sysconfig/digdag-server
ExecStart=/usr/bin/java -jar /usr/local/bin/digdag server -n ${PORT} -b ${BINDING} -O ${TASK_LOG} -A ${ACCESS_LOG} -c ${CONFIG_FILE}
ExecStop=/bin/kill -s SIGTERM ${MAINPID}

[Install]
WantedBy=multi-user.target
EOF

新規作成した Unit ファイルを読み込みます。

systemctl daemon-reload

ログディレクトリの作成

ログディレクトリを作成しておきます。 ログディレクトリは /etc/sysconfig/digdag-server で設定済みです。

mkdir -p /var/log/digdag-server/access /var/log/digdag-server/task
chown -R digdag:digdag /var/log/digdag-server

デーモンの起動

デーモンを起動します。 あわせて自動起動設定も実施しておきます。

systemctl start digdag-server
systemctl enable digdag-server

WebUI へのアクセス

この状態でも http://[ADDRESS]:65432/ へアクセスすることで digdag の WebUI へアクセスすることが出来ます。

f:id:sig9:20211128164048p:plain

Nginx

ここからは任意部分です。 digdag へのアクセスを Proxy させる Nginx をインストールします。

インストール

Nginx のリポジトリを設定します。

cat << 'EOF' > /etc/yum.repos.d/nginx.repo
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
EOF

リポジトリの設定が完了したらパッケージマネージャでインストールします。

dnf install -y nginx

Proxy の設定

digdag 用の Proxy 設定は Nginx デフォルト設定ファイルとは別に行う方針で作業します。 その為、Nginx デフォルトの設定ファイルは移動し、Nginx から参照されないようにします。

mv /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf.org

/etc/nginx/conf.d/digdag.conf に digdag 用の Proxy 設定を行います。

cat << 'EOF' > /etc/nginx/conf.d/digdag.conf
upstream digdag_server {
  server localhost:65432;
}

server {
  listen 80 default_server;

  location / {
    proxy_pass http://digdag_server;
  }
}
EOF

デーモンの起動

デーモンを起動します。 あわせて自動起動設定も実施しておきます。

systemctl start nginx
systemctl enable nginx

WebUI へのアクセス

これで http://[ADDRESS] へアクセスすることで (Nginx を経由して) digdag の WebUI へアクセスすることが出来るようになりました。

f:id:sig9:20211128164059p:plain