LoginSignup
2
1

JS7® JobScheduler docker-compose で起動(MySQL版)

Last updated at Posted at 2022-03-19

概要

JS7 jobscheduler を手っ取り早く触りたい人向け
docker-composeでの実行方法

準備

必要なファイル、ディレクトリを準備します。

docker-compose.yml

docker-compose.yml
version: '3'

services:

  db:
    image: mysql:8.0
    ports:
      - "3306:3306"
    command:
      - --default-authentication-plugin=caching_sha2_password
      - --character-set-server=utf8mb4
      - --collation-server=utf8mb4_bin
      - --skip-character-set-client-handshake
    volumes:
      - db_data:/var/lib/mysql
    networks:
      - js7network
    environment:
      MYSQL_ROOT_PASSWORD: iLoveMySQL8.0!
      MYSQL_DATABASE: js7db
      MYSQL_USER: js7user
      MYSQL_PASSWORD: js7password
    restart: "no"

  js7-joc-primary:
    depends_on:
      - db
    image: sosberlin/js7:joc-${JS7VERSION}
    hostname: js7-joc-primary
    ports:
      - "4446:4446"
    volumes:
      - js7-joc-primary-config:/var/sos-berlin.com/js7/joc/resources/joc
      - js7-joc-primary-logs:/var/log/sos-berlin.com/js7/joc
    networks:
      - js7network
    environment:
      RUN_JS_JAVA_OPTIONS: -Xmx256m
      RUN_JS_USER_ID: "${JS7USERID}:${JS7GROUPID}"
    restart: "no"

  js7-controller-primary:
    image: sosberlin/js7:controller-${JS7VERSION}
    hostname: js7-controller-primary
    volumes:
      - js7-controller-primary:/var/sos-berlin.com/js7/controller
    networks:
      - js7network
    environment:
      RUN_JS_JAVA_OPTIONS: -Xmx256m
      RUN_JS_USER_ID: "${JS7USERID}:${JS7GROUPID}"
    restart: "no"

  js7-agent-primary:
    image: sosberlin/js7:agent-${JS7VERSION}
    hostname: js7-agent-primary
    volumes:
      - js7-agent-primary:/var/sos-berlin.com/js7/agent/
    networks:
      - js7network
    environment:
      RUN_JS_JAVA_OPTIONS: -Xmx256m
      RUN_JS_USER_ID: "${JS7USERID}:${JS7GROUPID}"
    restart: "no"

volumes:

  db_data:
    driver: local
    driver_opts:
      type: none
      device: ${PWD}/db_data
      o: bind

  js7-joc-primary-config:
    driver: local
    driver_opts:
      type: none
      device: ${PWD}/js7-joc-primary-config
      o: bind

  js7-joc-primary-logs:
    driver: local
    driver_opts:
      type: none
      device: ${PWD}/js7-joc-primary-logs
      o: bind

  js7-controller-primary:
    driver: local
    driver_opts:
      type: none
      device: ${PWD}/js7-controller-primary
      o: bind

  js7-agent-primary:
    driver: local
    driver_opts:
      type: none
      device: ${PWD}/js7-agent-primary
      o: bind

networks:
  js7network:

ver 2.5.2 より、controller, agentのvolume指定パスが変更となっています。
本ページ下部に、ver 2.5.1 までの docker-compose.yml の例を残してありますので、利用バージョンによってはそちらを参照してください。

hibernate.cfg.xml

hibernate.cfg.xml
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<hibernate-configuration>
 <session-factory>
  <property name="hibernate.connection.driver_class">org.mariadb.jdbc.Driver</property>
  <property name="hibernate.connection.password">js7password</property>
  <property name="hibernate.connection.url">jdbc:mariadb://db:3306/js7db?allowPublicKeyRetrieval=true&amp;useSSL=false</property>
  <property name="hibernate.connection.username">js7user</property>
  <property name="hibernate.dialect">org.hibernate.dialect.MySQLInnoDBDialect</property>
  <property name="hibernate.show_sql">false</property>
  <property name="hibernate.connection.autocommit">false</property>
  <property name="hibernate.format_sql">true</property>
  <property name="hibernate.temp.use_jdbc_metadata_defaults">false</property>
  <property name="hibernate.connection.provider_class">org.hibernate.hikaricp.internal.HikariCPConnectionProvider</property>
  <property name="hibernate.hikari.maximumPoolSize">10</property>
 </session-factory>
</hibernate-configuration>

.env (環境変数用) ※バージョンは任意

echo -e "JS7USERID=$(id -u)\nJS7GROUPID=0\nJS7VERSION=2-5-7" > .env

# 確認
cat .env
JS7USERID=1000
JS7GROUPID=1000
JS7VERSION=2-5-7

ディレクトリ

mkdir db_data
mkdir js7-agent-primary
mkdir js7-controller-primary
mkdir js7-joc-primary-config
mkdir js7-joc-primary-logs

ここまでで、下記のような構成になります。

.
├── .env
├── db_data
├── docker-compose.yml
├── hibernate.cfg.xml
├── js7-agent-primary
├── js7-controller-primary
├── js7-joc-primary-config
└── js7-joc-primary-logs

コンテナ起動

まずコンテナを起動

$ docker compose up -d

# 確認
$ docker compose ps
NAME                            COMMAND                  SERVICE                  STATUS              PORTS
js7-db-1                        "docker-entrypoint.s…"   db                       running             0.0.0.0:3306->3306/tcp, 33060/tcp
js7-js7-agent-primary-1         "sh /usr/local/bin/e…"   js7-agent-primary        running
js7-js7-controller-primary-1    "sh /usr/local/bin/e…"   js7-controller-primary   running
js7-js7-joc-primary-1           "sh /usr/local/bin/e…"   js7-joc-primary          running             0.0.0.0:4446->4446/tcp

hibernate.cfg.xmlをVolumeマウント先に上書きコピー (インストール時に使用します)

cp -f hibernate.cfg.xml js7-joc-primary-config/

js7-joc-primary にて 上記ファイルを指定してインストール

docker compose exec js7-joc-primary /bin/sh -c /opt/sos-berlin.com/js7/joc/install/joc_install_tables.sh

# ログ確認
ls -l js7-joc-primary-logs/

# js7-joc-primary のみ再起動
docker compose restart js7-joc-primary

動作チェック

あとは、ブラウザで js7-joc-primary にて指定したポート番号にアクセスしてください。
http://localhost:4446/
※初期ユーザーは Account: root / password: root です
login.png

初回ログイン直後は、Controllerの登録画面が出てきますので、登録を行ってください。
本例では http://js7-controller-primary:4444 です。
add_controller.png

次にエージェントの登録を行います。

もし画面が分からなくなった場合はこちらからManager/Agentの登録・編集画面が開けます。
image.png

Add Standalone Agent 開く
image.png

必要項目を入力して、登録してください。
image.png
Agent ID: js7-agent-primary(ホスト名でよい)
Agent Name: js7-agent-primary(ホスト名でよい)
Title: Descriptionにあたるもの(空でもよい)
Alias Names: 任意(空でもよい) ※本例ではサンプルデータ利用のためにprimaryAgent とします。
URL: 本例ではhttp://js7-agent-primary:4445 となります。

(Ver 2.3.x からの変更点 )
さらに登録したエージェントをDeployしてください。
これで本エージェントは利用可能となります。
image.png
Statusが synchronized に変わります。
image.png

ダッシュボードを見ると、Controller, Agent, DB などの稼働状況を確認できます。
dashboard.png

参考 agent-plus イメージについて

エージェント用のDockerイメージには、通常のエージェント以外にも、PowerShell、JS7モジュールを追加した、agent-plusイメージも提供されています。
もしPowerShellの利用に慣れている方は、こちらをお勧めします。

既に通常エージェントで構築した後でも、イメージの指定をsosberlin/js7:agent-${JS7VERSION}-plusと書き換えて起動しなおせば、すぐに反映できます。

docker-compose.yml
version: '3'

services:
# (省略)
  js7-agent-primary:
-   image: sosberlin/js7:agent-${JS7VERSION}
+   image: sosberlin/js7:agent-${JS7VERSION}-plus
    hostname: js7-agent-primary
# (省略)

参考 アップデート時の対応

# もし稼働中の場合は一旦停止
docker compose stop

# .env を 新バージョン用に書き換え
echo -e "JS7USERID=$(id -u)\nJS7GROUPID=$(id -g)\nJS7VERSION=2-x-x" > .env

# joc,controllr,agent とも起動したことを確認
docker compose up -d
docker compose ps

# もしうまく起動しない場合は、コンテナ、ボリュームを削除し、起動し直してください
# ボリュームを削除しても、マウント先データは消えないので、設定は残ります
docker compose down -v
docker compose up -d
docker compose ps

# (db変更反映のため)上書きインストール実行
cp -f hibernate.cfg.xml js7-joc-primary-config/
docker compose exec js7-joc-primary /bin/sh -c /opt/sos-berlin.com/js7/joc/install/joc_install_tables.sh
docker compose restart js7-joc-primary

参考 docker-compose.yml ver 2.5.1まで

ver 2.5.2 より、controller, agentのvolume指定パスが変更となったため、念のため ver 2.5.1 までのファイルもしばらく残します。

docker-compose.yml
version: '3'

services:

  db:
    image: mysql:8.0
    command: --default-authentication-plugin=mysql_native_password
    volumes:
      - db_data:/var/lib/mysql
    networks:
      - js7network
    environment:
      MYSQL_ROOT_PASSWORD: iLoveMySQL8.0!
      MYSQL_DATABASE: js7db
      MYSQL_USER: js7user
      MYSQL_PASSWORD: js7password
    restart: "no"

  js7-joc-primary:
    depends_on:
      - db
    image: sosberlin/js7:joc-${JS7VERSION}
    hostname: js7-joc-primary
    ports:
      - "4446:4446"
    volumes:
      - js7-joc-primary-config:/var/sos-berlin.com/js7/joc/resources/joc
      - js7-joc-primary-logs:/var/log/sos-berlin.com/js7/joc
    networks:
      - js7network
    environment:
      RUN_JS_JAVA_OPTIONS: -Xmx256m
      RUN_JS_USER_ID: "${JS7USERID}:${JS7GROUPID}"
    restart: "no"

  js7-controller-primary:
    image: sosberlin/js7:controller-${JS7VERSION}
    hostname: js7-controller-primary
    volumes:
      - js7-controller-primary:/var/sos-berlin.com/js7/controller/var
    networks:
      - js7network
    environment:
      RUN_JS_JAVA_OPTIONS: -Xmx256m
      RUN_JS_USER_ID: "${JS7USERID}:${JS7GROUPID}"
    restart: "no"

  js7-agent-primary:
    image: sosberlin/js7:agent-${JS7VERSION}
    hostname: js7-agent-primary
    volumes:
      - js7-agent-primary:/var/sos-berlin.com/js7/agent/var_4445
    networks:
      - js7network
    environment:
      RUN_JS_JAVA_OPTIONS: -Xmx256m
      RUN_JS_USER_ID: "${JS7USERID}:${JS7GROUPID}"
    restart: "no"

volumes:

  db_data:
    driver: local
    driver_opts:
      type: none
      device: ${PWD}/db_data
      o: bind

  js7-joc-primary-config:
    driver: local
    driver_opts:
      type: none
      device: ${PWD}/js7-joc-primary-config
      o: bind

  js7-joc-primary-logs:
    driver: local
    driver_opts:
      type: none
      device: ${PWD}/js7-joc-primary-logs
      o: bind

  js7-controller-primary:
    driver: local
    driver_opts:
      type: none
      device: ${PWD}/js7-controller-primary
      o: bind

  js7-agent-primary:
    driver: local
    driver_opts:
      type: none
      device: ${PWD}/js7-agent-primary
      o: bind

networks:
  js7network:

参考 MySQL 8.0 mysql_native_password 利用時の設定方法

本記事では、以前はmysql_native_passwordで記載していましたので、そちらを利用する場合の設定も残します。
※MySQL 8.0.34 以降で、認証Plugin mysql_native_password 利用時にログに警告が出るようになりました。いずれ廃止される見込みです。

docker-compose.yml
# default-authentication-pluginをmysql_native_passwordに変更
db:
    image: mysql:8.0
    ports:
      - "3306:3306"
    command:
-      - --default-authentication-plugin=caching_sha2_password
+      - --default-authentication-plugin=mysql_native_password
      - --character-set-server=utf8mb4
      - --collation-server=utf8mb4_bin
      - --skip-character-set-client-handshake
hibernate.cfg.xml
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<hibernate-configuration>
 <session-factory>
  <property name="hibernate.connection.driver_class">org.mariadb.jdbc.Driver</property>
  <property name="hibernate.connection.password">js7password</property>
-  <property name="hibernate.connection.url">jdbc:mariadb://db:3306/js7db?allowPublicKeyRetrieval=true&amp;useSSL=false</property>
+  <property name="hibernate.connection.url">jdbc:mariadb://db:3306/js7db</property>
  <property name="hibernate.connection.username">js7user</property>
  <property name="hibernate.dialect">org.hibernate.dialect.MySQLInnoDBDialect</property>
  <property name="hibernate.show_sql">false</property>
  <property name="hibernate.connection.autocommit">false</property>
  <property name="hibernate.format_sql">true</property>
  <property name="hibernate.temp.use_jdbc_metadata_defaults">false</property>
  <property name="hibernate.connection.provider_class">org.hibernate.hikaricp.internal.HikariCPConnectionProvider</property>
  <property name="hibernate.hikari.maximumPoolSize">10</property>
 </session-factory>
</hibernate-configuration>

2
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
2
1