services: app: depends_on: postgres: condition: service_healthy image: docuseal/docuseal:latest ports: - 3000:3000 volumes: - ./docuseal:/data/docuseal # Only override the one file we changed; do NOT replace all of /app/lib # (the image ships Puma plugins under /app/lib). - ./lib/docuseal.rb:/app/lib/docuseal.rb environment: - RAILS_ENV=production - FORCE_SSL=${HOST} - DATABASE_URL=postgresql://postgres:postgres@postgres:5432/docuseal # Bypass corrupted EncryptedConfig; set to your public URL (e.g. https://yourhost.com) - APP_URL=${APP_URL:-http://localhost:3000} postgres: image: postgres:18 volumes: - './pg_data:/var/lib/postgresql/18/docker' environment: POSTGRES_USER: postgres POSTGRES_PASSWORD: postgres POSTGRES_DB: docuseal healthcheck: test: ["CMD-SHELL", "pg_isready -U postgres"] interval: 5s timeout: 5s retries: 5 caddy: image: caddy:latest command: caddy reverse-proxy --from $HOST --to app:3000 ports: - 80:80 - 443:443 - 443:443/udp volumes: - ./caddy:/data/caddy environment: - HOST=${HOST}