# Quorla on one server: docker compose up -d --build # - app: the dashboard + publishing queue (port 4310 inside the Docker network only) # - caddy: HTTPS for APP_DOMAIN with automatic Let's Encrypt certificates # Live data stays in the folders next to this file, so rebuilding the image never touches it. services: app: build: . image: quorla:latest restart: unless-stopped env_file: .env environment: DASHBOARD_HOST: 0.0.0.0 DASHBOARD_COOKIE_SECURE: "true" TRUST_PROXY: uniquelocal SCHEDULER_ENABLED: "true" volumes: - ./data:/app/data - ./clients:/app/clients - ./team:/app/team - ./reports:/app/reports - ./branding:/app/branding expose: - "4310" caddy: image: caddy:2.8 restart: unless-stopped depends_on: [app] environment: APP_DOMAIN: ${APP_DOMAIN:?Set APP_DOMAIN in .env, e.g. app.quorlasocial.com} ACME_EMAIL: ${ACME_EMAIL:?Set ACME_EMAIL in .env (certificate expiry notices go here)} ports: - "80:80" - "443:443" - "443:443/udp" volumes: - ./deploy/Caddyfile:/etc/caddy/Caddyfile:ro - caddy_data:/data - caddy_config:/config volumes: caddy_data: caddy_config: