budibase Docker & Self-Hosted Deployment

GitHub

AI agents, automations and apps that run your operations. Model agnostic.

RAW Compose
1. Pull Image (DOCKERHUB) docker pull budibase/proxy
2. Docker Run (1-Click Launch) docker run -d --name budibase -p 4000:4000 --restart always budibase/proxy
3. Podman Run podman run -d --name budibase -p 4000:4000 --restart always budibase/proxy
4. Skopeo Inspect (Zero-Pull Manifest) skopeo inspect docker://docker.io/budibase/proxy:latest
5. ORAS Pull (OCI Artifact) oras pull budibase/proxy
6. Compose Deployment docker compose up -d
hosting/docker-compose.build.yaml
Download .yml
# optional ports are specified throughout for more advanced use cases.

services:
  app-service:
    build:
      context: ..
      dockerfile: packages/server/Dockerfile
      args:
        - BUDIBASE_VERSION=0.0.0+dev-docker
    container_name: build-bbapps
    environment:
      SELF_HOSTED: 1
      COUCH_DB_URL: http://${COUCH_DB_USER}:${COUCH_DB_PASSWORD}@couchdb-service:5984
      WORKER_URL: http://worker-service:4003
      MINIO_URL: http://minio-service:9000
      MINIO_ACCESS_KEY: ${MINIO_ACCESS_KEY}
      MINIO_SECRET_KEY: ${MINIO_SECRET_KEY}
      INTERNAL_API_KEY: ${INTERNAL_API_KEY}
      BUDIBASE_ENVIRONMENT: ${BUDIBASE_ENVIRONMENT}
      PORT: 4002
      API_ENCRYPTION_KEY: ${API_ENCRYPTION_KEY}
      JWT_SECRET: ${JWT_SECRET}
      LOG_LEVEL: info
      ENABLE_ANALYTICS: "true"
      REDIS_URL: redis-service:6379
      REDIS_PASSWORD: ${REDIS_PASSWORD}
      LITELLM_URL: http://litellm-service:4000
      LITELLM_MASTER_KEY: ${LITELLM_MASTER_KEY}
      BB_ADMIN_USER_EMAIL: ${BB_ADMIN_USER_EMAIL}
      BB_ADMIN_USER_PASSWORD: ${BB_ADMIN_USER_PASSWORD}
      PASSWORD_MIN_LENGTH: ${PASSWORD_MIN_LENGTH:-12}
      PASSWORD_MAX_LENGTH: ${PASSWORD_MAX_LENGTH:-512}
      PASSWORD_REGEX: ${PASSWORD_REGEX:-}
      PASSWORD_REGEX_ERROR_MESSAGE: ${PASSWORD_REGEX_ERROR_MESSAGE:-}
      PLUGINS_DIR: ${PLUGINS_DIR}
      TENANT_FEATURE_FLAGS: "*:SQS"
    depends_on:
      - worker-service
      - redis-service
      - litellm-service

  worker-service:
    build:
      context: ..
      dockerfile: packages/worker/Dockerfile
      args:
        - BUDIBASE_VERSION=0.0.0+dev-docker
    container_name: build-bbworker
    environment:
      SELF_HOSTED: 1
      PORT: 4003
      CLUSTER_PORT: ${MAIN_PORT}
      API_ENCRYPTION_KEY: ${API_ENCRYPTION_KEY}
      JWT_SECRET: ${JWT_SECRET}
      MINIO_ACCESS_KEY: ${MINIO_ACCESS_KEY}
      MINIO_SECRET_KEY: ${MINIO_SECRET_KEY}
      MINIO_URL: http://minio-service:9000
      APPS_URL: http://app-service:4002
      COUCH_DB_USERNAME: ${COUCH_DB_USER}
      COUCH_DB_PASSWORD: ${COUCH_DB_PASSWORD}
      COUCH_DB_URL: http://${COUCH_DB_USER}:${COUCH_DB_PASSWORD}@couchdb-service:5984
      INTERNAL_API_KEY: ${INTERNAL_API_KEY}
      REDIS_URL: redis-service:6379
      REDIS_PASSWORD: ${REDIS_PASSWORD}
      LITELLM_URL: http://litellm-service:4000
      LITELLM_MASTER_KEY: ${LITELLM_MASTER_KEY}
      TENANT_FEATURE_FLAGS: "*:SQS"
      PASSWORD_MIN_LENGTH: ${PASSWORD_MIN_LENGTH:-12}
      PASSWORD_MAX_LENGTH: ${PASSWORD_MAX_LENGTH:-512}
      PASSWORD_REGEX: ${PASSWORD_REGEX:-}
      PASSWORD_REGEX_ERROR_MESSAGE: ${PASSWORD_REGEX_ERROR_MESSAGE:-}
    depends_on:
      - redis-service
      - minio-service
      - litellm-service

  proxy-service-docker:
    build:
      context: ./proxy
    ports:
      - "${MAIN_PORT}:10000"
    container_name: build-bbproxy
    image: budibase/proxy
    environment:
      - PROXY_RATE_LIMIT_WEBHOOKS_PER_SECOND=10
      - PROXY_RATE_LIMIT_API_PER_SECOND=50
      - APPS_UPSTREAM_URL=http://app-service:4002
      - WORKER_UPSTREAM_URL=http://worker-service:4003
      - MINIO_UPSTREAM_URL=http://minio-service:9000
      - COUCHDB_UPSTREAM_URL=http://couchdb-service:5984
      - RESOLVER=127.0.0.11
    depends_on:
      - minio-service
      - worker-service
      - app-service
      - couchdb-service

  litellm-service:
    image: docker.io/litellm/litellm:main-v1.83.10-stable.patch.3
    ports:
      - "${LITELLM_PORT:-4000}:4000"
    volumes:
      - ./litellm_config.yaml:/app/config.yaml
    environment:
      DATABASE_URL: "postgresql://${LITELLM_DB_USER}:${LITELLM_DB_PASSWORD}@litellm-db:5432/${LITELLM_DB_NAME}"
      STORE_MODEL_IN_DB: "True"
      LITELLM_REASONING_AUTO_SUMMARY: "true"
      LITELLM_MASTER_KEY: ${LITELLM_MASTER_KEY}
      LITELLM_SALT_KEY: ${LITELLM_SALT_KEY}
    command: ["--config", "/app/config.yaml"]
    depends_on:
      - litellm-db
    healthcheck:
      test:
        [
          "CMD-SHELL",
          "python -c \"import urllib.request; urllib.request.urlopen('http://localhost:4000/health/liveliness')\"",
        ]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 40s

  litellm-db:
    image: postgres:16
    environment:
      POSTGRES_DB: ${LITELLM_DB_NAME}
      POSTGRES_USER: ${LITELLM_DB_USER}
      POSTGRES_PASSWORD: ${LITELLM_DB_PASSWORD}
    volumes:
      - litellm_data:/var/lib/postgresql/data
    healthcheck:
      test:
        ["CMD-SHELL", "pg_isready -d ${LITELLM_DB_NAME} -U ${LITELLM_DB_USER}"]
      interval: 1s
      timeout: 5s
      retries: 10

volumes:
  litellm_data:
    driver: local