- Retool = low-code platform để build admin dashboard, internal tool trong vài giờ thay vì vài tuần code.
- Community edition self-host miễn phí (cap 5 users), trả phí khi vượt - hoặc dùng alternatives như Appsmith.
- Drag-drop component, connect Postgres/MySQL/MongoDB/REST/GraphQL, viết JS transform giữa các step.
- Phù hợp build admin user management, order processing, content moderation, sales dashboard.
- 1 VPS 4-8 GB RAM đủ cho team 5-20 maker, deploy 30 phút bằng docker compose chính thức.
Startup 20 người, có Postgres user 50k record. Customer support cần xem profile user, edit địa chỉ, refund order. Operations cần dashboard đếm đơn pending. Marketing cần export user theo cohort gửi mail. Mỗi yêu cầu = 1 ticket dev xây tool nội bộ. 1 tool đơn giản mất 1 tuần frontend + backend. Dev thấy chán làm CRUD admin lặp đi lặp lại. Retool là answer: PM/ops kéo thả tool trong 30 phút, dev chỉ cấp credentials database.
Bài này hướng dẫn deploy Retool self-host community edition, kết nối Postgres, build dashboard mẫu, set role permission, kèm so sánh với alternatives open source (Appsmith, ToolJet, NocoDB) khi nào nên chọn cái nào.
Retool community vs cloud vs alternatives
| Option | Cost | Limit | Tốt cho |
|---|---|---|---|
| Retool Cloud | 10-65 USD/user/tháng | Không giới hạn | Team không có DevOps |
| Retool Self-host CE | 0 | 5 users | Test, MVP, dev solo |
| Retool Self-host paid | ~50 USD/user/tháng | Không giới hạn | Compliance, scale |
| Appsmith | 0 self-host unlimited users | Feature giới hạn paid | Open source, team trung |
| ToolJet | 0 self-host unlimited | Tương tự Appsmith | Cộng đồng đang mạnh |
| NocoDB | 0 self-host unlimited | Focus DB UI, ít workflow | Spreadsheet-style |
Bài này tập trung Retool self-host. Nếu team vượt 5 user và không muốn trả phí Retool, đề xuất chuyển sang Appsmith hoặc ToolJet - 90% feature tương đương, miễn phí unlimited.
Yêu cầu VPS
| Quy mô maker / app | RAM | vCPU | SSD |
|---|---|---|---|
| 1-3 maker, 5 app | 4 GB | 2 vCPU | 40 GB |
| 5-10 maker, 20 app | 8 GB | 4 vCPU | 80 GB |
| 10-30 maker, 50+ app | 16 GB | 4-6 vCPU | 160 GB |
Retool stack: api-service (Node) + frontend (React) + workflow-service + Postgres + Redis. Khoảng 5-7 container, RAM khoảng 2-4 GB lúc idle, vọt khi nhiều user truy cập đồng thời.
Deploy Retool community edition
# Cài Docker + Compose
curl -fsSL https://get.docker.com | sh
sudo systemctl enable --now docker
# Clone repo Retool on-premise
cd /srv
sudo git clone https://github.com/tryretool/retool-onpremise.git retool
cd retool
# Generate JWT secret và encryption key
openssl rand -hex 256
openssl rand -hex 16
# Lưu lại 2 chuỗi này, paste vào docker.env
Sửa file docker.env:
NODE_ENV=production
SERVICE_TYPE=MAIN_BACKEND,DB_CONNECTOR,DB_SSH_CONNECTOR
JWT_SECRET=paste-chuoi-256-bit-here
ENCRYPTION_KEY=paste-chuoi-16-bit-here
POSTGRES_DB=hammerhead_production
POSTGRES_USER=retool_internal_user
POSTGRES_HOST=postgres
POSTGRES_PORT=5432
POSTGRES_PASSWORD=strong-postgres-pw
DOMAINS=retool.your-domain.com
COOKIE_INSECURE=false
TRUST_PROXY=true
# Tắt analytics gửi về Retool
DISABLE_INTERCOM=true
sudo docker compose up -d
# Đợi 2-3 phút cho images pull + DB init
sudo docker compose ps
# Xem log nếu lỗi
sudo docker compose logs -f api
Đặt Caddy reverse proxy trước port 3000:
retool.your-domain.com {
reverse_proxy 127.0.0.1:3000
encode gzip
}
Vào retool.your-domain.com, đăng ký tài khoản admin đầu tiên. Tạo org name, password mạnh.
Kết nối Postgres production của bạn
- Vào Resources -> Create New -> Resource -> PostgreSQL.
- Name: "Prod DB Read-only".
- Host:
db.your-domain.com(hoặc IP private nếu cùng VPN). - Port 5432, Database: production, Username: retool_readonly, Password.
- SSL: enable (production luôn).
- Test query:
SELECT 1. - Save.
Best practice: tạo user Postgres riêng retool_readonly với grant SELECT trên các bảng cần thiết. Tạo user retool_writer riêng cho action mutate, dùng resource riêng có additional approval workflow.
Build dashboard mẫu: user management
- Create New -> App -> Blank.
- Đặt tên "User Management".
- Drag Table component vào canvas.
- Click Table -> Data -> Query: tạo query mới
get_users:SELECT id, email, name, created_at, plan FROM users ORDER BY id DESC LIMIT {{ pageSize.value }} OFFSET {{ (pageIndex.value-1)*pageSize.value }} - Bind data Table =
{{ get_users.data }}. - Drag Text Input "Search" + Button "Run". Set Button onClick: trigger
get_usersvới param từ Search. - Drag Modal Edit User. Inside modal đặt form input bind với selected row của Table.
- Tạo query
update_user:UPDATE users SET name=$1, plan=$2 WHERE id=$3với param từ form. - Button Save trong modal trigger
update_uservà refreshget_userssau.
30 phút xong 1 admin tool xem user, search, edit. So với code Next.js + Tailwind + Prisma làm tương tự: 1-2 ngày. Lợi ích Retool rõ nhất ở ROI thời gian này.
Tích hợp REST API nội bộ
Resources -> REST API. Base URL https://api.your-domain.com. Auth: API key trong header. Trong app, query mới chọn resource này, gọi GET /orders?status=pending, bind response vào table. Có thể chain: kết quả call A là input call B (transformer JavaScript).
Transformer mạnh: viết JavaScript thuần sandbox để xử lý data trước render. Ví dụ format ngày, tính tổng, group by:
const orders = data.orders;
const grouped = orders.reduce((acc, o) => {
acc[o.status] = (acc[o.status] || 0) + o.total_vnd;
return acc;
}, {});
return Object.entries(grouped).map(([status, total]) => ({ status, total }));
Role và permission
Vào Settings -> Groups, tạo group: admins, support, marketing. Mỗi group có quyền truy cập tới apps cụ thể. Trong app, từng component có thể có permission per group (vd "Refund button" chỉ admins thấy). Audit log ghi mọi action: ai gọi query nào, sửa user nào, lúc nào - hữu ích compliance.
SSO với Google Workspace
Community edition không có SSO native. Workaround: đặt Authelia/Authentik trước Retool, login qua SSO rồi forward header. Hoặc upgrade lên Retool paid để có SSO official. Đối với 5 user team, manual create user là OK.
Backup và restore
- Backup Postgres
hammerhead_productionhằng đêm - chứa toàn bộ app definition, query, resource credentials (encrypted). - Export app dạng JSON qua Retool UI cho version control: Settings -> Export App.
- Sync app JSON vào Git repo nội bộ để track change, review PR.
- Test restore VPS staging hằng quý.
Khi nào chuyển sang Appsmith hoặc ToolJet?
- Khi team vượt 5 user và không muốn trả ~50 USD/user/tháng.
- Khi cần extension custom component sâu (Appsmith open hơn).
- Khi cần data sovereignty tuyệt đối (Retool source code không 100% open).
- Khi build app cho khách hàng (white-label) - Retool license cấm.
Appsmith và ToolJet đang tăng tốc nhanh, gần parity Retool. UI ToolJet thoáng hơn, Appsmith JS API mạnh hơn.
Bẫy thường gặp
| Triệu chứng | Cách fix |
|---|---|
| Login lỗi cookie | Set TRUST_PROXY=true, COOKIE_INSECURE=false, dùng HTTPS |
| Query Postgres timeout | Tăng query timeout trong resource settings, optimize SQL |
| App load chậm | Tách query thành nhiều cái nhỏ, dùng pagination |
| Vượt 5 user CE | Upgrade paid, hoặc migrate sang Appsmith/ToolJet |
| Cập nhật phá vỡ app | Snapshot VPS + backup DB trước upgrade major |
VPS đủ chỗ cho Retool + Postgres + Redis admin nội bộ
Cloud VPS TND sẵn AlmaLinux 9, Ubuntu 22/24, Debian 12/13. SSD CEPH, snapshot 1-click, backup hằng ngày, network 200Mbps trong nước. Gói 8GB RAM thoải mái chạy Retool + DB + reverse proxy cho team 10 maker xây dashboard nội bộ.
Xem 8 cấu hình Cloud VPS →FAQ
Retool CE có thật sự miễn phí mãi mãi không?
Có, miễn phí cho tối đa 5 end-users (developer + viewer). Không giới hạn số app, query, resource. Đủ cho team founder + 2 cofounder + 2 ops. Khi vượt, hoặc upgrade paid hoặc migrate.
Có thể version control app bằng Git không?
Có. Retool paid có Git Sync built-in. CE thì manual: export app JSON, commit vào Git, khi rollback thì import lại. Khuyến nghị review thay đổi app qua PR như code thường.
Performance Retool có đủ cho 1M record bảng không?
Có nếu phân trang đúng. Query với LIMIT/OFFSET, table component dùng server-side pagination. Tránh load 1M record vào client cùng lúc - browser sẽ lag. Index Postgres trên column hay filter giúp query < 200ms ngay cả với 10M record.
Có chống được SQL injection trong query Retool không?
Có, Retool dùng prepared statement với placeholder {{ var }}. Tránh dùng template literal raw concatenate. Cấu hình query để chỉ đọc với user Postgres readonly là an toàn nhất. Cấp write permission từng query khi cần.
Khi nào không nên dùng Retool?
Khi xây user-facing app cho khách hàng cuối (Retool license cấm, performance không tối ưu cho hàng triệu user). Khi cần UX cực kỳ tinh chỉnh (component Retool có giới hạn theme). Khi đã có team frontend mạnh và workflow CI/CD ổn định cho admin tool - dev tự xây nhanh không kém.


