services:
    php:
        image: ${IMAGES_PREFIX:-}app-php
        restart: unless-stopped
        environment:
            SERVER_NAME: ${SERVER_NAME:-localhost}, php:80
            MERCURE_PUBLISHER_JWT_KEY: ${CADDY_MERCURE_JWT_SECRET:-!ChangeThisMercureHubJWTSecretKey!}
            MERCURE_SUBSCRIBER_JWT_KEY: ${CADDY_MERCURE_JWT_SECRET:-!ChangeThisMercureHubJWTSecretKey!}
            # Run "composer require symfony/orm-pack" to install and configure Doctrine ORM
            DATABASE_URL: ${DATABASE_URL}
            # Run "composer require symfony/mercure-bundle" to install and configure the Mercure integration
            MERCURE_URL: ${CADDY_MERCURE_URL:-http://php/.well-known/mercure}
            MERCURE_PUBLIC_URL: ${CADDY_MERCURE_PUBLIC_URL:-https://${SERVER_NAME:-localhost}/.well-known/mercure}
            MERCURE_JWT_SECRET: ${CADDY_MERCURE_JWT_SECRET:-!ChangeThisMercureHubJWTSecretKey!}
            # The two next lines can be removed after initial installation
            SYMFONY_VERSION: ${SYMFONY_VERSION:-}
            STABILITY: ${STABILITY:-stable}
        volumes:
            - caddy_data:/data
            - caddy_config:/config
        ports:
            # HTTP
            - target: 80
              published: ${HTTP_PORT:-80}
              protocol: tcp
            # HTTPS
            - target: 443
              published: ${HTTPS_PORT:-443}
              protocol: tcp
            # HTTP/3
            - target: 443
              published: ${HTTP3_PORT:-443}
              protocol: udp

    # Mercure is installed as a Caddy module, prevent the Flex recipe from installing another service
    ###> symfony/mercure-bundle ###
    ###< symfony/mercure-bundle ###

    ###> doctrine/doctrine-bundle ###
    database:
        image: postgres:${POSTGRES_VERSION:-16}-alpine
        environment:
            POSTGRES_DB: ${POSTGRES_DB:-app}
            # You should definitely change the password in production
            POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-app}
            POSTGRES_USER: ${POSTGRES_USER:-app}
        healthcheck:
            test:
                [
                    "CMD",
                    "pg_isready",
                    "-d",
                    "${POSTGRES_DB:-app}",
                    "-U",
                    "${POSTGRES_USER:-app}",
                ]
            timeout: 5s
            retries: 5
            start_period: 60s
        volumes:
            - database_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
    ###< doctrine/doctrine-bundle ###

volumes:
    caddy_data:
    caddy_config:
    ###> symfony/mercure-bundle ###
    ###< symfony/mercure-bundle ###

    ###> doctrine/doctrine-bundle ###
    database_data:
###< doctrine/doctrine-bundle ###
