Deploying Baserow
Baserow is an open-source, no-code database platform that combines the simplicity of a spreadsheet with the power of a relational database. Often called the best open-source alternative to Airtable, Baserow enables you to build databases, create automations, develop internal applications, and deploy AI agents—all without writing code.
Why Baserow?
Baserow stands out in the no-code database landscape with its powerful feature set:
- Spreadsheet-Like Interface: Intuitive UI that feels familiar while offering database power
- Application Builder: Create custom internal tools, portals, and applications
- Automation Engine: Build workflows to automate repetitive tasks
- AI Integration: Built-in AI assistant (Kuma) for creating solutions with natural language
- Dashboards: Visualize your data with customizable dashboards
- Multiple Views: Grid, Gallery, Kanban, Calendar, and Form views
- Real-time Collaboration: Work together with your team in real-time
- REST & GraphQL APIs: Headless and API-first architecture
- Self-Hosted Control: Full data ownership with no vendor lock-in
- Enterprise Ready: GDPR, HIPAA, and SOC 2 Type II compliant
With over 3,400 GitHub stars and trusted by 150,000+ users, Baserow has established itself as the leading open-source no-code database platform.
Deployment Options
Baserow offers an all-in-one Docker image (baserow/baserow) that bundles all required services:
- Backend API Server (Django/Python)
- Web Frontend (Vue.js)
- Internal PostgreSQL database
- Internal Redis server
- Caddy reverse proxy
Prerequisites
Before deploying Baserow, ensure you have:
- A Klutch.sh account
- Optionally, an external PostgreSQL database for production use (see our PostgreSQL guide)
- Optionally, an external Redis instance for production use (see our Redis guide)
Deploying Baserow
Create a New Project
Log in to your Klutch.sh dashboard at klutch.sh/app and create a new project for your Baserow deployment.
Create a New App
Create a new app within your project using the following Docker image from Docker Hub:
baserow/baserow:2.0.2This all-in-one image includes the complete Baserow stack with embedded PostgreSQL and Redis.
Configure Environment Variables
Set up the following essential environment variables:
Variable Description Example BASEROW_PUBLIC_URLThe public URL for your Baserow instance https://baserow.example-app.klutch.shSECRET_KEYDjango secret key for cryptographic signing Generate a secure random string (32+ characters) Optional Configuration Variables
Variable Description Default BASEROW_AMOUNT_OF_GUNICORN_WORKERSNumber of API worker processes Auto (based on CPU) BASEROW_AMOUNT_OF_WORKERSNumber of background task workers 1MIGRATE_ON_STARTUPAuto-apply database migrations trueBASEROW_TRIGGER_SYNC_TEMPLATES_AFTER_MIGRATIONSync templates after migration trueConfigure Persistent Storage
Baserow stores all data in the
/baserow/datadirectory. Add a persistent volume to ensure your data survives container restarts:Mount Path Recommended Size /baserow/data10GB (minimum, scale based on expected data) This volume stores:
- PostgreSQL database files
- Redis data
- User-uploaded files
- Auto-generated secrets
- Caddy certificates and configuration
Set Network Configuration
Configure your app to use HTTP traffic on port
80.Baserow’s internal Caddy reverse proxy listens on port 80 and handles routing to all internal services.
Deploy Your App
Click Deploy to start your Baserow instance. The initial deployment may take several minutes as Baserow:
- Initializes the PostgreSQL database
- Runs database migrations
- Syncs template databases
- Starts all services
Watch the logs for the message:
Baserow is now available at...
Post-Deployment Setup
Creating Your First Account
Once Baserow is running:
- Navigate to your Baserow URL (e.g.,
https://baserow.example-app.klutch.sh) - Click Sign Up to create your first admin account
- Enter your email and password
- You’ll be taken to the dashboard where you can create your first database
Creating Your First Database
- Click Create new in the sidebar
- Select Database (or start from a template)
- Give your database a name
- Add tables and fields using the intuitive interface
Production Configuration
For production deployments, we recommend using external PostgreSQL and Redis services for better reliability and performance.
Using External PostgreSQL
Deploy a PostgreSQL instance using our PostgreSQL guide, then configure Baserow:
| Variable | Description | Example |
|---|---|---|
DATABASE_HOST | PostgreSQL hostname | your-postgres-app |
DATABASE_PORT | PostgreSQL port | 5432 |
DATABASE_NAME | Database name | baserow |
DATABASE_USER | Database username | baserow |
DATABASE_PASSWORD | Database password | your-secure-password |
Or use a connection string:
| Variable | Example |
|---|---|
DATABASE_URL | postgresql://baserow:password@host:5432/baserow |
Using External Redis
Deploy a Redis instance using our Redis guide, then configure:
| Variable | Description | Example |
|---|---|---|
REDIS_HOST | Redis hostname | your-redis-app |
REDIS_PORT | Redis port | 6379 |
REDIS_PASSWORD | Redis password (if set) | your-redis-password |
REDIS_PROTOCOL | Connection protocol | redis or rediss |
Or use a connection string:
| Variable | Example |
|---|---|
REDIS_URL | redis://:password@host:6379 |
Email Configuration
To enable email notifications, password resets, and user invitations:
| Variable | Description | Example |
|---|---|---|
EMAIL_SMTP | Enable SMTP (set to any non-empty value) | true |
EMAIL_SMTP_HOST | SMTP server hostname | smtp.example.com |
EMAIL_SMTP_PORT | SMTP port | 587 |
EMAIL_SMTP_USER | SMTP username | your-smtp-user |
EMAIL_SMTP_PASSWORD | SMTP password | your-smtp-password |
EMAIL_SMTP_USE_TLS | Use TLS encryption | true |
FROM_EMAIL | Sender email address | noreply@example.com |
AI Integration
Baserow supports various AI providers for the AI field type and AI assistant features:
OpenAI Configuration
| Variable | Description |
|---|---|
BASEROW_OPENAI_API_KEY | Your OpenAI API key |
BASEROW_OPENAI_MODELS | Comma-separated list of models (e.g., gpt-3.5-turbo,gpt-4-turbo-preview) |
Anthropic Configuration
| Variable | Description |
|---|---|
BASEROW_ANTHROPIC_API_KEY | Your Anthropic API key |
BASEROW_ANTHROPIC_MODELS | Comma-separated list of models (e.g., claude-3-5-sonnet-20241022) |
Ollama Configuration (Self-hosted)
| Variable | Description |
|---|---|
BASEROW_OLLAMA_HOST | Your Ollama server URL |
BASEROW_OLLAMA_MODELS | Comma-separated list of models (e.g., llama2) |
File Storage Options
By default, Baserow stores uploaded files in /baserow/data/media. For production deployments with horizontal scaling, consider using external storage:
AWS S3
| Variable | Description |
|---|---|
AWS_ACCESS_KEY_ID | AWS access key |
AWS_SECRET_ACCESS_KEY | AWS secret key |
AWS_STORAGE_BUCKET_NAME | S3 bucket name |
AWS_S3_REGION_NAME | AWS region (e.g., us-east-1) |
AWS_S3_ENDPOINT_URL | Custom endpoint for S3-compatible services |
Google Cloud Storage
| Variable | Description |
|---|---|
GS_BUCKET_NAME | GCS bucket name |
GS_CREDENTIALS_FILE_PATH | Path to service account JSON file |
Sample Docker Compose for Local Development
For local development and testing before deploying to Klutch.sh:
version: '3.8'
services: baserow: image: baserow/baserow:2.0.2 environment: - BASEROW_PUBLIC_URL=http://localhost ports: - "80:80" - "443:443" volumes: - baserow_data:/baserow/data restart: unless-stopped
volumes: baserow_data:Save as docker-compose.yml and run:
docker-compose up -dAccess Baserow at http://localhost and create your first account.
Development with External Database
version: '3.8'
services: baserow: image: baserow/baserow:2.0.2 environment: - BASEROW_PUBLIC_URL=http://localhost - DATABASE_HOST=postgres - DATABASE_PORT=5432 - DATABASE_NAME=baserow - DATABASE_USER=baserow - DATABASE_PASSWORD=baserow - REDIS_HOST=redis ports: - "80:80" volumes: - baserow_data:/baserow/data depends_on: postgres: condition: service_healthy redis: condition: service_started
postgres: image: postgres:15 environment: - POSTGRES_USER=baserow - POSTGRES_PASSWORD=baserow - POSTGRES_DB=baserow volumes: - postgres_data:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U baserow"] interval: 10s timeout: 5s retries: 5
redis: image: redis:7 volumes: - redis_data:/data
volumes: baserow_data: postgres_data: redis_data:Upgrading Baserow
To upgrade your Baserow deployment:
- Back up your data (especially if using the embedded database)
- Update the Docker image tag to the new version
- Redeploy your app
Baserow automatically runs database migrations on startup when MIGRATE_ON_STARTUP=true.
Troubleshooting
Common Issues
“Site can’t be reached” or authentication loops
- Ensure
BASEROW_PUBLIC_URLexactly matches the URL in your browser, including protocol and port
Slow startup
- Initial startup can take several minutes while Baserow initializes the database and syncs templates
- Check logs for progress
Database connection errors
- Verify your external database credentials
- Ensure the database server is accessible from your Baserow container
File upload issues
- Verify the
/baserow/datavolume is properly mounted - Check volume permissions (should be owned by UID/GID 9999)
Additional Resources
- Baserow Documentation - Official documentation
- Baserow GitHub Repository - Source code and issue tracking
- Baserow API Documentation - REST API reference
- Baserow Community - Community forum
- Baserow Templates - Pre-built database templates