低代码开源系统tooljet 搭建部署踩坑分享,docker部署的来看看

背景环境介绍:
不太清楚的看看这个文档的介绍
https://docs.tooljet.com/docs/getting-started/platform-overview
这就是个开源的低代码平台,我主要讲一下这次搭建的时候踩坑的经历

1.我没用它docker 自带的数据库,我自己系统上单独安装的redis和pgsql,我的redis是5.0.3,我的pgsql是13.18版本,我用的docker安装tooljet这个项目
2.他给的安装文档是这样的:https://docs.tooljet.com/docs/setup/docker。我参考的是:使用外部 PostgreSQL这一块
3.我用的华为云服务器,通外网
背景环境介绍完后我说一下我都遇到了什么坑

坑点介绍:
1.他的文档介绍这里说了一句话:
(可选) TOOLJET_HOST环境变量可以是您服务器的公共 ipv4 地址,也可以是您想要使用的自定义域。可以在 .env 文件中进行修改。这前面加了个可选,但是如果你不把这个变量写到你的.env文件的话,会出一个错误

Please migrate your code to use AWS SDK for JavaScript (v3). For more information,
check blog post at https://a.co/cUPnyil (Use `node --trace-warnings ...` to show where the warning was created) CONNECTION_INSTANCE initialized node:internal/errors:496 ErrorCaptureStackTrace(err);
^ TypeError [ERR_INVALID_URL]: Invalid URL
at new NodeError (node:internal/errors:405:5)
at new URL (node:internal/url:637:13)
at setSecurityHeaders (/app/server/dist/src/main.js:43:18)
at bootstrap (/app/server/dist/src/main.js:148:5)
at process.processTicksAndRejections (node:internal/process/task_queues:95:5) { input: 'undefined', code: 'ERR_INVALID_URL' }

所以我认为必须配置

2.检查一下你的安全设置或者防火墙有没有放以下几个端口:
a. pgsql的5432端口
b. redis的6379端口
c. 你从它的官网下来的yaml文件中,docker暴露出来的端口,例如我是8087

3.你要注意你运行它的容器时,pgsql里面会多出来两个数据库,一个是叫应用数据库在环境变量里用 PG_DB 表示,还有个叫DB数据库,环境变量用 TOOLJET_DB 表示,此外你要注意有个叫 PGRST_DB_URI的环境变量是设置应用数据库连接的,比如这么写=postgres://你的数据库用户名:你的数据库用户密码@你的数据库HOST:你的数据库PORT/你的应用数据库名称,和PG_DB这个值一样的
那么为啥分两个数据库呢,AI的解释是:
1. 数据隔离
应用数据库和 DB 数据库的分离有助于实现数据隔离。这种隔离可以提高数据的安全性,防止不同类型的数据相互干扰。例如,ToolJet 可能使用应用数据库来存储应用配置信息和用户数据,而使用 DB 数据库来存储系统级数据和元数据。

2. 性能优化
不同类型的数据和操作可能对数据库的性能有不同的要求。通过分离应用数据库和 DB 数据库,可以针对不同的需求进行优化。例如,可以为频繁访问的数据配置高性能的存储和索引,而为系统级数据配置更安全的存储策略。

3. 可扩展性
分离数据库使得系统具有更好的可扩展性。当应用需求增加时,可以独立扩展应用数据库或 DB 数据库,而不会影响其他部分的性能和稳定性。

4. 管理和维护
分离数据库有助于更容易地管理和维护系统。例如,在进行数据库备份、恢复或迁移时,可以单独处理应用数据库或 DB 数据库,而不会影响整个系统。


4.redis你从他官网下来的那个yaml文件给的版本是6+,如果你也用老的版本。你就把它用户那块的配置给删了,留这两个:

- MASTER=${REDIS_HOST}
- REDIS_PASSWORD=${REDIS_PASSWORD}

就够了

5.你最好 显示的把你的环境变量文件的值加入到yaml文件,像我这样,

复制代码
tooljet:
tty: true
stdin_open: true
container_name: Tooljet-app
image: tooljet/tooljet:ee-lts-latest
restart: always
env_file: .env
deploy: # Please adjust the resource according to your usecase
resources:
limits:
cpus: '1'
memory: 2G
ports:
- 8087:8087

environment:
SERVE_CLIENT: "true"
PORT: "8087"
LOCKBOX_MASTER_KEY: ${LOCKBOX_MASTER_KEY}
SECRET_KEY_BASE: ${SECRET_KEY_BASE}
PGRST_JWT_SECRET: ${PGRST_JWT_SECRET}
TOOLJET_DB: ${TOOLJET_DB}
PG_USER: ${PG_USER}
PG_HOST: ${PG_HOST}
PG_PASS: ${PG_PASS}
PG_DB: ${PG_DB}
PG_PORT: ${PG_PORT}
TOOLJET_DB_USER: ${TOOLJET_DB_USER}
TOOLJET_DB_HOST: ${TOOLJET_DB_HOST}
TOOLJET_DB_PASS: ${TOOLJET_DB_PASS}
PGRST_DB_URI: ${PGRST_DB_URI}
REDIS_HOST: ${REDIS_HOST}
REDIS_PASSWORD: ${REDIS_PASSWORD}
TOOLJET_HOST: ${TOOLJET_HOST}
command: npm run start:prod

redis:
container_name: ${REDIS_HOST}
image: redis:5.0.3
restart: always
deploy: # Please adjust the resource according to your usecase
resources:
limits:
cpus: '1'
memory: 1G
env_file:
- .env
environment:
- MASTER=${REDIS_HOST}
- REDIS_PASSWORD=${REDIS_PASSWORD}
复制代码

 

可以避免有些奇怪的错误,而且也很清晰,如果你觉得没必要的话,可以后续看看是否无错,没错和这个相关就忽略这一步

6.你要给搭建的时候创建的PGSQL数据库赋予权限,不然就会出

"GRANT CONNECT ON DATABASE \"undefined\" TO \"user_06621fa0-3e2e-49c8-a680-0f87c257dca6\""


这样的错误,具体语句类似:

GRANT CONNECT ON DATABASE 你的应用数据库名 TO postgres;


这样可能避免 在连接时未能正确解析数据库名称。因为可能连接过程中缺乏适当的权限或环境变量配置不完整,导致数据库名称未能正确传递或识别。

 

7. 若容器创建表的过程中遇到了 

Error during migration run:
QueryFailedError: permission denied for language c
....

类似这样的错误,请检查配置中的SQL用户是否权限不够,使用超级管理员给当前的用户配置一个权限,代码如下:

GRANT USAGE ON LANGUAGE c TO <username>

 如果不可以,就设置用户为超级管理(不推荐)

ALTER USER 你的用户 WITH SUPERUSER;

 

以上7条有需要的人可以看看,吐槽一下官方的文档应该多一点FAQ啥的,有问题都好查一下

posted @   洛晨随风  阅读(112)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 字符编码:从基础到乱码解决
历史上的今天:
2023-02-07 element plus的validate和emits时使用扩展运算符传入类出现的bug
2017-02-07 WCF使用地址去调用服务端的方法
2017-02-07 异常:System.InvalidOperationException: This implementation is not part of the Windows Platform FIPS validated cryptographic algorithms 这个实现是不是Windows平台FIPS验证的加密算法。解决方法
点击右上角即可分享
微信分享提示