services: app: build: context: . dockerfile: Dockerfile args: BROWSER_LIBS_REFRESH: ${BROWSER_LIBS_REFRESH:-manual} image: rustpad:${IMAGE_TAG:-local} restart: unless-stopped env_file: - .env 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