docker.recipes

Baserow

intermediate

Open-source Airtable alternative.

Overview

Baserow is an open-source, no-code database platform that provides a user-friendly alternative to Airtable, allowing teams to create collaborative databases, spreadsheets, and applications without programming knowledge. Founded in 2020, Baserow emerged as a response to the need for data sovereignty and customization that proprietary solutions couldn't provide, offering real-time collaboration, custom field types, and automatic API generation for every database created. This Docker stack combines Baserow with PostgreSQL for robust relational data storage and Redis for high-performance caching and session management. PostgreSQL serves as the primary data store, leveraging its ACID compliance and JSON support to handle Baserow's flexible schema requirements, while Redis accelerates user sessions, caches frequently accessed data, and manages real-time collaboration features. Small businesses seeking Airtable alternatives, development teams requiring custom database solutions, and organizations prioritizing data privacy will find this stack particularly valuable. The combination delivers enterprise-grade reliability through PostgreSQL's proven stability, lightning-fast user interactions via Redis caching, and the flexibility to host sensitive data on-premises while maintaining the intuitive interface that makes Baserow accessible to non-technical users.

Key Features

  • Visual database builder with drag-and-drop interface for creating tables, views, and relationships without SQL knowledge
  • Automatic REST API generation for every database and table created, enabling custom integrations and mobile app development
  • Real-time collaborative editing with live updates across multiple users and conflict resolution
  • PostgreSQL-powered advanced field types including lookups, formulas, file attachments, and relational links between tables
  • Redis-accelerated performance for instant loading of large datasets and responsive user interface interactions
  • Row-level permissions and team-based access controls with granular sharing options
  • Plugin architecture supporting custom field types, views, and integrations through Baserow's extensible framework
  • Multi-view support including grid, gallery, kanban, and calendar views with custom filtering and sorting

Common Use Cases

  • 1Small business CRM replacement for managing customers, leads, and sales pipelines with custom fields and automated workflows
  • 2Project management hub for development teams tracking tasks, sprints, and deliverables with integrated file storage
  • 3Content management system for marketing teams organizing campaigns, assets, and publication schedules
  • 4Inventory management for e-commerce businesses tracking products, suppliers, and stock levels with automated reordering
  • 5Event planning platform coordinating venues, vendors, attendees, and logistics with real-time collaboration
  • 6Research data collection and analysis for academic institutions managing survey responses and experimental data
  • 7HR management system for tracking employee records, performance reviews, and recruitment processes with privacy compliance

Prerequisites

  • Minimum 2GB RAM (4GB recommended) to accommodate PostgreSQL data processing and Redis caching simultaneously
  • Ports 80 and 443 available for Baserow web interface and SSL termination
  • Basic understanding of database concepts and user permission management
  • Docker Compose knowledge for environment variable configuration and volume management
  • SSL certificate setup knowledge if deploying with HTTPS in production environments
  • Backup strategy planning for PostgreSQL data persistence and disaster recovery

For development & testing. Review security settings, change default credentials, and test thoroughly before production use. See Terms

docker-compose.yml

docker-compose.yml
1services:
2 baserow:
3 image: baserow/baserow:latest
4 container_name: baserow
5 restart: unless-stopped
6 environment:
7 BASEROW_PUBLIC_URL: http://localhost
8 DATABASE_HOST: postgres
9 DATABASE_NAME: baserow
10 DATABASE_USER: baserow
11 DATABASE_PASSWORD: ${DB_PASSWORD}
12 REDIS_HOST: redis
13 SECRET_KEY: ${SECRET_KEY}
14 volumes:
15 - baserow_data:/baserow/data
16 ports:
17 - "80:80"
18 - "443:443"
19 depends_on:
20 - postgres
21 - redis
22 networks:
23 - baserow
24
25 postgres:
26 image: postgres:15-alpine
27 container_name: baserow-postgres
28 restart: unless-stopped
29 environment:
30 POSTGRES_USER: baserow
31 POSTGRES_PASSWORD: ${DB_PASSWORD}
32 POSTGRES_DB: baserow
33 volumes:
34 - postgres_data:/var/lib/postgresql/data
35 networks:
36 - baserow
37
38 redis:
39 image: redis:alpine
40 container_name: baserow-redis
41 restart: unless-stopped
42 networks:
43 - baserow
44
45volumes:
46 baserow_data:
47 postgres_data:
48
49networks:
50 baserow:
51 driver: bridge

.env Template

.env
1DB_PASSWORD=changeme
2SECRET_KEY=generate-a-secret-key

Usage Notes

  1. 1Access at http://localhost
  2. 2No-code database builder
  3. 3API auto-generation

Individual Services(3 services)

Copy individual services to mix and match with your existing compose files.

baserow
baserow:
  image: baserow/baserow:latest
  container_name: baserow
  restart: unless-stopped
  environment:
    BASEROW_PUBLIC_URL: http://localhost
    DATABASE_HOST: postgres
    DATABASE_NAME: baserow
    DATABASE_USER: baserow
    DATABASE_PASSWORD: ${DB_PASSWORD}
    REDIS_HOST: redis
    SECRET_KEY: ${SECRET_KEY}
  volumes:
    - baserow_data:/baserow/data
  ports:
    - "80:80"
    - "443:443"
  depends_on:
    - postgres
    - redis
  networks:
    - baserow
postgres
postgres:
  image: postgres:15-alpine
  container_name: baserow-postgres
  restart: unless-stopped
  environment:
    POSTGRES_USER: baserow
    POSTGRES_PASSWORD: ${DB_PASSWORD}
    POSTGRES_DB: baserow
  volumes:
    - postgres_data:/var/lib/postgresql/data
  networks:
    - baserow
redis
redis:
  image: redis:alpine
  container_name: baserow-redis
  restart: unless-stopped
  networks:
    - baserow

Quick Start

terminal
1# 1. Create the compose file
2cat > docker-compose.yml << 'EOF'
3services:
4 baserow:
5 image: baserow/baserow:latest
6 container_name: baserow
7 restart: unless-stopped
8 environment:
9 BASEROW_PUBLIC_URL: http://localhost
10 DATABASE_HOST: postgres
11 DATABASE_NAME: baserow
12 DATABASE_USER: baserow
13 DATABASE_PASSWORD: ${DB_PASSWORD}
14 REDIS_HOST: redis
15 SECRET_KEY: ${SECRET_KEY}
16 volumes:
17 - baserow_data:/baserow/data
18 ports:
19 - "80:80"
20 - "443:443"
21 depends_on:
22 - postgres
23 - redis
24 networks:
25 - baserow
26
27 postgres:
28 image: postgres:15-alpine
29 container_name: baserow-postgres
30 restart: unless-stopped
31 environment:
32 POSTGRES_USER: baserow
33 POSTGRES_PASSWORD: ${DB_PASSWORD}
34 POSTGRES_DB: baserow
35 volumes:
36 - postgres_data:/var/lib/postgresql/data
37 networks:
38 - baserow
39
40 redis:
41 image: redis:alpine
42 container_name: baserow-redis
43 restart: unless-stopped
44 networks:
45 - baserow
46
47volumes:
48 baserow_data:
49 postgres_data:
50
51networks:
52 baserow:
53 driver: bridge
54EOF
55
56# 2. Create the .env file
57cat > .env << 'EOF'
58DB_PASSWORD=changeme
59SECRET_KEY=generate-a-secret-key
60EOF
61
62# 3. Start the services
63docker compose up -d
64
65# 4. View logs
66docker compose logs -f

One-Liner

Run this command to download and set up the recipe in one step:

terminal
1curl -fsSL https://docker.recipes/api/recipes/baserow/run | bash

Troubleshooting

  • Baserow fails to start with database connection error: Verify DATABASE_HOST matches the PostgreSQL service name and ensure DB_PASSWORD environment variable is properly set
  • Redis connection timeout during user sessions: Check Redis container status and verify REDIS_HOST environment variable points to the correct service name
  • PostgreSQL data corruption after container restart: Ensure postgres_data volume is properly mounted and has sufficient disk space with appropriate write permissions
  • Baserow API requests return 500 errors: Verify SECRET_KEY environment variable is set and consistent across container restarts
  • File uploads fail or disappear: Confirm baserow_data volume is correctly mounted to /baserow/data and has adequate storage space
  • BASEROW_PUBLIC_URL mismatch causing authentication issues: Update the public URL to match your actual domain or IP address for proper CORS and session handling

Community Notes

Loading...
Loading notes...

Download Recipe Kit

Get all files in a ready-to-deploy package

Includes docker-compose.yml, .env template, README, and license

Ad Space