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} UPLOAD_MAX_SIZE_MB: ${UPLOAD_MAX_SIZE_MB:-20} REGISTRATION_ENABLED: ${REGISTRATION_ENABLED:-false} 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