DEV Community

Cover image for Deploying NocoDB Open-Source Airtable Alternative on Ubuntu 24.04
Sanskriti Harmukh for Vultr

Posted on with Aashish Chaurasiya • Originally published at docs.vultr.com

Deploying NocoDB Open-Source Airtable Alternative on Ubuntu 24.04

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
Enter fullscreen mode Exit fullscreen mode

2. Create the environment file:

$ nano .env
Enter fullscreen mode Exit fullscreen mode
DOMAIN=nocodb.example.com
LETSENCRYPT_EMAIL=admin@example.com

POSTGRES_DB=postgres
POSTGRES_PASSWORD=strong_password
POSTGRES_USER=postgres
Enter fullscreen mode Exit fullscreen mode

Deploy with Docker Compose

1. Create the Compose manifest:

$ nano docker-compose.yaml
Enter fullscreen mode Exit fullscreen mode
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
Enter fullscreen mode Exit fullscreen mode

2. Start the services:

$ docker compose up -d
Enter fullscreen mode Exit fullscreen mode

3. Verify the services and tail logs:

$ docker compose ps
$ docker compose logs
Enter fullscreen mode Exit fullscreen mode

Create the Super Admin

  1. Open https://nocodb.example.com.
  2. Register the Super Admin account with email and password.
  3. 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
Enter fullscreen mode Exit fullscreen mode

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)