# name: invoiceninja x-logging: &default-logging options: max-size: "10m" max-file: "3" driver: json-file x-app-volumes: &volumes volumes: - app_storage:/app/storage - caddy_data:/data services: app: build: context: . image: invoiceninja/invoiceninja-octane:${TAG:-latest} restart: unless-stopped # php artisan help octane:frankenphp command: --port=80 --workers=2 --log-level=info # command: --host=example.com --port=443 --workers=2 --https --http-redirect --log-level=info ports: - "80:80" # HTTP # - "443:443" # HTTPS # - "443:443/udp" # HTTP/3, Works for chromium based browser, but causes H3_GENERAL_PROTOCOL_ERROR for pdf previews in Firefox env_file: - ./.env environment: LARAVEL_ROLE: app <<: *volumes depends_on: mysql: condition: service_healthy redis: condition: service_healthy # mariadb: # condition: service_healthy # valkey: # condition: service_healthy logging: *default-logging app-worker: image: invoiceninja/invoiceninja-octane:${TAG:-latest} restart: unless-stopped # php artisan help queue:work command: --verbose --sleep=3 --tries=3 --max-time=3600 deploy: mode: replicated replicas: 2 env_file: - ./.env environment: LARAVEL_ROLE: worker <<: *volumes healthcheck: test: ["CMD", "pgrep", "-f", "queue:work"] start_period: 10s depends_on: app: condition: service_healthy logging: *default-logging app-scheduler: image: invoiceninja/invoiceninja-octane:${TAG:-latest} restart: unless-stopped # php artisan help schedule:work command: --verbose env_file: - ./.env environment: LARAVEL_ROLE: scheduler <<: *volumes healthcheck: test: ["CMD", "pgrep", "-f", "schedule:work"] start_period: 10s depends_on: app: condition: service_healthy logging: *default-logging mysql: image: mysql:8 restart: unless-stopped environment: MYSQL_DATABASE: ${DB_DATABASE} MYSQL_USER: ${DB_USERNAME} MYSQL_PASSWORD: ${DB_PASSWORD} MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASSWORD} volumes: - mysql_data:/var/lib/mysql healthcheck: test: [ "CMD", "mysqladmin", "ping", "-h", "localhost", "-u${MYSQL_USER}", "-p${MYSQL_PASSWORD}" ] interval: 10s timeout: 5s retries: 5 logging: *default-logging redis: image: redis:alpine restart: unless-stopped volumes: - redis_data:/data healthcheck: test: [ "CMD", "redis-cli", "ping" ] interval: 10s timeout: 5s retries: 5 logging: *default-logging # mariadb: # image: mariadb:11.4 # restart: unless-stopped # environment: # MARIADB_DATABASE: ${DB_DATABASE} # MARIADB_USER: ${DB_USERNAME} # MARIADB_PASSWORD: ${DB_PASSWORD} # MARIADB_ROOT_PASSWORD: ${DB_ROOT_PASSWORD} # volumes: # - mariadb:/var/lib/mysql # healthcheck: # test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"] # start_period: 60s # logging: *default-logging # valkey: # image: valkey/valkey:8 # restart: unless-stopped # volumes: # - valkey:/data # healthcheck: # test: [ "CMD", "valkey-cli", "ping" ] # start_period: 10s # logging: *default-logging volumes: app_storage: caddy_data: mysql_data: redis_data: # mariadb: # valkey: