|
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:[email protected]} |
|
- 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.4 |
|
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/extractors-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: |