Baserow is an open-source no-code database — think Airtable, but you host it. It gives non-technical teammates a spreadsheet-like UI while storing everything in PostgreSQL. Compared to running the all-in-one image on a laptop, a production deployment splits out the database and Redis so your data is durable and the app scales cleanly.
This guide deploys Baserow with managed PostgreSQL and Redis.
Baserow's components
Baserow ships an all-in-one image bundling everything, but for production you want to externalize state:
| Component | Production setup |
|---|---|
| Backend (Django) | Container app |
| Web frontend (Nuxt) | Bundled in the same image |
| Celery workers | Bundled / can be split |
| PostgreSQL | Managed, external |
| Redis | Managed, external |
| File storage | Object storage (S3-compatible) |
The all-in-one image is convenient, and you can point it at external PostgreSQL and Redis via environment variables — giving you the simplicity of one container with the durability of managed data stores.
Step 1: Provision PostgreSQL and Redis
On [PandaStack](https://dashboard.pandastack.io), create:
- A managed PostgreSQL (Baserow stores all table data here).
- A managed Redis (used for Celery and caching).
Size PostgreSQL with storage headroom — user-created tables and rows live here and grow over time.
Step 2: Deploy the all-in-one image with external state
Reference the official image and point it at your managed stores:
FROM baserow/baserow:1.27.0
# Serves on port 80 by defaultEnvironment variables:
BASEROW_PUBLIC_URL=https://baserow.example.com
# External PostgreSQL
DATABASE_HOST=<managed-postgres-host>
DATABASE_PORT=5432
DATABASE_NAME=baserow
DATABASE_USER=<user>
DATABASE_PASSWORD=<password>
# External Redis
REDIS_HOST=<managed-redis-host>
REDIS_PORT=6379
REDIS_PASSWORD=<password>
REDIS_PROTOCOL=redis
# Stable secret keys — keep these constant!
SECRET_KEY=<long-random>
BASEROW_JWT_SIGNING_KEY=<long-random>BASEROW_PUBLIC_URL must match your real domain or links and API calls break. The secret keys must stay stable across deploys.
Step 3: Configure file storage
Baserow stores uploaded files (attachments, exports). On an ephemeral container, local file storage is lost on redeploy. Configure S3-compatible object storage:
AWS_ACCESS_KEY_ID=<key>
AWS_SECRET_ACCESS_KEY=<secret>
AWS_STORAGE_BUCKET_NAME=<bucket>
AWS_S3_ENDPOINT_URL=<endpoint>This is the most-missed production step — without it, uploaded files disappear.
Step 4: Deploy
- 1Push the repo (or reference the image) to GitHub.
- 2Create a container app on PandaStack — BuildKit handles the image, Helm deploys it.
- 3Set all env vars (passwords and secret keys as secrets).
- 4Expose port
80. - 5Add a custom domain matching
BASEROW_PUBLIC_URL; SSL is automatic. - 6The image runs database migrations on startup, so the first boot initializes the schema in your managed PostgreSQL.
Step 5: First-run and team setup
Visit your domain and create the first admin account. Then:
- Disable open signups in the admin if it's an internal tool.
- Invite collaborators with appropriate roles.
- Create your first workspace and database.
Baserow vs. NocoDB
Both are open-source Airtable alternatives. A fair, brief take:
| Baserow | NocoDB | |
|---|---|---|
| Storage model | Its own PostgreSQL schema | UI over any existing DB |
| Strength | Polished spreadsheet UX, plugins | Connecting to existing databases |
| Best for | Building new no-code bases | Putting a UI on data you already have |
If you're starting fresh and want the smoothest spreadsheet UX, Baserow is excellent. If you need to layer a UI over an existing production database, NocoDB's external-source model fits better. They're both solid; pick by use case.
Scaling notes
- The all-in-one image is fine to a point; for heavy use you can deploy the backend and Celery workers as separate apps from the component images.
- Watch PostgreSQL connections under concurrent load and size the tier accordingly.
- Keep Redis healthy — Celery depends on it for background jobs (exports, webhooks).
Operating tips
- Scheduled PostgreSQL backups protect all user data.
- Pin the image version and read release notes before upgrading (migrations run on boot).
- Object storage for files — never rely on container disk.
- Stable secret keys — rotating them invalidates sessions and tokens.
References
- [Baserow installation docs](https://baserow.io/docs/installation/install-with-docker)
- [Baserow configuration / environment variables](https://baserow.io/docs/installation/configuration)
- [Baserow Docker image](https://hub.docker.com/r/baserow/baserow)
- [Baserow self-hosting overview](https://baserow.io/docs/installation/install-on-cloud)
---
Baserow plus managed PostgreSQL and Redis gives non-technical teammates a powerful no-code database while you keep full ownership of the data. PandaStack provisions both data stores with scheduled backups and injects the connections. Try it on the free tier at [dashboard.pandastack.io](https://dashboard.pandastack.io).