拓冰建站拓冰建站
首页 / 资讯中心 / 正文

使用 Docker Compose 部署 ToolJet:内置 PostgreSQL 与外部数据库两种方案的完整指南

使用 Docker Compose 部署 ToolJet内置 PostgreSQL 与外部数据库两种方案的完整指南【免费下载链接】ToolJetOpen-source foundation of ToolJet AI - the enterprise app generation platform for internal tools, dashboards, business applications, workflows and AI agents. Build visually, from a prompt, or from Claude Code, Codex and Cursor over MCP 项目地址: https://gitcode.com/GitHub_Trending/to/ToolJetToolJet 是基于 Docker Compose 部署的低代码应用平台内部工具、仪表盘、工作流与 AI 应用生成平台本文将完整讲解如何在服务器上通过 Docker Compose 部署 ToolJet涵盖内置 PostgreSQL与外部 PostgreSQL两种生产方案、密钥初始化脚本的工作原理、TOOLJET_HOST等核心环境变量的配置以及升级到最新 LTS 版本与数据库备份恢复的实操步骤。读完本文你将能够从零搭建一套可对外提供服务的 ToolJet 生产实例并掌握其容器编排结构、数据安全与版本升级要点。提示如果你只是想在本机 Docker 中快速体验 ToolJet可以参考 Try ToolJet 文档。为什么需要 PostgreSQLToolJet 在运行时依赖一个 PostgreSQL 数据库来存储三类核心数据应用定义applications definitions画布上的组件、布局、事件与页面结构数据源凭据encrypted credentials for datasources各种数据源连接信息这些凭据会被加密后入库用户认证数据user authentication data账号、会话与权限相关信息。因此部署前的第一项准备工作就是准备好 Docker 与 Docker Compose以及一个可用的 PostgreSQL 实例无论是内置容器还是外部托管服务。安装 Docker 与 Docker Compose在服务器上安装 Docker 与 Docker Compose 是部署的前提。官方安装文档如下Docker 安装文档Docker Compose 安装文档安装完成后建议按官方 Linux 后置安装指引配置 Docker 以非 root 用户运行如果服务器是 Linux 且docker命令需要 sudo 权限后续启动命令可写成sudo docker-compose up -d两种部署方案选型根据数据库的托管方式Docker Compose 部署分为两种内置 PostgreSQL 数据库推荐使用官方 PostgreSQL Docker 镜像随 ToolJet 一起启动适合大多数自托管场景外部 PostgreSQL 数据库连接 AWS RDS、Google Cloud SQL 等托管数据库服务适合已有数据库基础设施或对数据库运维有更高要求的场景。两种方案共用同一套 ToolJet 主容器差异主要体现在docker-compose文件内容与.env的初始化方式上。方案一使用内置 PostgreSQL 部署第 1 步下载生产环境 compose 文件将生产环境的 docker-compose 文件下载到服务器并重命名为docker-compose.yamlcurl -LO https://tooljet-deployments.s3.us-west-1.amazonaws.com/pre-release/docker/docker-compose-db.yaml mv docker-compose-db.yaml docker-compose.yaml mkdir postgres_datamkdir postgres_data用于创建 PostgreSQL 数据目录。在仓库自带的 docker-compose-db.yaml 中可以看到postgres服务的数据卷正是以 bind mount 的方式挂载到${PWD}/postgres_data目录volumes: postgres: driver: local driver_opts: o: bind type: none device: ${PWD}/postgres_data这意味着所有数据库文件都会持久化在服务器本地目录中容器删除后数据依然保留。第 2 步生成 .env 文件并初始化密钥在docker-compose.yaml所在目录执行curl -LO https://tooljet-deployments.s3.us-west-1.amazonaws.com/pre-release/docker/.env.internal.example curl -LO https://tooljet-deployments.s3.us-west-1.amazonaws.com/pre-release/docker/internal.sh chmod x internal.sh mv .env.internal.example .env ./internal.shinternal.sh的作用是自动生成 .env 中缺失的核心密钥变量。从仓库中对应的 internal.sh 实现可以看到它依次做了这些事LOCKBOX_MASTER_KEY若为空用openssl rand -hex 32生成一个 32 字节的十六进制字符串用于加密数据源凭据SECRET_KEY_BASE若为空用openssl rand -hex 64生成 64 字节十六进制字符串用于加密会话 CookiePGRST_JWT_SECRET若为空生成 32 字节十六进制字符串供 PostgREST 的 JWT 认证使用PG_PASS/TOOLJET_DB_PASS生成一个 16 位随机密码作为 PostgreSQL 数据库密码PGRST_DB_URI自动拼接为postgres://postgres:passwordpostgresql/tooljet_db形式的数据库连接串。脚本通过awk就地更新.env文件已存在的变量不会被覆盖因此可以安全地重复执行。第 3 步启动容器docker-compose up -d第 4 步可选配置 TOOLJET_HOSTTOOLJET_HOST用于声明 ToolJet 的对外访问地址可以是服务器的公网 IPv4 地址也可以是自定义域名在.env文件中修改TOOLJET_HOSThttp://12.34.56.78或TOOLJET_HOSThttps://tooljet.yourdomain.com注意TOOLJET_HOST必须以http://或https://开头如果使用了自定义域名需要在 DNS 中添加一条 A 记录指向服务器的 IP 地址更多可配置的环境变量请参考 环境变量文档。方案二使用外部 PostgreSQL 部署第 1 步准备数据库先在 AWS RDS、Google Cloud SQL 或自建环境中创建一个 PostgreSQL 数据库并确保 ToolJet 服务器可以访问它。第 2 步下载 compose 文件外部数据库方案使用不包含postgres服务的 compose 文件curl -LO https://tooljet-deployments.s3.us-west-1.amazonaws.com/pre-release/docker/docker-compose.yaml在仓库的 docker-compose.yaml 中可以看到该文件只定义了tooljet主服务与一个postgrest服务后者用于 ToolJet Database 的 REST 化访问未启用 ToolJet Database 时可注释掉。第 3 步初始化 .env 并填写外部数据库凭据curl -LO https://tooljet-deployments.s3.us-west-1.amazonaws.com/pre-release/docker/external.sh curl -LO https://tooljet-deployments.s3.us-west-1.amazonaws.com/pre-release/docker/.env.external.example chmod x external.sh mv .env.external.example .env ./external.sh执行external.sh时脚本会交互式提示你依次输入外部数据库的PG_USER用户名、PG_HOST主机名、PG_PASS密码与PG_DB数据库名。从仓库对应的 external.sh 实现可以看到脚本除了生成与 internal.sh 相同的 LOCKBOX / SECRET_KEY_BASE / PGRST_JWT_SECRET 密钥之外还会将输入的四个 PG 变量写入.env自动把PG_USER、PG_HOST、PG_PASS复制为TOOLJET_DB_USER、TOOLJET_DB_HOST、TOOLJET_DB_PASS供 ToolJet Database 使用拼接PGRST_DB_URIpostgres://PG_USER:PG_PASSPG_HOST/tooljet_db写入.env。第 4 步启动容器docker-compose up -d第 5 步可选配置 TOOLJET_HOST 与自定义 CATOOLJET_HOST的配置方式与内置数据库方案一致。此外如果 ToolJet 需要连接使用自签名 HTTPS 的服务请设置环境变量NODE_EXTRA_CA_CERTS为证书文件的绝对路径PEM 格式可包含多个证书。理解容器编排结构无论选择哪种方案tooljet主服务都包含以下关键配置见 docker-compose-db.yamltooljet: container_name: Tooljet-app image: tooljet/tooljet-ce:latest restart: always env_file: .env ports: - 80:80 environment: SERVE_CLIENT: true PORT: 80 command: npm run start:prodimage: tooljet/tooljet-ce:latest社区版镜像生产环境建议按需锁定为特定 LTS 标签如tooljet/tooljet:ee-lts-latestenv_file: .env所有环境变量从.env注入容器ports: 80:80将容器的 80 端口映射到宿主机 80 端口SERVE_CLIENTtrue表示由服务端同时托管前端客户端restart: always容器异常退出后自动重启保证服务可用性。内置数据库方案中postgres服务使用postgres:13镜像通过${PG_HOST}指定容器名并从.env读取POSTGRES_USER与POSTGRES_PASSWORDpostgrest服务使用postgrest/postgrest:v12.0.2镜像负责把 ToolJet Database 表暴露为 REST API。容器启动流程与数据库就绪等待ToolJet 容器在启动时会执行初始化脚本。从 ce-entrypoint.sh 可以看到其关键逻辑如果 Redis 尚未运行则启动内置 Redis单实例 CE 的伴生服务加载.env中的环境变量根据是否存在server/dist选择npm run db:setup:prod或npm run db:setup通过wait-for-it.sh等待 PostgreSQL 在${PG_HOST}:${PG_PORT:-5432}就绪超时 300 秒后再执行数据库初始化与迁移。也就是说即使容器先于数据库启动也会耐心等待数据库可用后才完成建库与 schema 初始化避免了常见的启动竞态问题。而 supervisord.conf 则负责在同一容器内同时托管postgrest与 ToolJet 主进程并保证任一进程崩溃后自动重启。数据库备份与恢复内置 PostgreSQL内置数据库方案下数据库文件保存在宿主机postgres_data目录因此备份恢复需要借助官方提供的脚本。下载备份恢复脚本curl -LO https://tooljet-deployments.s3.us-west-1.amazonaws.com/docker/backup-restore.sh chmod x backup-restore.sh运行脚本./backup-restore.sh脚本会引导你完成数据库的备份与恢复操作。注意无论使用哪种方案在升级版本或执行任何有风险操作之前务必先对数据库做完整备份防止数据丢失。升级到最新 LTS 版本ToolJet 每 3-5 个月发布一个新的 LTS 版本每个 LTS 版本至少提供 18 个月的维护期。你可以在 ToolJet Docker Hub 的 tags 页面查看最新 LTS 版本LTS 标签遵循LTS-前缀加版本号的命名规范例如tooljet/tooljet:ee-lts-latest。如果你是全新安装直接使用最新版本即可无需执行升级流程。对于已有实例的升级请遵循以下要点升级前必须对数据库做完整备份以防数据丢失版本早于 v2.23.0-ee2.10.2 的用户必须先升级到该版本然后才能继续升级到 LTS 版本升级的具体步骤取决于你的部署方式Docker 场景下通常为拉取最新镜像 → 备份数据库 → 更新.env中的镜像标签 → 重新执行docker-compose up -d。关键环境变量速查以下变量是 Docker Compose 部署中直接涉及的核心配置完整清单见 环境变量文档变量说明是否必填TOOLJET_HOSTToolJet 客户端对外访问 URL如https://app.tooljet.com必需LOCKBOX_MASTER_KEY32 字节十六进制字符串用于加密数据源凭据可用openssl rand -hex 32生成必需SECRET_KEY_BASE64 字节十六进制字符串用于加密会话 Cookie可用openssl rand -hex 64生成必需PG_HOSTPostgreSQL 主机名compose 内置数据库场景下可设为postgres由 Docker DNS 解析必需PG_DB数据库名必需PG_USER/PG_PASS/PG_PORT数据库用户名 / 密码 / 端口默认 5432必需PGRST_JWT_SECRETPostgREST 认证用 JWT 密钥可用openssl rand -hex 32生成必需PGRST_DB_URIToolJet Database 的连接串格式postgres://用户:密码主机:端口/数据库必需SERVE_CLIENT是否由服务端托管前端客户端compose 文件中默认true可选NODE_EXTRA_CA_CERTS自签名 CA 证书的绝对路径PEM 格式可选CHECK_FOR_UPDATES设为0可关闭每 24 小时的版本更新检查可选DISABLE_SIGNUPS设为true可禁止公开注册仅允许邀请加入可选常见问题排查容器启动后一直处于等待状态通常是数据库未就绪或PG_HOST/PG_PORT配置错误可检查wait-for-it.sh的等待日志确认连接目标docker-compose up -d报权限错误Linux 服务器上为docker命令加sudo或按官方后置安装指引配置非 root 运行自定义域名无法访问确认TOOLJET_HOST以http:///https://开头且 DNS 的 A 记录已指向服务器 IPHTTPS 自签名证书不受信任设置NODE_EXTRA_CA_CERTS指向包含 CA 证书的 PEM 文件需要更换数据库修改.env中PG_*与PGRST_DB_URI变量后重启容器但务必先备份原数据。通过本文的步骤你已经可以在任意支持 Docker 的服务器上完成 ToolJet 的生产部署。若希望进一步定制如配置 SMTP、SSO、多语言等可继续查阅 环境变量文档 与仓库内的 docker-compose 配置。【免费下载链接】ToolJetOpen-source foundation of ToolJet AI - the enterprise app generation platform for internal tools, dashboards, business applications, workflows and AI agents. Build visually, from a prompt, or from Claude Code, Codex and Cursor over MCP 项目地址: https://gitcode.com/GitHub_Trending/to/ToolJet创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门