The HAproxy docker image we were using is no longer maintained (hasn't been for years), but is built upon Alpine Linux which has a big security leak: https://talosintelligence.com/vulnerability_reports/TALOS-2019-0782 The security leak is fixed in this build of the docker image, but we should move to something else (lke Træfik).
184 lines
5.9 KiB
YAML
184 lines
5.9 KiB
YAML
version: '3.4'
|
|
services:
|
|
mongo:
|
|
image: mongo:3.4.2
|
|
container_name: mongo
|
|
restart: always
|
|
volumes:
|
|
- /data/storage/db:/data/db
|
|
- /data/storage/db-bak:/data/db-bak # for backing up stuff etc.
|
|
ports:
|
|
- "127.0.0.1:27017:27017"
|
|
logging:
|
|
driver: "json-file"
|
|
options:
|
|
max-size: "200k"
|
|
max-file: "20"
|
|
|
|
# Databases in use:
|
|
# 0: Flask Cache
|
|
# 1: Celery (backend)
|
|
# 2: Celery (broker)
|
|
redis:
|
|
image: redis:3.2.8
|
|
container_name: redis
|
|
restart: always
|
|
ports:
|
|
- "127.0.0.1:6379:6379"
|
|
logging:
|
|
driver: "json-file"
|
|
options:
|
|
max-size: "200k"
|
|
max-file: "20"
|
|
|
|
elastic:
|
|
# This image is defined in blender-cloud/docker/elastic
|
|
image: armadillica/elasticsearch:6.1.1
|
|
container_name: elastic
|
|
restart: always
|
|
volumes:
|
|
# NOTE: this path must be writable by UID=1000 GID=1000.
|
|
- /data/storage/elastic:/usr/share/elasticsearch/data
|
|
ports:
|
|
- "127.0.0.1:9200:9200"
|
|
environment:
|
|
ES_JAVA_OPTS: "-Xms256m -Xmx256m"
|
|
logging:
|
|
driver: "json-file"
|
|
options:
|
|
max-size: "200k"
|
|
max-file: "20"
|
|
|
|
elasticproxy:
|
|
image: armadillica/elasticproxy:1.2
|
|
container_name: elasticproxy
|
|
restart: always
|
|
command: /elasticproxy -elastic http://elastic:9200/
|
|
depends_on:
|
|
- elastic
|
|
logging:
|
|
driver: "json-file"
|
|
options:
|
|
max-size: "200k"
|
|
max-file: "20"
|
|
|
|
kibana:
|
|
# This image is defined in blender-cloud/docker/elastic
|
|
image: armadillica/kibana:6.1.1
|
|
container_name: kibana
|
|
restart: always
|
|
environment:
|
|
SERVER_NAME: "stats.cloud.blender.org"
|
|
ELASTICSEARCH_URL: http://elasticproxy:9200
|
|
CONSOLE_ENABLED: 'false'
|
|
VIRTUAL_HOST: http://stats.cloud.blender.org/*,https://stats.cloud.blender.org/*,http://stats.cloud.local/*,https://stats.cloud.local/*
|
|
VIRTUAL_HOST_WEIGHT: 20
|
|
FORCE_SSL: "true"
|
|
|
|
# See https://github.com/elastic/kibana/issues/5170#issuecomment-163042525
|
|
NODE_OPTIONS: "--max-old-space-size=200"
|
|
depends_on:
|
|
- elasticproxy
|
|
logging:
|
|
driver: "json-file"
|
|
options:
|
|
max-size: "200k"
|
|
max-file: "20"
|
|
|
|
blender_cloud:
|
|
image: armadillica/blender_cloud:latest
|
|
container_name: blender_cloud
|
|
restart: always
|
|
environment:
|
|
VIRTUAL_HOST: http://cloud.blender.org/*,https://cloud.blender.org/*,http://cloud.local/*,https://cloud.local/*
|
|
VIRTUAL_HOST_WEIGHT: 10
|
|
FORCE_SSL: "true"
|
|
GZIP_COMPRESSION_TYPE: "text/html text/plain text/css application/javascript"
|
|
PILLAR_CONFIG: /data/config/config_secrets.py
|
|
volumes:
|
|
# format: HOST:CONTAINER
|
|
- /data/config:/data/config:ro
|
|
- /data/storage/pillar:/data/storage/pillar
|
|
- /data/log:/var/log
|
|
depends_on:
|
|
- mongo
|
|
- redis
|
|
|
|
celery_worker:
|
|
image: armadillica/blender_cloud:latest
|
|
entrypoint: /celery-worker.sh
|
|
container_name: celery_worker
|
|
restart: always
|
|
environment:
|
|
PILLAR_CONFIG: /data/config/config_secrets.py
|
|
volumes:
|
|
# format: HOST:CONTAINER
|
|
- /data/config:/data/config:ro
|
|
- /data/storage/pillar:/data/storage/pillar
|
|
- /data/log:/var/log
|
|
depends_on:
|
|
- mongo
|
|
- redis
|
|
logging:
|
|
driver: "json-file"
|
|
options:
|
|
max-size: "200k"
|
|
max-file: "20"
|
|
|
|
celery_beat:
|
|
image: armadillica/blender_cloud:latest
|
|
entrypoint: /celery-beat.sh
|
|
container_name: celery_beat
|
|
restart: always
|
|
environment:
|
|
PILLAR_CONFIG: /data/config/config_secrets.py
|
|
volumes:
|
|
# format: HOST:CONTAINER
|
|
- /data/config:/data/config:ro
|
|
- /data/storage/pillar:/data/storage/pillar
|
|
- /data/log:/var/log
|
|
depends_on:
|
|
- mongo
|
|
- redis
|
|
- celery_worker
|
|
logging:
|
|
driver: "json-file"
|
|
options:
|
|
max-size: "200k"
|
|
max-file: "20"
|
|
|
|
letsencrypt:
|
|
image: armadillica/picohttp:1.0
|
|
container_name: letsencrypt
|
|
restart: always
|
|
environment:
|
|
WEBROOT: /data/letsencrypt
|
|
LISTEN: '[::]:80'
|
|
VIRTUAL_HOST: http://cloud.blender.org/.well-known/*, http://stats.cloud.blender.org/.well-known/*
|
|
VIRTUAL_HOST_WEIGHT: 30
|
|
volumes:
|
|
- /data/letsencrypt:/data/letsencrypt
|
|
|
|
haproxy:
|
|
# This image is defined in blender-cloud/docker/haproxy
|
|
image: armadillica/haproxy:1.6.7
|
|
container_name: haproxy
|
|
restart: always
|
|
ports:
|
|
- "443:443"
|
|
- "80:80"
|
|
environment:
|
|
- ADDITIONAL_SERVICES=docker:blender_cloud,docker:letsencrypt,docker:kibana
|
|
- CERT_FOLDER=/certs/
|
|
- TIMEOUT=connect 5s, client 5m, server 10m
|
|
- SSL_BIND_CIPHERS=ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:RSA+AESGCM:RSA+AES:!aNULL:!MD5:!DSS
|
|
- SSL_BIND_OPTIONS=no-sslv3
|
|
- EXTRA_GLOBAL_SETTINGS=tune.ssl.default-dh-param 2048
|
|
depends_on:
|
|
- blender_cloud
|
|
- letsencrypt
|
|
- kibana
|
|
volumes:
|
|
- '/data/certs:/certs'
|
|
- /var/run/docker.sock:/var/run/docker.sock
|