NocoDB is an open-source no-code platform that puts a spreadsheet-style UI on top of a relational database, with grid, form, Kanban, and gallery views plus a REST API. This guide deploys NocoDB using Docker Compose with a PostgreSQL backend and Traefik handling automatic HTTPS, then exercises the API with a sample base. By the end, you'll have NocoDB serving a base over HTTPS with API access at your domain.
Set Up the Directory Structure
1. Create the project directories:
$ mkdir -p ~/nocodb/{data,pgdata,letsencrypt}
$ cd ~/nocodb
2. Create the environment file:
$ nano .env
DOMAIN=nocodb.example.com
LETSENCRYPT_EMAIL=admin@example.com
POSTGRES_DB=postgres
POSTGRES_PASSWORD=strong_password
POSTGRES_USER=postgres
Deploy with Docker Compose
1. Create the Compose manifest:
$ nano docker-compose.yaml
services:
traefik:
image: traefik:v3.6
container_name: traefik
command:
- "--providers.docker=true"
- "--providers.docker.exposedbydefault=false"
- "--entrypoints.web.address=:80"
- "--entrypoints.websecure.address=:443"
- "--entrypoints.web.http.redirections.entrypoint.to=websecure"
- "--entrypoints.web.http.redirections.entrypoint.scheme=https"
- "--certificatesresolvers.letsencrypt.acme.httpchallenge=true"
- "--certificatesresolvers.letsencrypt.acme.httpchallenge.entrypoint=web"
- "--certificatesresolvers.letsencrypt.acme.email=${LETSENCRYPT_EMAIL}"
- "--certificatesresolvers.letsencrypt.acme.storage=/letsencrypt/acme.json"
ports:
- "80:80"
- "443:443"
volumes:
- "./letsencrypt:/letsencrypt"
- "/var/run/docker.sock:/var/run/docker.sock:ro"
restart: unless-stopped
db:
image: postgres:16
container_name: nocodb-db
hostname: root_db
environment:
POSTGRES_DB: ${POSTGRES_DB}
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
volumes:
- "./pgdata:/var/lib/postgresql/data"
healthcheck:
test: ["CMD", "pg_isready", "-U", "${POSTGRES_USER}", "-d", "${POSTGRES_DB}"]
interval: 10s
timeout: 5s
retries: 5
restart: unless-stopped
nocodb:
image: nocodb/nocodb:0.301.2
container_name: nocodb
depends_on:
db:
condition: service_healthy
environment:
NC_DB: "pg://db:5432?u=${POSTGRES_USER}&p=${POSTGRES_PASSWORD}&d=${POSTGRES_DB}"
volumes:
- "./data:/usr/app/data"
expose:
- "8080"
labels:
- "traefik.enable=true"
- "traefik.http.routers.nocodb.rule=Host(`${DOMAIN}`)"
- "traefik.http.routers.nocodb.entrypoints=websecure"
- "traefik.http.routers.nocodb.tls.certresolver=letsencrypt"
- "traefik.http.services.nocodb.loadbalancer.server.port=8080"
restart: unless-stopped
2. Start the services:
$ docker compose up -d
3. Verify the services and tail logs:
$ docker compose ps
$ docker compose logs
Create the Super Admin
- Open
https://nocodb.example.com. - Register the Super Admin account with email and password.
- Complete the onboarding wizard (role and workspace prefs).
Create a Base and Query the API
1. From the dashboard, create a base named Employee Directory.
2. Add a table named Employees with fields: Name (text), Email (text), Department (text).
3. Insert a sample record — for example, Jane Smith, jane@example.com, Engineering.
4. Generate an API token from the profile menu → API Tokens.
5. Copy the table ID from the table context menu.
6. Query the table over HTTPS:
$ curl -s -H "xc-token: YOUR_API_TOKEN" \
"https://nocodb.example.com/api/v2/tables/TABLE_ID/records" | jq
Next Steps
NocoDB is running and served securely over HTTPS. From here you can:
- Add views (Grid, Form, Kanban, Gallery, Calendar) for the same table
- Invite collaborators with role-based permissions per base
- Wire automations to webhooks or Zapier/Make for downstream integrations
For the full guide with additional tips, visit the original article on Vultr Docs.
Top comments (0)