Deploying ToolJet on Cloud VPS: Build Internal Drag-and-Drop Apps Connected to Multiple Databases in Minutes
Introduction: The Growing Need for Fast Internal Tools
In the fast-paced modern business environment, data is fragmented across various platforms, CRM systems, and production databases. Building custom internal tools, administrative dashboards, and customer support panels from scratch has traditionally required extensive engineering resources, shifting focus away from core product development. Businesses often find themselves choosing between slow, expensive custom development or rigid, off-the-shelf software that doesn't quite fit their unique workflows.
This is where ToolJet steps in as a game-changing solution. ToolJet is an open-source, low-code framework that allows development and operations teams to build secure, scalable internal applications via a intuitive drag-and-drop interface. By deploying ToolJet on your own Cloud VPS (Virtual Private Server), you retain complete control over your data infrastructure, maintain high-level security compliance, and unlock the capability to connect disparate databases in just a few minutes. This guide provides a comprehensive, step-by-step technical walkthrough for deploying ToolJet on a Cloud VPS and leveraging its capabilities for your enterprise.
Why ToolJet and Cloud VPS Are the Perfect Match for Enterprises
While cloud-hosted SaaS alternatives exist, deploying a low-code internal tool builder on a self-hosted Cloud VPS offers distinct advantages for businesses prioritizing performance, sovereignty, and cost-efficiency:
- Data Sovereignty and Compliance: Internal tools frequently handle sensitive customer data, financial records, or intellectual property. Running ToolJet on your own VPS ensures that data never leaves your secure perimeter, aligning with strict regulations like GDPR, HIPAA, or local data protection acts.
- Cost Predictability: SaaS platforms often charge per user, causing subscription costs to skyrocket as your team expands. A Cloud VPS operates on a predictable, fixed monthly or yearly fee, regardless of how many internal users access your ToolJet applications.
- High Performance and Low Latency: Locating your ToolJet instance on a VPS geographically close to your primary databases minimizes query latency, ensuring responsive dashboards and real-time data updates for your staff.
- Extensive Integration Freedom: Unlike restricted shared hosting environments, a dedicated Cloud VPS grants full root access, allowing you to optimize network configurations, set up secure SSH tunnels, and connect seamlessly to multiple isolated database instances.
Pre-requisites for Deployment
Before initiating the installation, ensure that your environment meets the following baseline technical specifications:
- Server Operating System: Ubuntu 22.04 LTS or Ubuntu 24.04 LTS is highly recommended for stability and broad package compatibility.
- Hardware Specifications: A minimum of 2 vCPUs, 4GB RAM, and 40GB SSD storage. For larger teams or intensive database querying, consider scaling to 4 vCPUs and 8GB RAM.
- Software Dependencies: Docker and Docker Compose installed on the host system.
- Network and Domain: A registered domain or subdomain (e.g., tooljet.yourcompany.com) pointing to your VPS public IP address, with ports 80 and 443 open.
Step-by-Step Guide: Deploying ToolJet via Docker Compose
Using Docker Compose is the most reliable, maintainable method to deploy ToolJet on a Cloud VPS. It encapsulates the application, workers, and database dependencies into isolated, easily upgradable containers.
Step 1: System Update and Dependency Installation
First, log into your Cloud VPS via SSH and update the system packages to their latest versions to ensure security patches are applied:
sudo apt update && sudo apt upgrade -y
Next, check if Docker and Docker Compose are installed. If they are not present, execute the following commands to set up the official Docker repository and install the runtime engine:
sudo apt install -y apt-transport-https ca-certificates curl software-properties-common
curl -fsSL [https://download.docker.com/linux/ubuntu/gpg](https://download.docker.com/linux/ubuntu/gpg) | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] [https://download.docker.com/linux/ubuntu](https://download.docker.com/linux/ubuntu) $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update && sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
Step 2: Fetching the ToolJet Deployment Configuration
Create a dedicated directory for your ToolJet deployment to keep your configuration files organized, then download the official template files:
mkdir ~/tooljet-deploy && cd ~/tooljet-deploy
curl -LO [https://raw.githubusercontent.com/ToolJet/ToolJet/main/deploy/docker/docker-compose.yaml](https://raw.githubusercontent.com/ToolJet/ToolJet/main/deploy/docker/docker-compose.yaml)
curl -LO [https://raw.githubusercontent.com/ToolJet/ToolJet/main/deploy/docker/.env.example](https://raw.githubusercontent.com/ToolJet/ToolJet/main/deploy/docker/.env.example)
mv .env.example .env
Step 3: Configuring Environment Variables
Open the .env file using a text editor such as Nano to customize your deployment parameters:
nano .env
You must generate secure, random strings for the secret keys and specify your external access URL. Update the following key lines within the configuration file:
TOOLJET_HOST=[https://tooljet.yourcompany.com](https://tooljet.yourcompany.com)
LOCKBOX_MASTER_KEY=[Generate a 32-byte hex string]
SECRET_KEY_BASE=[Generate a 64-byte hex string]
Note: You can generate a secure random string directly from the terminal using the command openssl rand -hex 32. Ensure these strings remain confidential to protect application encryption keys.
Step 4: Launching the Containers
Once configuration is complete, initialize the database migrations and spin up the ToolJet architecture in detached mode:
sudo docker compose run --rm client npm run db:migrate
sudo docker compose up -d
Verify that all essential services—including the ToolJet client, server, plugins, and the internal PostgreSQL database—are operating correctly by checking the container status:
sudo docker compose ps
Securing Your ToolJet Instance with Nginx and SSL
To safeguard user credentials and sensitive business data traveling over the internet, wrapping your ToolJet instance in an encrypted HTTPS layer using Nginx and Let's Encrypt is imperative.
1. Install Nginx
sudo apt install -y nginx
2. Configure a Reverse Proxy
Create a new configuration block for your domain:
sudo nano /etc/nginx/sites-available/tooljet
Insert the following structural reverse proxy block, directing incoming traffic to ToolJet’s internal port (defaulting to 3000):
server {
listen 80;
server_name tooljet.yourcompany.com;
location / {
proxy_pass http://localhost:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
Enable the site configuration and restart Nginx to apply changes:
sudo ln -s /etc/nginx/sites-available/tooljet /etc/nginx/sites-enabled/
sudo systemctl restart nginx
3. Provision a Free SSL Certificate
Utilize Certbot to automate obtaining and renewing an SSL certificate from Let's Encrypt:
sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d tooljet.yourcompany.com
Follow the interactive prompt to complete the validation process and automatically redirect all standard HTTP traffic to secure HTTPS.
Connecting Multi-Database Infrastructures via the UI
With ToolJet successfully running securely on your Cloud VPS, open your web browser, navigate to your domain, and complete the initial administrator registration. Once inside the dashboard, you can experience the core strength of ToolJet: connecting multiple disparate databases within a single application engine.
ToolJet natively supports a broad taxonomy of data systems out of the box, including:
- Relational Databases: PostgreSQL, MySQL, MS SQL Server, and MariaDB.
- NoSQL & Document Stores: MongoDB, Redis, and DynamoDB.
- Cloud Data Warehouses: Snowflake, Google BigQuery, and Amazon Redshift.
- External Services: REST APIs, GraphQL endpoints, and Google Sheets.
To establish a multi-database connection, navigate to the Data Sources tab on your dashboard sidebar. Click 'Add Data Source', select your preferred database engine, and supply the connection details (Host, Port, Database Name, Username, and Password). Repeat this seamless process for as many distinct systems as your workflows require.
Because you are hosting on a dedicated Cloud VPS, establishing encrypted connections—such as forcing SSL or utilizing SSH tunnels for remote database access—is highly efficient and prevents exposure to the public web.
Building Your First Administrative App with Drag-and-Drop
Now that your data layers are successfully integrated, creating a unified operational workflow requires zero frontend coding:
- Initialize a New Application: Click on 'Create New Application' from the workspace home screen. This launches the visual App Builder interface.
- Assemble the Interface Layout: Use the right-hand component library panel to drag structural elements directly onto the canvas. Arrange components like Tables for displaying rows, Form containers for processing inputs, Charts for real-time business metrics, and Buttons to trigger system events.
- Construct Unified Data Queries: In the query manager panel at the bottom, write distinct queries to target different systems simultaneously. For instance, you can perform a
SELECT * FROM customersquery against a production PostgreSQL database, and concurrently write a JavaScript transformer to map that data against real-time billing records pulled via a REST API from an external accounting system. - Bind Components to Data: Select your visual table component, and link its data property directly to the query result using clean interpolation notation:
{{queries.postgresql_data.data}}.
Once previewed and validated, click Release. Your internal teams can instantly utilize a unified, secure portal capable of mutating data across multiple underlying corporate systems concurrently.
Conclusion: Democratizing Internal Tool Development
Deploying ToolJet on a Cloud VPS bridges the gap between engineering efficiency and operational autonomy. It removes the friction of building responsive administrative panels from scratch, ensuring that engineering hours are spent solving core problems rather than rewriting basic UI components. By shifting your internal application stack to a self-hosted, secure low-code model, you achieve unprecedented agility, ironclad data compliance, and predictable infrastructure spending. Take control of your company's operational workflows today by establishing a centralized internal app ecosystem with ToolJet.
