version: '3.7' services: portal: image: wizewerx/bettermail_portal:master command: - bundle - exec - rails - s networks: - default - routable configs: - source: betbeast target: /app/.env logging: driver: json-file options: max-size: 10M deploy: labels: traefik.http.routers.portal.tls: 'true' traefik.http.routers.portal.rule: Host(`portal.bettermail.io`) traefik.http.routers.portal.entrypoints: websecure traefik.http.services.portal.loadbalancer.server.port: '3000' traefik.enable: 'true' swarmpit.service.deployment.autoredeploy: 'true' update_config: delay: 60s order: start-first restart_policy: condition: on-failure window: 120s max_attempts: 3 placement: constraints: - node.labels.db == 2 consumer: image: wizewerx/bettermail_consumer:master command: - bundle - exec - sidekiq environment: RUN_SIDEKIQ_CRON: 'yes' networks: - default configs: - source: betbeast target: /app/.env logging: driver: json-file options: max-size: 10M deploy: labels: swarmpit.service.deployment.autoredeploy: 'true' update_config: delay: 60s order: start-first restart_policy: condition: on-failure window: 120s max_attempts: 3 placement: constraints: - node.labels.db == 2 proxy: image: wizewerx/bettermail_proxy:master command: - bundle - exec - sidekiq environment: RUN_SIDEKIQ_CRON: 'yes' networks: - default configs: - source: betbeast target: /app/.env logging: driver: json-file options: max-size: 10M deploy: labels: swarmpit.service.deployment.autoredeploy: 'true' update_config: delay: 60s order: start-first restart_policy: condition: on-failure window: 120s max_attempts: 3 placement: constraints: - node.labels.db == 2 notifications: image: wizewerx/bettermail_notifications:master command: - bundle - exec - sidekiq environment: RUN_SIDEKIQ_CRON: 'yes' networks: - default configs: - source: betbeast target: /app/.env logging: driver: json-file options: max-size: 10M deploy: labels: swarmpit.service.deployment.autoredeploy: 'true' update_config: delay: 60s order: start-first restart_policy: condition: on-failure window: 120s max_attempts: 3 placement: constraints: - node.labels.db == 2 db: image: postgres:14.0-alpine environment: POSTGRES_DB: bettermail POSTGRES_PASSWORD: bettermail POSTGRES_USER: bettermail volumes: - bettermail_db_data:/var/lib/postgresql/data networks: - databases - default logging: driver: json-file deploy: replicas: 0 restart_policy: condition: on-failure window: 120s max_attempts: 3 placement: constraints: - node.labels.db == 2 db_backup: image: tiredofit/db-backup:latest environment: COMPRESSION: GZ CONTAINER_ENABLE_MONITORING: 'FALSE' DB_CLEANUP_TIME: '10' DB_DUMP_FREQ: '15' DB_HOST: db DB_NAME: bettermail DB_PASS: bettermail DB_TYPE: pgsql DB_USER: bettermail ENABLE_CHECKSUM: 'FALSE' volumes: - /mnt/s3_share/backups/databases:/backup networks: - default logging: driver: json-file deploy: restart_policy: condition: on-failure window: 120s max_attempts: 3 rabbitmq: image: rabbitmq:3.11-management-alpine ports: - "5672:5672" - "15672:15672" volumes: - bettermail_rabbitmq:/data networks: - default logging: driver: json-file deploy: labels: traefik.http.bettermail_rabbitmq.portal.tls: 'true' traefik.http.routers.bettermail_rabbitmq.rule: Host(`queues.bettermail.io`) traefik.http.routers.bettermail_rabbitmq.entrypoints: websecure traefik.http.services.bettermail_rabbitmq.loadbalancer.server.port: '8080' traefik.enable: 'true' swarmpit.service.deployment.autoredeploy: 'true' placement: constraints: - node.labels.db == 2 networks: databases: external: true default: driver: overlay routable: external: true volumes: betbeast_db_data: betbeast_redis: configs: betbeast: external: true