低代码开源系统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啥的,有问题都好查一下
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 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验证的加密算法。解决方法