-
Notifications
You must be signed in to change notification settings - Fork 538
/
docker-compose.yml
190 lines (177 loc) Β· 5.61 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
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
x-env-mapping: &env
# https://docs.docker.com/compose/environment-variables/envvars-precedence/
env_file:
- .env
environment:
- CELERY_BROKER_URL=amqp://olympia:olympia@rabbitmq/olympia
- CELERY_RESULT_BACKEND=redis://redis:6379/1
- DATABASES_DEFAULT_URL=mysql://root:@mysqld/olympia
- ELASTICSEARCH_LOCATION=elasticsearch:9200
- MEMCACHE_LOCATION=memcached:11211
- MYSQL_DATABASE=olympia
- MYSQL_ROOT_PASSWORD=docker
- OLYMPIA_SITE_URL=http://olympia.test
- PYTHONDONTWRITEBYTECODE=1
- PYTHONUNBUFFERED=1
- PYTHONBREAKPOINT=ipdb.set_trace
- TERM=xterm-256color
- HISTFILE=/data/olympia/docker/artifacts/bash_history
- HISTSIZE=50000
- HISTIGNORE=ls:exit:"cd .."
- HISTCONTROL=erasedups
- CIRCLECI
- HOST_UID
- DEBUG
- DATA_BACKUP_SKIP
x-olympia: &olympia
<<: *env
image: ${DOCKER_TAG:-}
# We don't want docker compose to manage the image for us.
# We sometimes build the image locally and sometimes pull from a registry
# but docker compose should always assume the image is available.
pull_policy: never
# We drop down to a different user through entrypoint.sh, but starting as
# root allows us to fix the ownership of files generated at image build
# time through the ./docker/entrypoint.sh script.
user: root
platform: linux/amd64
entrypoint: ["/data/olympia/docker/entrypoint.sh"]
services:
worker:
<<: *olympia
command: [
"DJANGO_SETTINGS_MODULE=settings",
"watchmedo",
"auto-restart",
"--directory=/data/olympia/src",
"--pattern=*.py",
"--recursive",
"--",
"celery -A olympia.amo.celery:app worker -E -c 2 --loglevel=INFO",
]
volumes:
- .:/data/olympia
# Don't mount generated files. They only exist in the container
# and would otherwiser be deleted by mounting the cwd volume above
- /data/olympia/static-build
- /data/olympia/site-static
- ./package.json:/deps/package.json
- ./package-lock.json:/deps/package-lock.json
extra_hosts:
- "olympia.test:127.0.0.1"
restart: on-failure:5
# entrypoint.sh takes some time
# we can wait for services to be up and running
healthcheck:
test: ["CMD-SHELL", "DJANGO_SETTINGS_MODULE=olympia celery -A olympia.amo.celery status"]
# The interval is 90s after the start period of 60s
interval: 90s
# 3 failed attempts result in container failure
retries: 3
# While starting, ping faster to get the container healthy as soon as possible
start_interval: 1s
# The start period is 60s
start_period: 120s
depends_on:
- mysqld
- elasticsearch
- redis
- memcached
- rabbitmq
- autograph
web:
extends:
service: worker
healthcheck:
test: ["CMD-SHELL", "curl --fail --show-error --include --location http://127.0.0.1:8002/__version__"]
retries: 3
interval: 90s
start_interval: 1s
start_period: 120s
command:
- uwsgi --ini /data/olympia/docker/uwsgi.ini
nginx:
image: nginx
volumes:
- ./docker/nginx/addons.conf:/etc/nginx/conf.d/addons.conf
- .:/srv
ports:
- "80:80"
networks:
default:
aliases:
- olympia.test
depends_on:
- web
- addons-frontend
memcached:
image: memcached:1.4
# Remove this once we upgrade to a version that provides multi-platform images
platform: linux/amd64
mysqld:
image: mysql:8.0
environment:
- MYSQL_ALLOW_EMPTY_PASSWORD=yes
- MYSQL_DATABASE=olympia
ports:
- "3306:3306"
volumes:
- data_mysqld:/var/lib/mysql
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "--silent"]
start_interval: 1s
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:7.17.3
environment:
# Disable all xpack related features to avoid unrelated logging
# in docker logs. https://github.com/mozilla/addons-server/issues/8887
# This also avoids us to require authentication for local development
# which simplifies the setup.
- xpack.security.enabled=false
- xpack.monitoring.enabled=false
- xpack.graph.enabled=false
- xpack.watcher.enabled=false
- "discovery.type=single-node"
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
mem_limit: 2g
redis:
image: redis:6.2
rabbitmq:
image: rabbitmq:3.12
hostname: olympia
expose:
- "5672"
environment:
- RABBITMQ_DEFAULT_USER=olympia
- RABBITMQ_DEFAULT_PASS=olympia
- RABBITMQ_DEFAULT_VHOST=olympia
autograph:
image: mozilla/autograph:3.3.2
platform: linux/amd64
command: /go/bin/autograph -c /autograph_localdev_config.yaml
volumes:
- ./scripts/autograph_localdev_config.yaml:/autograph_localdev_config.yaml
addons-frontend:
<<: *env
image: mozilla/addons-frontend:latest
platform: linux/amd64
environment:
# We change the proxy port (which is the main entrypoint) as well as the
# webpack port to avoid a conflict in case someone runs both addons-server
# and addons-frontend locally, with the frontend configured to access
# addons-server locally.
- PROXY_PORT=7010
- WEBPACK_SERVER_PORT=7011
ports:
# We need to expose this port so that statics can be fetched (they are
# exposed using webpack and not by the node app server).
- 7011:7011
command: yarn amo:olympia
networks:
default:
volumes:
data_mysqld:
# Keep this value in sync with Makefile-os
# External volumes must be manually created/destroyed
name: addons-server_data_mysqld
external: true