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