Skip to content

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:

Deploying Baserow

  1. Create a New Project

    Log in to your Klutch.sh dashboard at klutch.sh/app and create a new project for your Baserow deployment.

  2. Create a New App

    Create a new app within your project using the following Docker image from Docker Hub:

    baserow/baserow:2.0.2

    This all-in-one image includes the complete Baserow stack with embedded PostgreSQL and Redis.

  3. Configure Environment Variables

    Set up the following essential environment variables:

    VariableDescriptionExample
    BASEROW_PUBLIC_URLThe public URL for your Baserow instancehttps://baserow.example-app.klutch.sh
    SECRET_KEYDjango secret key for cryptographic signingGenerate a secure random string (32+ characters)

    Optional Configuration Variables

    VariableDescriptionDefault
    BASEROW_AMOUNT_OF_GUNICORN_WORKERSNumber of API worker processesAuto (based on CPU)
    BASEROW_AMOUNT_OF_WORKERSNumber of background task workers1
    MIGRATE_ON_STARTUPAuto-apply database migrationstrue
    BASEROW_TRIGGER_SYNC_TEMPLATES_AFTER_MIGRATIONSync templates after migrationtrue
  4. Configure Persistent Storage

    Baserow stores all data in the /baserow/data directory. Add a persistent volume to ensure your data survives container restarts:

    Mount PathRecommended 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
  5. 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.

  6. 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:

  1. Navigate to your Baserow URL (e.g., https://baserow.example-app.klutch.sh)
  2. Click Sign Up to create your first admin account
  3. Enter your email and password
  4. You’ll be taken to the dashboard where you can create your first database

Creating Your First Database

  1. Click Create new in the sidebar
  2. Select Database (or start from a template)
  3. Give your database a name
  4. 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:

VariableDescriptionExample
DATABASE_HOSTPostgreSQL hostnameyour-postgres-app
DATABASE_PORTPostgreSQL port5432
DATABASE_NAMEDatabase namebaserow
DATABASE_USERDatabase usernamebaserow
DATABASE_PASSWORDDatabase passwordyour-secure-password

Or use a connection string:

VariableExample
DATABASE_URLpostgresql://baserow:password@host:5432/baserow

Using External Redis

Deploy a Redis instance using our Redis guide, then configure:

VariableDescriptionExample
REDIS_HOSTRedis hostnameyour-redis-app
REDIS_PORTRedis port6379
REDIS_PASSWORDRedis password (if set)your-redis-password
REDIS_PROTOCOLConnection protocolredis or rediss

Or use a connection string:

VariableExample
REDIS_URLredis://:password@host:6379

Email Configuration

To enable email notifications, password resets, and user invitations:

VariableDescriptionExample
EMAIL_SMTPEnable SMTP (set to any non-empty value)true
EMAIL_SMTP_HOSTSMTP server hostnamesmtp.example.com
EMAIL_SMTP_PORTSMTP port587
EMAIL_SMTP_USERSMTP usernameyour-smtp-user
EMAIL_SMTP_PASSWORDSMTP passwordyour-smtp-password
EMAIL_SMTP_USE_TLSUse TLS encryptiontrue
FROM_EMAILSender email addressnoreply@example.com

AI Integration

Baserow supports various AI providers for the AI field type and AI assistant features:

OpenAI Configuration

VariableDescription
BASEROW_OPENAI_API_KEYYour OpenAI API key
BASEROW_OPENAI_MODELSComma-separated list of models (e.g., gpt-3.5-turbo,gpt-4-turbo-preview)

Anthropic Configuration

VariableDescription
BASEROW_ANTHROPIC_API_KEYYour Anthropic API key
BASEROW_ANTHROPIC_MODELSComma-separated list of models (e.g., claude-3-5-sonnet-20241022)

Ollama Configuration (Self-hosted)

VariableDescription
BASEROW_OLLAMA_HOSTYour Ollama server URL
BASEROW_OLLAMA_MODELSComma-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

VariableDescription
AWS_ACCESS_KEY_IDAWS access key
AWS_SECRET_ACCESS_KEYAWS secret key
AWS_STORAGE_BUCKET_NAMES3 bucket name
AWS_S3_REGION_NAMEAWS region (e.g., us-east-1)
AWS_S3_ENDPOINT_URLCustom endpoint for S3-compatible services

Google Cloud Storage

VariableDescription
GS_BUCKET_NAMEGCS bucket name
GS_CREDENTIALS_FILE_PATHPath 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:

Terminal window
docker-compose up -d

Access 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:

  1. Back up your data (especially if using the embedded database)
  2. Update the Docker image tag to the new version
  3. 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_URL exactly 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/data volume is properly mounted
  • Check volume permissions (should be owned by UID/GID 9999)

Additional Resources