treeherder/docker-compose.yml

143 строки
5.5 KiB
YAML

version: '3'
services:
backend:
container_name: backend
build:
context: .
dockerfile: docker/dev.Dockerfile
# TODO: Try using cache_from pointed at a Docker Hub image built from master
# Though may need to also use the workaround for local vs remote:
# https://github.com/moby/moby/issues/32612#issuecomment-294055017
# cache_from: TODO
image: treeherder-backend
environment:
# Development/CI-specific environment variables only.
# Those that do not vary across environments should go in `Dockerfile`.
- BROKER_URL=amqp://guest:guest@rabbitmq//
- DATABASE_URL=${DATABASE_URL:-mysql://root@mysql/treeherder}
- GITHUB_TOKEN=${GITHUB_TOKEN:-}
- UPSTREAM_DATABASE_URL=${UPSTREAM_DATABASE_URL:-}
- PERF_SHERIFF_BOT_CLIENT_ID=${PERF_SHERIFF_BOT_CLIENT_ID:-}
- PERF_SHERIFF_BOT_ACCESS_TOKEN=${PERF_SHERIFF_BOT_ACCESS_TOKEN:-}
- NOTIFY_CLIENT_ID=${NOTIFY_CLIENT_ID:-}
- NOTIFY_ACCESS_TOKEN=${NOTIFY_ACCESS_TOKEN:-}
- PULSE_AUTO_DELETE_QUEUES=True
- REDIS_URL=redis://redis:6379
- SITE_URL=http://backend:8000/
- TREEHERDER_DEBUG=True
- NEW_RELIC_INSIGHTS_API_KEY=${NEW_RELIC_INSIGHTS_API_KEY:-}
- PROJECTS_TO_INGEST=${PROJECTS_TO_INGEST:-autoland,try}
# The default cert is for access to the stage replica; for accessing
# prototype this variable will need to reference deployment/gcp/ca-cert-prototype.pem.
# See treeherder docs for more details.
- TLS_CERT_PATH=${TLS_CERT_PATH:-deployment/gcp/ca-cert.pem}
entrypoint: './docker/entrypoint.sh'
# We *ONLY* initialize the data when we're running the backend
command: './initialize_data.sh ./manage.py runserver 0.0.0.0:8000'
# Django's runserver doesn't listen to the default of SIGTERM, so docker-compose
# must send SIGINT instead to avoid waiting 10 seconds for the time out.
stop_signal: SIGINT
shm_size: 2g # 2 Gig seems like a good size
volumes:
- .:/app
ports:
- '8000:8000'
depends_on:
- mysql
- redis
- rabbitmq
stdin_open: true
tty: true
frontend:
container_name: frontend
# https://hub.docker.com/_/node
image: node:16.6.2-alpine
environment:
# Allows `.neutrinorc.js` to adjust filesystem watching and browser opening behaviour.
- IN_DOCKER=1
# Installing JS dependencies at runtime so that they share the `node_modules` from the
# host, improving speed (both install and build due to the webpack cache) and ensuring
# the host copy stays in sync (for people that switch back and forth between UI-only
# and full stack Treeherder development).
working_dir: /app
command: sh -c "yarn && yarn start --env.BACKEND=http://backend:8000 --host 0.0.0.0"
volumes:
- .:/app
ports:
- '5000:5000'
mysql:
container_name: mysql
# https://hub.docker.com/r/library/mysql/
image: mysql:5.7.34
environment:
- MYSQL_ALLOW_EMPTY_PASSWORD=true
- MYSQL_DATABASE=treeherder
volumes:
- ./docker/mysql.cnf:/etc/mysql/conf.d/mysql.cnf
- mysql_data:/var/lib/mysql
ports:
- '3306:3306'
redis:
container_name: redis
# https://hub.docker.com/_/redis/
image: redis:6.2.5-alpine
# Messages after starting the redis-server
# WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128
# WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.
# Hide Redis `notice` log level startup output spam.
command: redis-server --loglevel warning
ports:
- '6379:6379'
rabbitmq:
container_name: rabbitmq
# https://hub.docker.com/r/library/rabbitmq/
image: rabbitmq:3.8-alpine
environment:
# Hide INFO and WARNING log levels to reduce log spam.
- 'RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS=-rabbit log [{console,[{level,error}]}]'
ports:
- '5672:5672'
pulse-task-push:
build:
context: .
dockerfile: docker/dev.Dockerfile
environment:
- PULSE_URL=${PULSE_URL:-amqp://docker-shared-user:oGv7P5%H94@pulse.mozilla.org:5671/?ssl=1}
- LOGGING_LEVEL=INFO
- PULSE_AUTO_DELETE_QUEUES=True
- DATABASE_URL=mysql://root@mysql:3306/treeherder
- BROKER_URL=amqp://guest:guest@rabbitmq//
- SKIP_INGESTION=${SKIP_INGESTION:-False}
entrypoint: './docker/entrypoint.sh'
command: ./manage.py pulse_listener
volumes:
- .:/app
depends_on:
- mysql
- rabbitmq
celery:
build:
context: .
dockerfile: docker/dev.Dockerfile
environment:
- CELERY_BROKER_URL=amqp://guest:guest@rabbitmq:5672//
- DATABASE_URL=mysql://root@mysql:3306/treeherder
- PROJECTS_TO_INGEST=${PROJECTS_TO_INGEST:-autoland,try}
entrypoint: './docker/entrypoint.sh'
command: celery worker -A treeherder --uid=nobody --gid=nogroup --without-gossip --without-mingle --without-heartbeat -Q store_pulse_pushes,store_pulse_tasks --concurrency=1 --loglevel=WARNING
volumes:
- .:/app
depends_on:
- mysql
- redis
- rabbitmq
volumes:
# TODO: Experiment with using tmpfs when testing, to speed up database-using Python tests.
mysql_data: {}