215 строки
5.9 KiB
YAML
215 строки
5.9 KiB
YAML
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
|
|
|
|
x-olympia: &olympia
|
|
<<: *env
|
|
image: ${DOCKER_TAG:-}
|
|
# Ignore any linting saying we have an invalid value.
|
|
pull_policy: ${DOCKER_PULL_POLICY:-}
|
|
# 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:
|
|
olympia:
|
|
<<: *olympia
|
|
build:
|
|
args:
|
|
DOCKER_COMMIT: ${DOCKER_COMMIT:-}
|
|
DOCKER_VERSION: ${DOCKER_VERSION:-}
|
|
DOCKER_BUILD: ${DOCKER_BUILD:-}
|
|
context: .
|
|
dockerfile: Dockerfile
|
|
target: ${DOCKER_TARGET:-}
|
|
x-bake:
|
|
pull: true
|
|
platforms: linux/amd64
|
|
volumes:
|
|
- data_deps:/deps
|
|
- ./package.json:/deps/package.json
|
|
- ./package-lock.json:/deps/package-lock.json
|
|
command: make update_deps
|
|
worker: &worker
|
|
<<: *olympia
|
|
depends_on:
|
|
olympia:
|
|
condition: service_completed_successfully
|
|
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:/data/olympia
|
|
- storage:/data/olympia/storage
|
|
- data_deps:/deps
|
|
- ./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"]
|
|
interval: 3s
|
|
retries: 100
|
|
|
|
web:
|
|
<<: *worker
|
|
healthcheck:
|
|
test: ["CMD-SHELL", "curl --fail --show-error --include --location http://127.0.0.1:8002/__version__"]
|
|
interval: 3s
|
|
retries: 100
|
|
command:
|
|
- uwsgi --ini /data/olympia/docker/uwsgi.ini
|
|
nginx:
|
|
image: nginx
|
|
volumes:
|
|
- ./docker/nginx/addons.conf:/etc/nginx/conf.d/addons.conf
|
|
- ./static:/srv/static
|
|
- ./site-static:/srv/site-static
|
|
- storage:/srv/user-media
|
|
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
|
|
|
|
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
|
|
volumes:
|
|
- data_elasticsearch:/usr/share/elasticsearch/data
|
|
|
|
redis:
|
|
image: redis:6.2
|
|
volumes:
|
|
- data_redis:/data
|
|
|
|
rabbitmq:
|
|
image: rabbitmq:3.12
|
|
hostname: olympia
|
|
expose:
|
|
- "5672"
|
|
environment:
|
|
- RABBITMQ_DEFAULT_USER=olympia
|
|
- RABBITMQ_DEFAULT_PASS=olympia
|
|
- RABBITMQ_DEFAULT_VHOST=olympia
|
|
volumes:
|
|
- data_rabbitmq:/var/lib/rabbitmq
|
|
|
|
autograph:
|
|
image: mozilla/autograph:3.3.2
|
|
platform: linux/amd64
|
|
command: /go/bin/autograph -c /data/olympia/scripts/autograph_localdev_config.yaml
|
|
volumes:
|
|
- data_olympia:/data/olympia
|
|
|
|
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_redis:
|
|
data_elasticsearch:
|
|
data_mysqld:
|
|
# Keep this value in sync with Makefile-os
|
|
# External volumes must be manually created/destroyed
|
|
name: addons-server_data_mysqld
|
|
external: true
|
|
data_rabbitmq:
|
|
data_deps:
|
|
driver: local
|
|
driver_opts:
|
|
type: none
|
|
o: bind
|
|
device: ./deps
|
|
data_olympia:
|
|
driver: local
|
|
driver_opts:
|
|
type: none
|
|
o: bind
|
|
device: ${PWD}
|
|
storage:
|
|
driver: local
|
|
driver_opts:
|
|
type: none
|
|
o: bind
|
|
device: ./storage
|