diff --git a/.gitignore b/.gitignore index bbee80e37a4..70f858085da 100644 --- a/.gitignore +++ b/.gitignore @@ -8,3 +8,4 @@ logs /lambda/.serverless/ .idea/ docs/ +.env \ No newline at end of file diff --git a/examples/symfony-app/.dockerignore b/examples/symfony-app/.dockerignore index 3225cf9b38e..6ee9c5daec9 100644 --- a/examples/symfony-app/.dockerignore +++ b/examples/symfony-app/.dockerignore @@ -25,6 +25,6 @@ var/ vendor/ .editorconfig .env.*.local -.env.local +docker/php/.env.sample .env.local.php .env.test diff --git a/examples/symfony-app/.gitignore b/examples/symfony-app/.gitignore index 362ab4df122..e80fb8bcdfa 100644 --- a/examples/symfony-app/.gitignore +++ b/examples/symfony-app/.gitignore @@ -1,11 +1,10 @@ ###> symfony/framework-bundle ### -/.env.local +/docker/php/.env.local /.env.local.php /.env.*.local /config/secrets/prod/prod.decrypt.private.php /public/bundles/ /var/ /vendor/ -/.env ###< symfony/framework-bundle ### diff --git a/examples/symfony-app/README.md b/examples/symfony-app/README.md index 1cb6ed26688..47ab7a0bb81 100644 --- a/examples/symfony-app/README.md +++ b/examples/symfony-app/README.md @@ -1,13 +1,15 @@ # Symfony demo app for New Relic -This Demo is to show how PHP SDK can be used in a Symfony application for a Docker environment with NewRelic monitoring enabled. +This Demo is to show how PHP SDK can be used in a Symfony application for a Docker environment with monitoring tools enabled. + +For now, we configured the docker environment for Datadog and New Relic. ## Requirements - PHP at least 8.1 - Symfony 6 - Docker -- Registration in New Relic +- Registration in New Relic/Datadog ## Installation @@ -19,19 +21,17 @@ APP_CTP_CLIENT_ID= your CTP_CLIENT_ID APP_CTP_CLIENT_SECRET= your CTP_CLIENT_SECRET APP_CTP_PROJECT_KEY= your CTP_PROJECT_KEY ``` -4. In the [docker-compose.yml](https://github.com/commercetools/commercetools-sdk-php-v2/blob/622c664ef69b93d96f11ac2ed26d24446d45dd0c/examples/symfony-app/docker-compose.yml) add the New Relic license key in the NEWRELIC_KEY: "" field -```yaml - args: - NEWRELIC_KEY: "replace this field with your New Relic license key" -``` +4. Complete the .env file with your New Relic or Datadog credentials. ## Using the Symfony Demo app in a Docker Environment ### Configuring the Demo App 1. Open the Terminal -2. Run `composer dump-env prod` -3. Run `composer install` or `composer update` +2. Run `composer install` or `composer update` +3. Copy the [.env.sample](docker/php/.env.sample) file to the root folder renaming it to `.env`. So in the root folder run `cp docker/php/.env.sample .env`. +4. Fill the `.env` file with the missing data. +5. Run `composer dump-env prod` ### Preparing the Docker environment @@ -43,7 +43,7 @@ APP_CTP_PROJECT_KEY= your CTP_PROJECT_KEY 1. Navigate to [http://localhost:8080/products](http://localhost:8080/products) or [http://localhost:8080/categories](http://localhost:8080/categories) 2. The result would be an array objects containing products or categories. -3. If it's not please make sure that in Merchant Center in the project key selected (see the environment variable for the client credentials in the point 3 of the Installation section), there would be some data for products and categories. -4. Go in the New Relic UI to see the monitoring of the API calls. - +3. If it's not make sure that in Merchant Center in the project key selected (see the environment variable for the client credentials in the point 3 of the Installation section), there would be some data for products and categories. +4. Go in the New Relic/Datadog UI to see the monitoring of the API calls. +The docker configuration files will be found in the `docker/php` folder and the `docker-compose.yml` in the `symfony-app/` folder so they can be used in your application. diff --git a/examples/symfony-app/docker-compose.yml b/examples/symfony-app/docker-compose.yml index 1c43fb37206..61bb5ff82d7 100644 --- a/examples/symfony-app/docker-compose.yml +++ b/examples/symfony-app/docker-compose.yml @@ -1,28 +1,45 @@ -version: "3.4" - +version: '3.8' services: - application: + php-datadog: build: - context: docker/php - dockerfile: Dockerfile - args: - NEWRELIC_KEY: "" - NEWRELIC_APP_NAME: "PHP_SDK" - tty: true - ports: - - 9000:9000 + context: ./docker/php + dockerfile: Dockerfile.datadog + environment: + - DD_SERVICE=symfony-app + - DD_AGENT_HOST=datadog-agent + - DD_TRACE_AGENT_PORT=8126 + - DD_API_KEY=${DD_API_KEY} + - DD_TRACE_DEBUG=true + - DD_LOGS_ENABLED=true + - DD_PROCESS_AGENT_ENABLED=true volumes: - .:/var/www/symfony - - ./var/logs/newrelic:/var/log/newrelic + - ./docker/php/.env.sample:/var/www/symfony/.env + expose: + - "9000" + nginx: build: - context: docker/nginx + context: ./docker/nginx dockerfile: Dockerfile ports: - - 8080:80 - links: - - application + - "8080:80" + depends_on: + - php-datadog volumes: - ./var/logs/nginx:/var/log/nginx - .:/var/www/symfony + + datadog-agent: + image: datadog/agent:latest + environment: + - DD_API_KEY=${DD_API_KEY} + - DD_SITE=datadoghq.com + - DD_APM_ENABLED=true + ports: + - "127.0.0.1:8126:8126/tcp" + volumes: + - "/var/run/docker.sock:/var/run/docker.sock:ro" + - "/proc/:/host/proc/:ro" + - "/sys/fs/cgroup/:/host/sys/fs/cgroup:ro" diff --git a/examples/symfony-app/docker/nginx/Dockerfile b/examples/symfony-app/docker/nginx/Dockerfile index c6daeecb58c..36cc9922cb7 100644 --- a/examples/symfony-app/docker/nginx/Dockerfile +++ b/examples/symfony-app/docker/nginx/Dockerfile @@ -2,6 +2,11 @@ FROM nginx COPY symfony.conf /etc/nginx/conf.d/default.conf -RUN echo "upstream php-upstream { server application:9000; }" > /etc/nginx/conf.d/upstream.conf +# Update the upstream configuration to point to the correct PHP service +RUN echo "upstream php-upstream { server php-datadog:9000; \ +# server php-newrelic:9001; \ + }" > /etc/nginx/conf.d/upstream.conf -RUN usermod -u 1000 www-data + +HEALTHCHECK --interval=30s --timeout=5s \ + CMD curl -f http://localhost/ || exit 1 diff --git a/examples/symfony-app/.env b/examples/symfony-app/docker/php/.env.sample similarity index 80% rename from examples/symfony-app/.env rename to examples/symfony-app/docker/php/.env.sample index 9478dcf831a..7a42e00227b 100644 --- a/examples/symfony-app/.env +++ b/examples/symfony-app/docker/php/.env.sample @@ -16,19 +16,20 @@ ###> symfony/framework-bundle ### APP_ENV=dev -APP_SECRET= -APP_CTP_CLIENT_ID= your CTP_CLIENT_ID -APP_CTP_CLIENT_SECRET= your CTP_CLIENT_SECRET -APP_CTP_PROJECT_KEY= your CTP_PROJECT_KEY +APP_CTP_CLIENT_ID=your client id +APP_CTP_CLIENT_SECRET=your client secret +APP_CTP_PROJECT_KEY=your project key DD_AGENT_HOST=datadog-agent DD_TRACE_AGENT_PORT=8126 DD_SERVICE=symfony-app -DD_API_KEY= +DD_API_KEY=your datadog api key DD_APM_ENABLED=true DD_TRACE_CLI_ENABLED=true DD_TRACE_ENABLED=true -NEWRELIC_KEY= +DD_SITE=datadoghq.com +NEWRELIC_KEY=your new relic key NEWRELIC_APP_NAME=PHP-SDK +NEW_RELIC_AGENT_VERSION= # Specify the New Relic agent version you want # APP_NAME=PHP-SDK ###< symfony/framework-bundle ### diff --git a/examples/symfony-app/docker/php/Dockerfile b/examples/symfony-app/docker/php/Dockerfile deleted file mode 100644 index b5523cf7d52..00000000000 --- a/examples/symfony-app/docker/php/Dockerfile +++ /dev/null @@ -1,39 +0,0 @@ -FROM php:8.2-fpm - -ARG NEWRELIC_KEY -ARG NEWRELIC_APP_NAME - -RUN apt-get update \ - && apt-get install -y apt-utils \ - && apt-get install -y wget git curl libicu-dev zlib1g-dev libonig-dev libzip-dev gnupg2 \ - && docker-php-ext-install intl \ - && docker-php-ext-install mbstring \ - && docker-php-ext-install zip \ - && apt-get clean - -RUN echo 'deb http://apt.newrelic.com/debian/ newrelic non-free' | tee /etc/apt/sources.list.d/newrelic.list -RUN wget -qO - https://download.newrelic.com/548C16BF.gpg | apt-key add - -RUN apt-get update \ - && whoami \ - && apt-get install -y newrelic-php5 net-tools inetutils-ping inetutils-telnet newrelic-daemon \ - && apt-get clean \ - - - -RUN usermod -u 1000 www-data - -ADD conf.d/newrelic.ini /usr/local/etc/php/conf.d/ -ADD conf.d/60-user.ini /usr/local/etc/php/conf.d/ - -RUN sed -i \ - -e 's/"REPLACE_WITH_REAL_KEY"/'"$NEWRELIC_KEY"'/' \ - -e 's/newrelic.appname = "PHP Application"/newrelic.appname = '"$NEWRELIC_APP_NAME"'/' \ - -e 's/;newrelic.daemon.app_connect_timeout =.*/newrelic.daemon.app_connect_timeout=20s/' \ - -e 's/;newrelic.daemon.start_timeout =.*/newrelic.daemon.start_timeout=20s/' \ - /usr/local/etc/php/conf.d/newrelic.ini - -WORKDIR /var/www/symfony/public - -EXPOSE 9000 - -CMD ["php-fpm", "-F"] diff --git a/examples/symfony-app/docker/php/Dockerfile.datadog b/examples/symfony-app/docker/php/Dockerfile.datadog new file mode 100644 index 00000000000..6f3cab7a864 --- /dev/null +++ b/examples/symfony-app/docker/php/Dockerfile.datadog @@ -0,0 +1,30 @@ +FROM php:8.2-fpm + +# Install necessary packages and PHP extensions +RUN apt-get update \ + && apt-get install -y apt-utils wget git curl libicu-dev zlib1g-dev libonig-dev libzip-dev gnupg2 \ + && docker-php-ext-install intl mbstring zip \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* + +# Download Datadog setup script from the latest release and move it in /usr/local/bin +RUN curl -LO https://github.com/DataDog/dd-trace-php/releases/latest/download/datadog-setup.php \ + && mv datadog-setup.php /usr/local/bin/datadog-setup.php \ + && chmod +x /usr/local/bin/datadog-setup.php + +# Copy Datadog configuration and setup script +COPY conf.d/datadog.ini /usr/local/etc/php/conf.d/ + +# Copy the .env.sample file from host to the container +COPY .env.sample /var/www/symfony/.env.sample + +# Run the setup script +RUN php /usr/local/bin/datadog-setup.php --php-bin=all --enable-appsec --enable-profiling + +HEALTHCHECK --interval=30s --timeout=5s CMD curl -f http://localhost/ || exit 1 + +WORKDIR /var/www/symfony/public + +EXPOSE 9000 + +CMD ["php-fpm", "-F"] diff --git a/examples/symfony-app/docker/php/Dockerfile.newrelic b/examples/symfony-app/docker/php/Dockerfile.newrelic new file mode 100644 index 00000000000..c59be7b8b39 --- /dev/null +++ b/examples/symfony-app/docker/php/Dockerfile.newrelic @@ -0,0 +1,32 @@ +# Dockerfile for New Relic +FROM php:8.2-fpm + +ARG NEWRELIC_KEY +ARG NEWRELIC_APP_NAME + +# Install necessary packages and New Relic +RUN apt-get update \ + && apt-get install -y apt-utils wget git curl libicu-dev zlib1g-dev libonig-dev libzip-dev gnupg2 \ + && docker-php-ext-install intl mbstring zip \ + && echo 'deb http://apt.newrelic.com/debian/ newrelic non-free' | tee /etc/apt/sources.list.d/newrelic.list \ + && wget -qO - https://download.newrelic.com/548C16BF.gpg | apt-key add - \ + && apt-get update \ + && apt-get install -y newrelic-php5 \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* + +# Copy New Relic configuration files +COPY conf.d/newrelic.ini /usr/local/etc/php/conf.d/ +COPY conf.d/60-user.ini /usr/local/etc/php/conf.d/ + +# Configure New Relic +RUN sed -i \ + -e 's/"REPLACE_WITH_REAL_KEY"/'"$NEWRELIC_KEY"'/' \ + -e 's/newrelic.appname = "PHP Application"/newrelic.appname = '"$NEWRELIC_APP_NAME"'/' \ + /usr/local/etc/php/conf.d/newrelic.ini + +WORKDIR /var/www/symfony/public + +EXPOSE 9000 + +CMD ["php-fpm", "-F"] diff --git a/examples/symfony-app/docker/php/conf.d/datadog.ini b/examples/symfony-app/docker/php/conf.d/datadog.ini new file mode 100644 index 00000000000..fbc77e65497 --- /dev/null +++ b/examples/symfony-app/docker/php/conf.d/datadog.ini @@ -0,0 +1,7 @@ +[datadog] +ddtrace.request_init_hook=/opt/datadog-php/ddtrace-sources/bridge/dd_wrap_autoloader.php +ddtrace.enabled=true +ddtrace.agent_host=${DD_AGENT_HOST} +ddtrace.agent_port=${DD_TRACE_AGENT_PORT} +ddtrace.service=symfony-app +ddtrace.env=${DD_ENV}