Kituwa IT · Self-hosting guides

Install NocoDB with Docker Compose

Self-hosted Airtable alternative

no-code databaseAirtable cloneAPI

NocoDB turns a relational database into a spreadsheet-style grid with forms, kanban boards, calendars, and a REST API for every table. People use it as an Airtable replacement, a small CRM, a content inventory, or a shared status board that non-technical colleagues can actually use.

Category
Dev & data
License
Sustainable Use License
Needs
Nothing (SQLite built in)
Image
nocodb/nocodb

What it is

It reads and writes your own database — SQLite by default, Postgres or MySQL if you point it at an existing one. Every table becomes a grid view, a form, and an API endpoint, and the API is the reason it's a real tool rather than a toy.

Before you start

  • The default image is SQLite, which is genuinely fine for hundreds of thousands of rows and a few dozen concurrent users. Move to Postgres before you build something other people depend on.
  • Public sharing links are off by default in recent versions. If you enable them, remember the shared link bypasses your auth entirely — scope it to read-only views you actually intended to publish.
  • Webhooks and automations are the underrated part. They replace a lot of glue scripts.

1 — Write the compose file

Command / configuration
services:
  nocodb:
    image: nocodb/nocodb:latest
    container_name: nocodb
    restart: unless-stopped
    ports:
      - "127.0.0.1:8080:8080"
    environment:
      NC_DB: "file:/usr/app/data/noco.db"
      NC_AUTH_JWT_SECRET: CHANGE_ME_32_chars_minimum
      NC_PUBLIC_URL: https://base.example.com
      NC_DISABLE_TELE: "true"
      NC_DASHBOARD_URL: https://base.example.com
      TZ: UTC
    volumes:
      - ./data:/usr/app/data
    healthcheck:
      test: ["CMD", "wget", "--spider", "-q", "http://localhost:8080/"]
      interval: 30s
      timeout: 5s
      retries: 3

2 — Start it

Command / configuration
mkdir -p ~/services/nocodb/data
cd ~/services/nocodb
docker compose up -d
docker compose logs -f nocodb | grep -i "noco db is ready\|error"

3 — First-run setup

  1. Create the admin account at https://base.example.com. There is no default — the first account is the super admin.
  2. Create a project (that's NocoDB's word for a database), then a table. If you're starting fresh, create the table from a template for invoices, contacts or issues rather than from scratch.
  3. Design the views you need: Grid for the data itself, Form for other people to submit into it, Kanban for a board with a status column, Calendar for anything with dates.
  4. Build the form view and share the link. For a lot of use cases this is the entire product: a URL colleagues fill in that lands straight in your database.
  5. Open the API docs from the panel menu and note your x-codb-api-token. Every table is available as REST endpoints, which turns the app into a backend for something else you build.

4 — Automate it

Command / configuration
# read every row as JSON
curl -s -H "xc-token: CHANGE_ME" \
  "https://base.example.com/api/v2/tables/tbl_abc123/records?limit=25" | jq

# create a record
curl -s -X POST \
  -H "xc-token: CHANGE_ME" -H "Content-Type: application/json" \
  -d '{"Title":"New task","Status":"Open"}' \
  "https://base.example.com/api/v2/tables/tbl_abc123/records"
The shared-form link is a public endpointAnyone holding that URL can create rows. That's the point, but it means a form is only as safe as its validation. Configure field-level validation, and check the rate limiting settings before you advertise the link anywhere.

Help when you need it

Want help getting this running?

We can help with a supported Linux host, application setup, migration or troubleshooting. Contact us to confirm the software, scope and scheduling before ordering.

Related guides

← Browse all 30 guides · Back to top