ToolJet#01 インストール
はじめに
ToolJetの検証を行った際の備忘録です。Budibase、nocobaseと比べるとかなりハマるポイントがありました。
構成
- Windows11(or Windows10)上にWSL2を使ってUbuntu22.04を構築
- Docker環境構築済み
- dockerとdocker-composeコマンドがsudo無しで利用可能
- viコマンドが使える
- ToolJetのバージョンは2.0.2
- 接続先ポートは13001->80にしています。
構成イメージ
今回はA->B間の接続しか設定していません。
A.Windows11のIPアドレスが192.168.10.111だったとした場合、同一ネットワークの192.168.10.121の端末からは今回の設定を行ってもアクセスできません。その接続をできるようにするには、A上で13001ポートを解放(ファイヤウォールから除外)し、Bへ転送する経路が必要です。
図にすると思ったより深くてわかりにくい…
構築手順
ToolJet用ディレクト作成
ホームディレクトを /home/myuser とします。下記の手順でtooljet用のフォルダを作成。
その後、カレントディレクトリを作成したtooljetに移動
cd ~
mkdir tooljet
cd tooljet
必要なファイルの準備
.envの作成
下記のコマンドを実行し、環境設定用ファイルを作成
vi .env
(aキーを押して、入力モードに入る)
(その後、下記のアコーディオン内の内容をクリップボードにコピー)
.env
LOCKBOX_MASTER_KEY,SECRET_KEY_BASEについてはLinux上で生成したキーを使って再設定をオススメします。
設定項目 | キー生成コマンド |
---|---|
LOCKBOX_MASTER_KEY | openssl rand -hex 32 |
SECRET_KEY_BASE | openssl rand -hex 64 |
# Create .env from this example file and replace values for the environment.
# The application expects a separate .env.test for test environment configuration
# Get detailed information about each variable here: https://docs.tooljet.com/docs/setup/env-vars
TOOLJET_HOST=http://localhost
LOCKBOX_MASTER_KEY=5678f86542b2f00be46ddddc8e87cf28e854945d2999987c3bb5b5f4770ca36f
SECRET_KEY_BASE=12345678a8de3e3be1ef49353078282a8b6c290aede9dcf3afa4bec5ff6438dd263c6c79096bf1572784db88dae26915561da42c137e76216c99717446e508e9
# DATABASE CONFIG
ORM_LOGGING=all
PG_DB=tooljet_production
PG_USER=postgres
PG_HOST=postgres
PG_PASS=postgres
# Checks every 24 hours to see if a new version of ToolJet is available
# (Enabled by default. Set 0 to disable)
CHECK_FOR_UPDATES=
# Checks every 24 hours to update app telemetry data to ToolJet hub.
# (Telemetry is enabled by default. Set value to true to disable.)
# DISABLE_APP_TELEMETRY=false
GOOGLE_CLIENT_ID=
GOOGLE_CLIENT_SECRET=
# EMAIL CONFIGURATION
DEFAULT_FROM_EMAIL=hello@tooljet.io
SMTP_USERNAME=
SMTP_PASSWORD=
SMTP_DOMAIN=
SMTP_PORT=
# DISABLE USER SIGNUPS (true or false). Default: true
DISABLE_SIGNUPS=
# OBSERVABILITY
APM_VENDOR=
SENTRY_DNS=
SENTRY_DEBUG=
# FEATURE TOGGLE
COMMENT_FEATURE_ENABLE=
ENABLE_MULTIPLAYER_EDITING=true
#SSO
SSO_DISABLE_SIGNUP=
SSO_RESTRICTED_DOMAIN=
SSO_GOOGLE_OAUTH2_CLIENT_ID=
SSO_GIT_OAUTH2_CLIENT_ID=
SSO_GIT_OAUTH2_CLIENT_SECRET=
(viの編集画面に戻り、右クリック)
(その後、ESCキー押下)
:wq
これで、 .env の作成が完了。
docker-compose.ymlの作成
下記のコマンドを実行し、docker環境構築ファイルを作成
vi docker-compose.yml
(aキーを押して、入力モードに入る)
(その後、下記のアコーディオン内の内容をクリップボードにコピー)
docker-compose.yml
version: '3'
services:
client:
tty: true
stdin_open: true
image: tooljet/tooljet-client-ce:latest
container_name: tooljet-client
restart: always
env_file: .env
depends_on:
- server
volumes:
- ./logs:/var/log/openresty/
- ./certs:/etc/resty-auto-ssl/
- ./fallbackcerts:/etc/fallback-certs
ports:
- 13001:80
- 13443:443
command: openresty -g "daemon off;"
server:
image: tooljet/tooljet-server-ce:latest
container_name: tooljet-server
tty: true
stdin_open: true
restart: always
ports:
- 3000
env_file: .env
environment:
SERVE_CLIENT: "false"
command: npm run start:prod
depends_on:
- postgres
postgres:
image: postgres:13
container_name: tooljet-db
restart: always
ports:
- 5432
volumes:
- ./postgres:/var/lib/postgresql/data
environment:
- POSTGRES_PASSWORD=postgres
(viの編集画面に戻り、右クリック)
(その後、ESCキー押下)
:wq
これで、 docker-compose.yml の作成が完了。
dockerコンテナ生成
ここまで出来たら終わったも同然。カレントディレクトリはそのままで、下記コマンドを1行ずつ実行してください。
docker-compose up -d
docker-compose run server npm run db:seed
PCスペック次第ですが結構時間がかかります。
エラーが出ているのが気になりますが、無視して http://localhost:13001 へアクセスしててください。
稼働確認
この画面が表示されたら無事セットアップ完了です。お疲れ様です。
初期セットアップ
次画面に進むと、
上記のように管理者アカウントの登録になります。Ver2.00から変更されているかもしれません。
今までは下記でログインしていたようです。
email: dev@tooljet.io
password: password
ハマったポイント
ハマったポイントをまとめておきます。
.envの設定箇所が分かりにくい
項目数が多くて、設定が必要なのかどうかわかりにくい
TOOLJET_HOSTはポート番号を指定してはいけない
.env内のTOOLJET_HOSTについて当初、 http://localhost:13001 と指定していましたが、この設定ではToolJetのダッシュボードが表示されません。
コマンドでエラーが発生する
docker-compose run server npm run db:seed
Docker環境構築中に上記コマンドを実行すると…
といった結果になります。
エラーメッセージ全文
$ docker-compose run server npm run db:seed
Creating tooljet_server_run ... done
wait-for-it.sh: waiting 300 seconds for postgres:5432
wait-for-it.sh: postgres:5432 is available after 0 seconds
> tooljet@1.18.0 db:setup:prod /app
> npm --prefix server run db:setup:prod
> server@0.0.1 db:setup:prod /app/server
> npm run db:create:prod && npm run db:migrate:prod
> server@0.0.1 db:create:prod /app/server
> node dist/scripts/create-database.js
Picking up config from the environment
Using Application database
PG_DB: tooljet_production
PG_HOST: postgres
> server@0.0.1 db:migrate:prod /app/server
> node ./node_modules/typeorm/cli.js migration:run --config dist/ormconfig.js && npm run db:migrate:data:prod
query: SELECT * FROM current_schema()
query: CREATE EXTENSION IF NOT EXISTS "pgcrypto"
query: SHOW server_version;
query: SELECT * FROM "information_schema"."tables" WHERE "table_schema" = 'public' AND "table_name" = 'migrations'
query: SELECT * FROM "information_schema"."tables" WHERE "table_schema" = 'public' AND "table_name" = 'typeorm_metadata'
query: SELECT * FROM "migrations" "migrations" ORDER BY "id" DESC
92 migrations are already loaded in the database.
57 migrations were found in the source code.
addDataSourceType1671815159504 is the last executed migration. It was executed on Fri Dec 23 2022 17:05:59 GMT+0000 (Coordinated Universal Time).
1 migrations are new migrations that needs to be executed.
query: START TRANSACTION
query: DELETE FROM migrations where name = 'LockMigrationsTable1234567890000'
query: LOCK TABLE migrations;
query: INSERT INTO "migrations"("timestamp", "name") VALUES ($1, $2) -- PARAMETERS: [1234567891000,"LockMigrationsTable1234567891000"]
Migration LockMigrationsTable1234567891000 has been executed successfully.
query: COMMIT
> server@0.0.1 db:migrate:data:prod /app/server
> node ./node_modules/typeorm/cli.js migration:run --config dist/data-migration-config.js
query: SELECT * FROM current_schema()
query: CREATE EXTENSION IF NOT EXISTS "pgcrypto"
query: SHOW server_version;
query: SELECT * FROM "information_schema"."tables" WHERE "table_schema" = 'public' AND "table_name" = 'migrations'
query: SELECT * FROM "information_schema"."tables" WHERE "table_schema" = 'public' AND "table_name" = 'typeorm_metadata'
query: SELECT * FROM "migrations" "migrations" ORDER BY "id" DESC
92 migrations are already loaded in the database.
38 migrations were found in the source code.
addDataSourceType1671815159504 is the last executed migration. It was executed on Fri Dec 23 2022 17:05:59 GMT+0000 (Coordinated Universal Time).
1 migrations are new migrations that needs to be executed.
query: START TRANSACTION
query: DELETE FROM migrations where name = 'LockMigrationsTable1234567891000'
query: LOCK TABLE migrations;
query: INSERT INTO "migrations"("timestamp", "name") VALUES ($1, $2) -- PARAMETERS: [1234567890000,"LockMigrationsTable1234567890000"]
Migration LockMigrationsTable1234567890000 has been executed successfully.
query: COMMIT
> tooljet@1.18.0 db:seed /app
> npm --prefix server run db:seed
> server@0.0.1 db:seed /app/server
> ts-node -r tsconfig-paths/register --transpile-only ./scripts/seeds.ts
Couldn't find tsconfig.json. tsconfig-paths will be skipped
Error: Cannot find module '../src/app.module'
Require stack:
- /app/server/scripts/seeds.ts
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:902:15)
at Function.Module._load (internal/modules/cjs/loader.js:746:27)
at Module.require (internal/modules/cjs/loader.js:974:19)
at require (internal/modules/cjs/helpers.js:92:18)
at Object.<anonymous> (/app/server/scripts/seeds.ts:2:1)
at Module._compile (internal/modules/cjs/loader.js:1085:14)
at Module.m._compile (/app/server/node_modules/ts-node/src/index.ts:1295:23)
at Module._extensions..js (internal/modules/cjs/loader.js:1114:10)
at Object.require.extensions.<computed> [as .ts] (/app/server/node_modules/ts-node/src/index.ts:1298:12) at Module.load (internal/modules/cjs/loader.js:950:32)
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! server@0.0.1 db:seed: `ts-node -r tsconfig-paths/register --transpile-only ./scripts/seeds.ts`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the server@0.0.1 db:seed script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! /root/.npm/_logs/2023-01-20T10_01_45_592Z-debug.log
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! tooljet@1.18.0 db:seed: `npm --prefix server run db:seed`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the tooljet@1.18.0 db:seed script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! /root/.npm/_logs/2023-01-20T10_01_45_604Z-debug.log
が!、気にせず http://localhost:13001 にアクセスすると正常に表示されます。
お手軽お試しモードが起動しない
Try ToolJet with Dockerで紹介されている、お手軽お試しモードの下記コマンドですが…
docker run \
--name tooljet \
--restart unless-stopped \
-p 3000:3000 \
-v tooljet_data:/var/lib/postgresql/13/main \
tooljet/try:latest
ブラウザに下記テキストが表示されて終了します。
{"code":"PGRST302","details":null,"hint":null,"message":"Anonymous access is disabled"}
2023/01/20時点ではまだ直っていないようなので、お試しモードはやめたほうが良いです。
Ver2.0.2でMariaDBへの接続は怪しい
これはセットアップ完了後の話ですが、ToolJetからMariaDBに接続したところ、コネクションプールをMAXまで使い切ってしまい、正常に動作しなくなる現象を確認しました。
その後、Postgresで同様の検証をしたところ問題なく動作しましたので、MariaDB固有の問題かもしれません。いまはMariaDBへの接続は避けたほうがよさそうです。
私の環境では接続したシステムがコネクションプール上限のため起動できなくなりましたので、業務システムのDBに接続するのは慎重に。
本体利用しているPostgres内にテスト用のDBを作成するのが安心かと思います。
Discussion