version: '3.5' services: # ---------------------------------------------------------------------- # SINGLE ENTRYPOINT # ---------------------------------------------------------------------- # webserver to handle all traffic. This can use let's encrypt to generate a SSL cert. traefik: image: traefik:1.7 command: - --loglevel=INFO - --api # Entrypoints - --defaultentrypoints=https,http - --entryPoints=Name:http Address::80 ${TRAEFIK_HTTP_REDIRECT:-""} - --entryPoints=Name:https Address::443 ${TRAEFIK_HTTPS_OPTIONS:-TLS} # Configuration for acme (https://letsencrypt.org/) - --acme=${TRAEFIK_ACME_ENABLE:-false} #- --acme.caserver=https://acme-staging-v02.api.letsencrypt.org/directory - --acme.email=${TRAEFIK_ACME_EMAIL:-""} - --acme.entrypoint=https - --acme.onhostrule=true - --acme.storage=/config/acme.json - --acme.httpchallenge.entrypoint=http - --acme.storage=/config/acme.json - --acme.acmelogging=true # DOCKER - --docker=true - --docker.endpoint=unix:///var/run/docker.sock - --docker.exposedbydefault=false - --docker.watch=true restart: unless-stopped networks: - clowder ports: - "${TRAEFIK_HTTP_PORT-8000}:80" - "${TRAEFIK_HTTPS_PORT-8443}:443" labels: - "traefik.enable=true" - "traefik.backend=traefik" - "traefik.port=8080" - "traefik.frontend.rule=${TRAEFIK_HOST:-}PathPrefixStrip: /traefik" - "traefik.website.frontend.whiteList.sourceRange=${TRAEFIK_IPFILTER:-172.16.0.0/12}" volumes: - /var/run/docker.sock:/var/run/docker.sock:ro - traefik:/config # ---------------------------------------------------------------------- # CLOWDER APPLICATION # ---------------------------------------------------------------------- # main clowder application clowder: image: clowder/clowder:${CLOWDER_VERSION:-latest} restart: unless-stopped networks: - clowder depends_on: - mongo environment: - CLOWDER_ADMINS=${CLOWDER_ADMINS:-admin@example.com} - CLOWDER_REGISTER=${CLOWDER_REGISTER:-false} - CLOWDER_CONTEXT=${CLOWDER_CONTEXT:-/} - CLOWDER_SSL=${CLOWDER_SSL:-false} - RABBITMQ_URI=${RABBITMQ_URI:-amqp://guest:guest@rabbitmq/%2F} - RABBITMQ_EXCHANGE=${RABBITMQ_EXCHANGE:-clowder} - RABBITMQ_CLOWDERURL=${RABBITMQ_CLOWDERURL:-http://clowder:9000} - SMTP_MOCK=${SMTP_MOCK:-true} - SMTP_SERVER=${SMTP_SERVER:-smtp} labels: - "traefik.enable=true" - "traefik.backend=clowder" - "traefik.port=9000" - "traefik.frontend.rule=${TRAEFIK_HOST:-}PathPrefix: ${CLOWDER_CONTEXT:-/}" volumes: - clowder-custom:/home/clowder/custom - clowder-data:/home/clowder/data # ---------------------------------------------------------------------- # CLOWDER DEPENDENCIES # ---------------------------------------------------------------------- # database to hold metadata (required) mongo: image: mongo:3.6 restart: unless-stopped networks: - clowder volumes: - mongo:/data/db # message broker (optional but needed for extractors) rabbitmq: image: rabbitmq:management-alpine restart: unless-stopped networks: - clowder environment: - RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS=-rabbitmq_management path_prefix "/rabbitmq" - RABBITMQ_DEFAULT_USER=${RABBITMQ_DEFAULT_USER:-guest} - RABBITMQ_DEFAULT_PASS=${RABBITMQ_DEFAULT_PASS:-guest} labels: - "traefik.enable=true" - "traefik.backend=rabbitmq" - "traefik.port=15672" - "traefik.frontend.rule=${TRAEFIK_HOST:-}PathPrefix: /rabbitmq" - "traefik.website.frontend.whiteList.sourceRange=${TRAEFIK_IPFILTER:-172.16.0.0/12}" volumes: - rabbitmq:/var/lib/rabbitmq # search index (optional, needed for search and sorting future) elasticsearch: image: elasticsearch:2 command: elasticsearch -Des.cluster.name="clowder" networks: - clowder restart: unless-stopped environment: - cluster.name=clowder volumes: - elasticsearch:/usr/share/elasticsearch/data # monitor clowder extractors monitor: image: clowder/monitor:${CLOWDER_VERSION:-latest} restart: unless-stopped networks: - clowder depends_on: - rabbitmq environment: - RABBITMQ_URI=${RABBITMQ_URI:-amqp://guest:guest@rabbitmq/%2F} - RABBITMQ_MGMT_PORT=15672 - RABBITMQ_MGMT_PATH=/rabbitmq labels: - "traefik.enable=true" - "traefik.backend=monitor" - "traefik.port=9999" - "traefik.frontend.rule=${TRAEFIK_FRONTEND_RULE:-}PathPrefixStrip:/monitor" # ---------------------------------------------------------------------- # NETWORK FOR CONTAINER COMMUNICATION # ---------------------------------------------------------------------- networks: clowder: # ---------------------------------------------------------------------- # VOLUMES FOR PERSISTENT STORAGE # ---------------------------------------------------------------------- volumes: traefik: clowder-data: clowder-custom: mongo: rabbitmq: elasticsearch: