forked from mozilla/treeherder
-
Notifications
You must be signed in to change notification settings - Fork 0
/
docker-compose.yml
139 lines (133 loc) · 5.24 KB
/
docker-compose.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
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}
- TLS_CERT_PATH=${TLS_CERT_PATH}
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%[email protected]: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: {}