version: '3.9' x-mayan-container: &mayan-container depends_on: - postgresql - redis # Enable to use RabbitMQ #- rabbitmq env_file: .env environment: # Enable to use RabbitMQ # MAYAN_CELERY_BROKER_URL: amqp://${MAYAN_RABBITMQ_USER:-mayan}:${MAYAN_RABBITMQ_PASSWORD:-mayanrabbitpass}@rabbitmq:5672/${MAYAN_RABBITMQ_VHOST:-mayan} # To use RabbitMQ as broker, disable Redis as broker MAYAN_CELERY_BROKER_URL: redis://:${MAYAN_REDIS_PASSWORD:-mayanredispassword}@redis:6379/0 MAYAN_CELERY_RESULT_BACKEND: redis://:${MAYAN_REDIS_PASSWORD:-mayanredispassword}@redis:6379/1 MAYAN_DATABASES: "{'default':{'ENGINE':'django.db.backends.postgresql','NAME':'${MAYAN_DATABASE_NAME:-mayan}','PASSWORD':'${MAYAN_DATABASE_PASSWORD:-mayandbpass}','USER':'${MAYAN_DATABASE_USER:-mayan}','HOST':'${MAYAN_DATABASE_HOST:-postgresql}'}}" MAYAN_DOCKER_WAIT: "${MAYAN_DATABASE_HOST:-postgresql}:5432 redis:6379" MAYAN_LOCK_MANAGER_BACKEND: mayan.apps.lock_manager.backends.redis_lock.RedisLock MAYAN_LOCK_MANAGER_BACKEND_ARGUMENTS: "{'redis_url':'redis://:${MAYAN_REDIS_PASSWORD:-mayanredispassword}@redis:6379/2'}" # Replace with the line below when using RabbitMQ # MAYAN_DOCKER_WAIT: "${MAYAN_DATABASE_HOST:-postgresql}:5432 redis:6379 rabbitmq:5672" image: ${MAYAN_DOCKER_IMAGE_NAME:-mayanedms/mayanedms}:${MAYAN_DOCKER_IMAGE_TAG:-s4.0} networks: - bridge restart: unless-stopped volumes: - ${MAYAN_APP_VOLUME:-app}:/var/lib/mayan # Optional volumes to access external data like staging or watch folders # - /opt/staging_files:/staging_files # - /opt/watch_folder:/watch_folder networks: bridge: driver: bridge services: app: <<: *mayan-container labels: - "traefik.enable=true" - "traefik.http.routers.app.rule=Host(`www.example.com`)" # Replace this with your published URL - "traefik.http.routers.mayan.rule=Host(`mayan.app`)" - "traefik.http.routers.mayan.entrypoints=web" ports: - "80:8000" postgresql: command: - "postgres" - "-c" - "checkpoint_completion_target=0.6" - "-c" - "default_statistics_target=200" - "-c" - "maintenance_work_mem=128MB" - "-c" - "max_connections=200" - "-c" - "shared_buffers=256MB" - "-c" - "work_mem=8MB" environment: POSTGRES_DB: ${MAYAN_DATABASE_NAME:-mayan} POSTGRES_PASSWORD: ${MAYAN_DATABASE_PASSWORD:-mayandbpass} POSTGRES_USER: ${MAYAN_DATABASE_USER:-mayan} image: postgres:${MAYAN_DOCKER_POSTGRES_TAG:-10.15-alpine} networks: - bridge restart: unless-stopped volumes: - ${MAYAN_POSTGRES_VOLUME:-postgres}:/var/lib/postgresql/data redis: command: - redis-server - --appendonly - "no" - --databases - "3" - --maxmemory - "100mb" - --maxclients - "500" - --maxmemory-policy - "allkeys-lru" - --save - "" - --tcp-backlog - "256" - --requirepass - "${MAYAN_REDIS_PASSWORD:-mayanredispassword}" image: redis:${MAYAN_DOCKER_REDIS_TAG:-6.0-alpine} networks: - bridge restart: unless-stopped volumes: - ${MAYAN_REDIS_VOLUME:-redis}:/data # Celery flower a monitor for Celery celery_flower: <<: *mayan-container command: - run_celery - flower ports: - "5555:5555" profiles: - celery_flower # Run a frontend gunicorn container frontend: <<: *mayan-container command: - run_worker - fast ports: - "81:8000" profiles: - extra_frontend # Enable to run standalone workers mountindex: <<: *mayan-container cap_add: - SYS_ADMIN devices: - "/dev/fuse:/dev/fuse" entrypoint: - /bin/bash - -c - 'mkdir --parents /mnt/index && chown mayan:mayan /mnt/index && /usr/local/bin/entrypoint.sh run_command "mountindex --allow-other creation_date /mnt/index"' # Replace "creation_date" with the index of your choice. profiles: - mountindex security_opt: - apparmor:unconfined volumes: - type: bind source: /mnt/mayan_indexes/creation_date # Host location where the index will show up. target: /mnt/index # Location inside the container where the index will be mounted. Must the same is in the "entrypoint" section. bind: propagation: shared # Run a separate class A worker worker_a: <<: *mayan-container command: - run_worker - worker_a profiles: - extra_worker_a # Run a separate class B worker worker_b: <<: *mayan-container command: - run_worker - worker_b profiles: - extra_worker_b # Run a separate class C worker worker_c: <<: *mayan-container command: - run_worker - worker_c profiles: - extra_worker_c # Run a separate class D worker worker_d: <<: *mayan-container command: - run_worker - worker_d profiles: - extra_worker_d # Optional services traefik: container_name: "traefik" command: #- "--log.level=DEBUG" - "--api.insecure=true" - "--providers.docker=true" - "--providers.docker.exposedbydefault=false" - "--entrypoints.web.address=:80" image: "traefik:v2.4" ports: - "80:80" - "8080:8080" profiles: - traefik volumes: - /var/run/docker.sock:/var/run/docker.sock:ro # Enable to use RabbitMQ # rabbitmq: # image: rabbitmq:${MAYAN_DOCKER_RABBITMQ_TAG:-3.8-alpine} # environment: # RABBITMQ_DEFAULT_USER: ${MAYAN_RABBITMQ_USER:-mayan} # RABBITMQ_DEFAULT_PASS: ${MAYAN_RABBITMQ_PASSWORD:-mayanrabbitpass} # RABBITMQ_DEFAULT_VHOST: ${MAYAN_RABBITMQ_VHOST:-mayan} # networks: # - bridge # restart: unless-stopped # volumes: # - ${MAYAN_RABBITMQ_VOLUME:-rabbitmq}:/var/lib/rabbitmq volumes: app: postgres: mountindex: rabbitmq: redis: