version: '3' services: db: image: postgres:9.6 ports: # 5432 may already in use by another PostgreSQL on host - "5433:5432" redis: image: redis:latest rabbitmq: image: rabbitmq:latest elasticsearch: image: elasticsearch:5 camo: image: pypa/warehouse-camo:latest ports: - "9000:9000" environment: CAMO_KEY: "insecure camo key" web: build: context: . args: DEVEL: "yes" command: hupper -m twisted --log-format text web -p tcp:port=8000 --wsgi warehouse.wsgi.application env_file: dev/environment volumes: # We specify all of these directories instead of just . because we want to # avoid having ./node_modules from the host OS being shared with the docker # container, and since there's no way to exclude a directory, the only way # to make this work is to share multiple, smaller directories. These cover # the important things that we want to share, but changes to requirements # or any file not in these directories will require a rebuild. # The :z option fixes permission issues with SELinux by setting a # permissive security context. - ./dev:/opt/warehouse/src/dev:z - ./docs:/opt/warehouse/src/docs:z - ./warehouse:/opt/warehouse/src/warehouse:z - ./tests:/opt/warehouse/src/tests:z - ./htmlcov:/opt/warehouse/src/htmlcov:z ports: - "80:8000" links: - db - redis - rabbitmq - elasticsearch worker: build: context: . args: DEVEL: "yes" command: celery -A warehouse worker -B -S redbeat.RedBeatScheduler -l info env_file: dev/environment environment: C_FORCE_ROOT: "1" links: - db - redis - rabbitmq - elasticsearch static: build: context: . dockerfile: Dockerfile.static command: gulp watch volumes: - ./warehouse:/opt/warehouse/src/warehouse:z - ./Gulpfile.babel.js:/opt/warehouse/src/Gulpfile.babel.js:z - ./.babelrc:/opt/warehouse/src/.babelrc:z - ./.sass-lint.yml:/opt/warehouse/src/.sass-lint.yml:z