NocoDB logoDatabase UI

NocoDB

A spreadsheet-like no-code interface on top of databases, often used as an Airtable alternative.

Review notes

Good for lightweight operational data. Prefer PostgreSQL over SQLite in production.

Deployment guide

Use Docker Compose with a dedicated PostgreSQL database for small production deployments.

  1. Create a PostgreSQL database for NocoDB or use managed Postgres.
  2. Configure `NC_DB` with the database connection string.
  3. Run the NocoDB container behind HTTPS.
  4. Create the first workspace and connect source databases if needed.
  5. Set user permissions before inviting the team.
Backup:Back up the NocoDB database and any source databases connected to it.

Copy and run on your server

Use each block separately: save the compose file, or copy the bash script to create it and start the container.

docker-compose.ymlyaml
services:
  nocodb:
    image: nocodb/nocodb:latest
    container_name: nocodb
    environment:
      NC_DB: "pg://postgres:5432?u=nocodb&p=nocodb_password&d=nocodb"
    volumes:
      - ./data:/usr/app/data
    ports:
      - "8080:8080"
    depends_on:
      - postgres
    restart: unless-stopped

  postgres:
    image: postgres:16-alpine
    container_name: nocodb_postgres
    environment:
      POSTGRES_USER: nocodb
      POSTGRES_PASSWORD: nocodb_password
      POSTGRES_DB: nocodb
    volumes:
      - ./postgres:/var/lib/postgresql/data
    restart: unless-stopped
setup.shbash
#!/usr/bin/env bash
set -euo pipefail

sudo mkdir -p /opt/nocodb
sudo chown "$USER":"$USER" /opt/nocodb
cd /opt/nocodb

cat > docker-compose.yml <<'COMPOSE'
services:
  nocodb:
    image: nocodb/nocodb:latest
    container_name: nocodb
    environment:
      NC_DB: "pg://postgres:5432?u=nocodb&p=nocodb_password&d=nocodb"
    volumes:
      - ./data:/usr/app/data
    ports:
      - "8080:8080"
    depends_on:
      - postgres
    restart: unless-stopped

  postgres:
    image: postgres:16-alpine
    container_name: nocodb_postgres
    environment:
      POSTGRES_USER: nocodb
      POSTGRES_PASSWORD: nocodb_password
      POSTGRES_DB: nocodb
    volumes:
      - ./postgres:/var/lib/postgresql/data
    restart: unless-stopped
COMPOSE

docker compose up -d
echo "NocoDB is running on http://SERVER_IP:8080"

Stack

TypeScriptNode.jsPostgreSQLDocker