services: rustpad: build: context: . dockerfile: Dockerfile image: rustpad:${IMAGE_TAG:-local} restart: unless-stopped environment: APP_HOST: ${APP_HOST:-0.0.0.0} APP_PORT: ${APP_PORT:-3000} DATABASE_URL: ${DATABASE_URL:-sqlite:///data/db/rustpad.db?mode=rwc&journal_mode=WAL&busy_timeout=5000} DATABASE_MAX_CONNECTIONS: ${DATABASE_MAX_CONNECTIONS:-8} STATIC_DIR: ${STATIC_DIR:-/app/static} FILES_DIR: ${FILES_DIR:-/data/files} STORAGE_DRIVER: ${STORAGE_DRIVER:-local} S3_ENDPOINT: ${S3_ENDPOINT:-} S3_REGION: ${S3_REGION:-us-east-1} S3_BUCKET: ${S3_BUCKET:-} S3_ACCESS_KEY: ${S3_ACCESS_KEY:-} S3_SECRET_KEY: ${S3_SECRET_KEY:-} S3_FORCE_PATH_STYLE: ${S3_FORCE_PATH_STYLE:-false} UPLOAD_MAX_SIZE_MB: ${UPLOAD_MAX_SIZE_MB:-20} REGISTRATION_ENABLED: ${REGISTRATION_ENABLED:-false} ACCOUNT_CONFIRMATION_REQUIRED: ${ACCOUNT_CONFIRMATION_REQUIRED:-false} ANONYMOUS_ACCESS_TOKEN_TTL_DAYS: ${ANONYMOUS_ACCESS_TOKEN_TTL_DAYS:-7} USER_SESSION_TTL_DAYS: ${USER_SESSION_TTL_DAYS:-30} RUST_LOG: ${RUST_LOG:-rustpad=info,tower_http=warn} FRONTEND_LOG_LEVEL: ${FRONTEND_LOG_LEVEL:-warn} PUBLIC_URL: ${PUBLIC_URL:-http://localhost:3000} SMTP_HOST: ${SMTP_HOST:-} SMTP_PORT: ${SMTP_PORT:-587} SMTP_USERNAME: ${SMTP_USERNAME:-} SMTP_PASSWORD: ${SMTP_PASSWORD:-} SMTP_FROM: ${SMTP_FROM:-} ports: - "${RUSTPAD_PORT:-3000}:${APP_PORT:-3000}" volumes: - ./data:/data postgres: image: postgres:18 profiles: ["pgsql"] environment: POSTGRES_DB: ${POSTGRES_DB:-rustpad} POSTGRES_USER: ${POSTGRES_USER:-rustpad} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-rustpad} PGDATA: /var/lib/postgresql volumes: - ./data/db/pgsql:/var/lib/postgresql healthcheck: test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-rustpad} -d ${POSTGRES_DB:-rustpad}"] interval: 5s timeout: 3s retries: 20 mysql: image: mysql:8 profiles: ["mysql"] environment: MYSQL_DATABASE: ${MYSQL_DATABASE:-rustpad} MYSQL_USER: ${MYSQL_USER:-rustpad} MYSQL_PASSWORD: ${MYSQL_PASSWORD:-rustpad} MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD:-root} command: ["--character-set-server=utf8mb4", "--collation-server=utf8mb4_unicode_ci"] volumes: - ./data/db/mysql:/var/lib/mysql healthcheck: test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-p${MYSQL_ROOT_PASSWORD:-root}"] interval: 5s timeout: 3s retries: 30 garage: image: dxflrs/garage:v2.3.0 profiles: ["s3"] restart: unless-stopped command: ["/garage", "server", "--single-node", "--default-bucket"] environment: GARAGE_DEFAULT_ACCESS_KEY: ${S3_ACCESS_KEY:-GK0123456789abcdef0123456789abcdef} GARAGE_DEFAULT_SECRET_KEY: ${S3_SECRET_KEY:-0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef} GARAGE_DEFAULT_BUCKET: ${S3_BUCKET:-attachments} ports: - "${GARAGE_S3_PORT:-3900}:3900" - "${GARAGE_ADMIN_PORT:-3903}:3903" volumes: - ./docker/garage/garage.toml:/etc/garage.toml:ro - ./data/garage/meta:/var/lib/garage/meta - ./data/garage/data:/var/lib/garage/data