## Template compose used for each stack. name: ${_STACK_X} # Explicit project name (do not rely on directory name) networks: net: name: ${_NET_X} external: true # All networks SHOULD be external in production. net2: name: ${_NET_Y} external: true volumes: data: name: ${_VOLUME_X} # Naming Convention: _[PURPOSE]_VOLUME external: true # All volumes SHOULD be external in production. config: name: ${_VOLUME_Y} external: true custom: name: ${_VOLUME_Z} # Custom volumes may not be external depending on the stack. # External volumes are not required for local stack testing. services: servicename: container_name: ${_CONTAINER_X} # Explicitly named containers. image: ${_IMAGE_X} restart: unless-stopped env_file: # NOTE: .compose.env WILL override .env if there are overlapping values. - .compose.env # Compose wiring defaults go here - .env # Service env vars # Uncomment if bind mounting should not belong to root # UID and GID MUST be set in .env # user: '${UID}:${GID}' volumes: # Directory Bind Mounting # - ./conf:/etc/service:ro # External Docker Volume Mount - type: volume source: data # Must exist if external; overridden in local dev target: /data - type: volume source: config # Must exist if external; overridden in local dev target: /config - type: volume source: custom # Must exist if external; overridden in local dev target: /custom networks: - net expose: - 80 - 9001 - 67