2019-05-17 00:56:02 +03:00
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}
2020-03-10 21:29:07 +03:00
- GITHUB_TOKEN=${GITHUB_TOKEN:-}
2020-01-13 12:26:06 +03:00
- UPSTREAM_DATABASE_URL=${UPSTREAM_DATABASE_URL:-}
2020-03-09 10:08:50 +03:00
- PERF_SHERIFF_BOT_CLIENT_ID=${PERF_SHERIFF_BOT_CLIENT_ID:-}
- PERF_SHERIFF_BOT_ACCESS_TOKEN=${PERF_SHERIFF_BOT_ACCESS_TOKEN:-}
2021-04-07 10:58:12 +03:00
- NOTIFY_CLIENT_ID=${NOTIFY_CLIENT_ID:-}
- NOTIFY_ACCESS_TOKEN=${NOTIFY_ACCESS_TOKEN:-}
2020-03-25 21:40:22 +03:00
- PULSE_AUTO_DELETE_QUEUES=True
2019-05-17 00:56:02 +03:00
- REDIS_URL=redis://redis:6379
- SITE_URL=http://backend:8000/
- TREEHERDER_DEBUG=True
2020-03-17 00:25:11 +03:00
- NEW_RELIC_INSIGHTS_API_KEY=${NEW_RELIC_INSIGHTS_API_KEY:-}
2021-05-14 00:20:07 +03:00
- PROJECTS_TO_INGEST=${PROJECTS_TO_INGEST:-autoland,try}
2021-10-04 19:37:41 +03:00
- BUGZILLA_API_URL=${BUGZILLA_API_URL:-}
- BUG_FILER_API_KEY=${BUG_FILER_API_KEY:-}
- TLS_CERT_PATH=${TLS_CERT_PATH:-}
2019-05-17 00:56:02 +03:00
entrypoint : './docker/entrypoint.sh'
2020-03-20 21:58:11 +03:00
# We *ONLY* initialize the data when we're running the backend
2020-03-23 18:55:49 +03:00
command : './initialize_data.sh ./manage.py runserver 0.0.0.0:8000'
2019-05-17 00:56:02 +03:00
# 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
2020-12-21 23:54:07 +03:00
shm_size : 2g # 2 Gig seems like a good size
2019-05-17 00:56:02 +03:00
volumes :
- .:/app
ports :
- '8000:8000'
depends_on :
- mysql
- redis
- rabbitmq
2020-03-19 21:07:31 +03:00
stdin_open : true
tty : true
2019-05-17 00:56:02 +03:00
frontend :
container_name : frontend
# https://hub.docker.com/_/node
2022-01-17 17:34:09 +03:00
image : node:16.13.2-alpine
2019-05-17 00:56:02 +03:00
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/
2021-11-01 13:05:15 +03:00
image : mysql:5.7.36
2019-05-17 00:56:02 +03:00
environment :
- MYSQL_ALLOW_EMPTY_PASSWORD=true
- MYSQL_DATABASE=treeherder
2022-04-28 23:06:57 +03:00
- LANG=C.UTF_8
2019-05-17 00:56:02 +03:00
volumes :
- ./docker/mysql.cnf:/etc/mysql/conf.d/mysql.cnf
- mysql_data:/var/lib/mysql
ports :
- '3306:3306'
2022-04-28 23:06:57 +03:00
command : --character-set-server=utf8 --collation-server=utf8_bin
2019-05-17 00:56:02 +03:00
redis :
container_name : redis
# https://hub.docker.com/_/redis/
2021-11-29 05:14:20 +03:00
image : redis:6.2.6-alpine
2019-05-17 00:56:02 +03:00
# 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
2020-02-05 22:55:03 +03:00
ports :
- '6379:6379'
2020-04-08 21:34:16 +03:00
2019-05-17 00:56:02 +03:00
rabbitmq :
container_name : rabbitmq
# https://hub.docker.com/r/library/rabbitmq/
2019-10-07 16:44:49 +03:00
image : rabbitmq:3.8-alpine
2019-05-17 00:56:02 +03:00
environment :
# Hide INFO and WARNING log levels to reduce log spam.
- 'RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS=-rabbit log [{console,[{level,error}]}]'
2020-02-05 22:55:03 +03:00
ports :
- '5672:5672'
2020-04-08 21:34:16 +03:00
2020-04-21 23:12:52 +03:00
pulse-task-push :
2020-04-08 21:34:16 +03:00
build :
context : .
dockerfile : docker/dev.Dockerfile
environment :
2022-01-31 13:24:21 +03:00
- PULSE_URL=${PULSE_URL:-}
2020-04-08 21:34:16 +03:00
- LOGGING_LEVEL=INFO
- PULSE_AUTO_DELETE_QUEUES=True
- DATABASE_URL=mysql://root@mysql:3306/treeherder
- BROKER_URL=amqp://guest:guest@rabbitmq//
2020-04-13 20:47:07 +03:00
- SKIP_INGESTION=${SKIP_INGESTION:-False}
2020-04-08 21:34:16 +03:00
entrypoint : './docker/entrypoint.sh'
2020-04-21 23:12:52 +03:00
command : ./manage.py pulse_listener
2020-04-08 21:34:16 +03:00
volumes :
- .:/app
depends_on :
- mysql
- rabbitmq
celery :
build :
context : .
dockerfile : docker/dev.Dockerfile
environment :
2022-05-06 00:30:20 +03:00
- BROKER_URL=amqp://guest:guest@rabbitmq:5672//
2020-04-08 21:34:16 +03:00
- DATABASE_URL=mysql://root@mysql:3306/treeherder
2021-05-14 00:20:07 +03:00
- PROJECTS_TO_INGEST=${PROJECTS_TO_INGEST:-autoland,try}
2020-04-08 21:34:16 +03:00
entrypoint : './docker/entrypoint.sh'
2022-05-06 00:30:20 +03:00
command : celery -A treeherder worker --uid=nobody --gid=nogroup --without-gossip --without-mingle --without-heartbeat -Q store_pulse_pushes,store_pulse_tasks,store_pulse_tasks_classification --concurrency=1 --loglevel=INFO
2020-04-08 21:34:16 +03:00
volumes :
- .:/app
depends_on :
- mysql
- redis
- rabbitmq
2019-05-17 00:56:02 +03:00
volumes :
# TODO: Experiment with using tmpfs when testing, to speed up database-using Python tests.
mysql_data : {}