Teable logo

Teable

Collaborate with your team in real-time, and scale to millions of rows

Alternative to: airtable


Collaborate with your team in real-time, and scale to millions of rows

Teable Docker Compose example

Self-host Teable on your own server, homelab, or VPS starting from this Docker Compose example. It runs Teable in Docker containers using the official ghcr.io/teableio/teable:latest, postgres:15.4, redis:7 images, with persistent volumes and automatic restarts preconfigured. Review the environment variables and adjust them to your setup, save the file as compose.yml (or docker-compose.yml), and start the stack with docker compose up -d.

services:
  teable:
    image: ghcr.io/teableio/teable:latest
    restart: unless-stopped
    volumes:
      - teable-data:/app/.assets:rw
    environment:
      # Postgres
      POSTGRES_HOST: "changeme"
      POSTGRES_PORT: "5432"
      POSTGRES_DB: "changeme"
      POSTGRES_USER: "changeme"
      POSTGRES_PASSWORD: "changeme"
      SECRET_KEY: ""
      # Redis
      REDIS_HOST: "teable-cache"
      REDIS_PORT: "6379"
      REDIS_DB: "0"
      REDIS_PASSWORD: "ed1818607983ea4ad84a3cdffe"
      # App
      PUBLIC_ORIGIN: "changeme"
      TIMEZONE: "UTC"
      PRISMA_DATABASE_URL: "postgresql://changeme:changeme@changeme:5432/changeme"
      BACKEND_CACHE_PROVIDER: "redis"
      BACKEND_CACHE_REDIS_URI: "redis://default:ed1818607983ea4ad84a3cdffe@:/"
    depends_on:
      teable-db:
        condition: service_healthy
      teable-cache:
        condition: service_healthy

  teable-db:
    image: postgres:15.4
    restart: unless-stopped
    ports:
      - '42345:5432'
    volumes:
      - teable-db:/var/lib/postgresql/data:rw
    environment:
      - TZ=UTC
      - POSTGRES_DB=changeme
      - POSTGRES_USER=changeme
      - POSTGRES_PASSWORD=changeme
    healthcheck:
      test: ['CMD-SHELL', "sh -c 'pg_isready -U changeme -d changeme'"]
      interval: 10s
      timeout: 3s
      retries: 3

  teable-cache:
    image: redis:7
    restart: unless-stopped
    volumes:
      - teable-cache:/data:rw
    command: redis-server --appendonly yes --requirepass ed1818607983ea4ad84a3cdffe
    healthcheck:
      test: ['CMD', 'redis-cli', '--raw', 'incr', 'ping']
      interval: 10s
      timeout: 3s
      retries: 3

volumes:
  teable-data:
  teable-db:
  teable-cache:

Values set to changeme are required — replace them with your own values before starting Teable.

Prefer a managed setup? WinterFlow installs, configures, and updates Teable for you using this same Docker Compose configuration.