version: '3' services: php: build: context: ./api depends_on: - db env_file: - ./api/.env # Comment out these volumes in production volumes: - ./api:/srv/api:rw # If you develop on Linux, comment out the following volumes to just use bind-mounted project directory from host - /srv/api/var/ - /srv/api/var/cache/ - /srv/api/var/logs/ - /srv/api/var/sessions/ api: build: context: ./api dockerfile: ./Dockerfile.nginx depends_on: - php ports: - "80:80" volumes: - ./api/public:/srv/api/public:ro cache-proxy: build: context: ./api dockerfile: ./Dockerfile.varnish depends_on: - api # Comment out this volume in production volumes: - ./api/docker/varnish/conf:/etc/varnish:ro ports: - "81:80" db: # In production, you may want to use a managed database service image: postgres:9.6-alpine environment: - POSTGRES_DB=api - POSTGRES_USER=api-platform # You should definitely change the password in production - POSTGRES_PASSWORD=!ChangeMe! volumes: - db-data:/var/lib/postgresql/data:rw # You may use a bind-mounted host directory instead, so that it is harder to accidentally remove the volume and lose all your data! # - ./docker/db/data:/var/lib/postgresql/data:rw ports: - "5432:5432" admin: # Use a static website hosting service or the nginx image in production build: context: ./admin dockerfile: ./Dockerfile env_file: - ./admin/.env volumes: - ./admin:/usr/src/admin:rw - /usr/src/admin/node_modules ports: - "3000:3000" client: # Use a static website hosting service or the nginx image in production build: context: ./client dockerfile: ./Dockerfile env_file: - ./client/.env volumes: - ./client:/usr/src/client:rw - /usr/src/client/node_modules ports: - "3001:3000" h2-proxy: # Don't use this proxy in prod build: context: ./h2-proxy dockerfile: ./Dockerfile depends_on: - api - admin - client - cache-proxy ports: - "443:443" - "444:444" - "8000:8000" - "8001:8001" volumes: db-data: {}