NocoDB is an open-source Airtable alternative that puts a spreadsheet-and-form UI on top of a real relational database. Unlike Airtable, your data lives in your own PostgreSQL or MySQL, so you can query it with SQL, connect BI tools, and never hit row limits or per-seat pricing surprises.
This guide deploys NocoDB backed by a managed PostgreSQL database for production use.
Why the database choice matters
NocoDB can run with an embedded SQLite file, which is tempting for a quick test — but don't use SQLite in production on a container platform. Containers are ephemeral; a SQLite file on the container disk vanishes on redeploy. Use an external managed PostgreSQL (or MySQL) so your data is durable and backed up.
| Backend | Use case |
|---|---|
| SQLite (embedded) | Local trial only |
| Managed PostgreSQL | Production — durable, backed up, queryable |
| Managed MySQL | Production alternative |
Step 1: Provision managed PostgreSQL
On [PandaStack](https://dashboard.pandastack.io), create a managed PostgreSQL (14.x or 16.x). When you link it to your app, DATABASE_URL is injected automatically. NocoDB reads its connection from the NC_DB variable, so we'll point that at the managed instance.
NocoDB's NC_DB connection string format:
pg://<host>:5432?u=<user>&p=<password>&d=<database>If you have the standard DATABASE_URL (postgresql://user:pass@host:5432/db), translate it into NocoDB's format above, or set the discrete connection variables.
Step 2: Deploy the NocoDB container
Use the official image:
FROM nocodb/nocodb:latest
# Serves on port 8080For production, pin a specific version tag rather than latest.
Environment variables:
NC_DB=pg://<host>:5432?u=<user>&p=<password>&d=<database>
NC_AUTH_JWT_SECRET=<long-random-string>
NC_PUBLIC_URL=https://nocodb.example.com
NC_DISABLE_TELE=trueNC_AUTH_JWT_SECRETsigns auth tokens — generate a long random string and keep it stable (changing it logs everyone out).NC_PUBLIC_URLensures share links and emails use the right domain.
Step 3: Deploy
- 1Push the repo (or reference
nocodb/nocodb) to GitHub. - 2Create a container app on PandaStack.
- 3Set the env vars above (
NC_DBand the JWT secret as secrets). - 4Expose port
8080. - 5Add a custom domain — SSL is automatic, and it must match
NC_PUBLIC_URL. - 6Optionally attach a small persistent volume at
/usr/app/datafor any local attachments (or, better, configure object storage for attachments).
Step 4: Configure attachment storage
By default NocoDB stores uploaded attachments on local disk — which is ephemeral. For production, configure an S3-compatible object storage backend in NocoDB's settings (or via env) so attachments survive redeploys. This is the most common production gotcha.
Step 5: First-run setup
Visit your domain and:
- 1Create the super-admin account (the first signup becomes admin).
- 2Create a base — you can start fresh or connect to an existing database as an "external data source" and NocoDB will generate a UI over your existing tables.
- 3Invite team members with roles (owner/creator/editor/viewer).
The "connect existing database" feature is NocoDB's superpower: point it at a production read-replica and you get an instant admin UI over real data.
Step 6: Lock it down
- Disable open signup once your team is invited, so randoms can't create accounts.
- Use a strong, stable
NC_AUTH_JWT_SECRET. - Restrict access with platform firewall rules if it's internal-only.
- Keep the image updated for security fixes.
NocoDB vs. Airtable, briefly
Airtable is polished and zero-ops, with a mature automation/extension ecosystem — it's genuinely excellent for non-technical teams. NocoDB's wins are data ownership (your own SQL database), no per-row/per-seat ceilings, and the ability to layer a UI over existing databases. The tradeoff is you operate it, and the automation ecosystem is younger.
Operating tips
- Back up the PostgreSQL — it holds all your bases. Scheduled backups cover this.
- Use object storage for attachments, not container disk.
- Pin image versions and test upgrades; major versions can include migrations.
- Monitor connections — many concurrent users plus webhooks can use up connections; size your DB tier accordingly.
References
- [NocoDB documentation](https://docs.nocodb.com/)
- [NocoDB environment variables](https://docs.nocodb.com/getting-started/self-hosted/environment-variables/)
- [NocoDB Docker image](https://hub.docker.com/r/nocodb/nocodb)
- [NocoDB self-hosting guide](https://docs.nocodb.com/getting-started/self-hosted/installation/)
---
NocoDB shines when backed by a real, durable database — and that's exactly what PandaStack's managed PostgreSQL provides, with scheduled backups and an injected connection string. Spin up a self-owned Airtable alternative on the free tier at [dashboard.pandastack.io](https://dashboard.pandastack.io).