diff --git a/Dockerfile b/Dockerfile index 578ad99..5f62452 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,11 +1,15 @@ # builder stage -- builds PHP packages # outputs: /usr/lib/php/20230831/protobuf.so # outputs: /usr/lib/php/20230831/opentelemetry.so +# outputs: /usr/lib/newrelic-php5/agent/x64/newrelic-20230831.so +# outputs: /usr/bin/newrelic-daemon FROM debian:12.8-slim AS builder-php-exts RUN apt-get update \ && DEBIAN_FRONTEND=noninteractive apt-get install -y ca-certificates apt-transport-https software-properties-common curl lsb-release \ && curl -sSLo /usr/share/keyrings/deb.sury.org-php.gpg https://packages.sury.org/php/apt.gpg \ + && curl -fsSL https://download.newrelic.com/548C16BF.gpg | gpg --dearmor -o /usr/share/keyrings/download.newrelic.com-newrelic.gpg \ && sh -c 'echo "deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list' \ + && sh -c 'echo "deb [signed-by=/usr/share/keyrings/download.newrelic.com-newrelic.gpg] http://apt.newrelic.com/debian/ newrelic non-free" | tee /etc/apt/sources.list.d/newrelic.list' \ && apt-get update \ && DEBIAN_FRONTEND=noninteractive apt-get install --no-install-recommends --no-install-suggests -y \ make \ @@ -14,6 +18,7 @@ RUN apt-get update \ php8.3-common \ php8.3-xml \ php-pear \ + newrelic-php5 \ && pecl install opentelemetry protobuf \ && rm -rf /var/lib/apt/lists/* @@ -76,6 +81,8 @@ RUN apt-get update \ FROM stage1 AS stage2 COPY --from=builder-php-exts /usr/lib/php/20230831/protobuf.so /usr/lib/php/20230831/protobuf.so COPY --from=builder-php-exts /usr/lib/php/20230831/opentelemetry.so /usr/lib/php/20230831/opentelemetry.so +COPY --from=builder-php-exts /usr/lib/newrelic-php5/agent/x64/newrelic-20230831.so /usr/lib/php/20230831/newrelic.so +COPY --from=builder-php-exts /usr/bin/newrelic-daemon /usr/local/bin/newrelic-daemon COPY --from=hairyhenderson/gomplate:v3.11.5 /gomplate /usr/local/bin/gomplate COPY --from=composer:2.5.8 /usr/bin/composer /usr/local/bin/composer COPY --from=timberio/vector:0.39.0-debian /usr/bin/vector /usr/local/bin/vector @@ -85,19 +92,20 @@ COPY --from=node:18.19-bookworm /usr/local/lib/node_modules /usr/local/lib/node_ RUN npm install --global tsx RUN sed -i 's/providers = provider_sect/providers = provider_sect\n\ -ssl_conf = ssl_sect\n\ -\n\ -[ssl_sect]\n\ -system_default = system_default_sect\n\ -\n\ -[system_default_sect]\n\ -Options = UnsafeLegacyRenegotiation/' /etc/ssl/openssl.cnf + ssl_conf = ssl_sect\n\ + \n\ + [ssl_sect]\n\ + system_default = system_default_sect\n\ + \n\ + [system_default_sect]\n\ + Options = UnsafeLegacyRenegotiation/' /etc/ssl/openssl.cnf RUN set -e \ && printf '; priority=20\nextension=protobuf.so' > /etc/php/8.3/mods-available/protobuf.ini \ && printf '; priority=90\n; placeholder' > /etc/php/8.3/mods-available/deskpro.ini \ && printf '; priority=90\n; placeholder' > /etc/php/8.3/mods-available/deskpro-otel.ini \ - && phpenmod protobuf deskpro \ + && printf '; priority=90\n; placeholder' > /etc/php/8.3/mods-available/newrelic.ini \ + && phpenmod protobuf deskpro newrelic \ && phpdismod phar \ && rm /etc/php/8.3/fpm/pool.d/www.conf \ && mv /etc/nginx/mime.types /tmp/mime.types \ diff --git a/etc/php/8.3/mods-available/newrelic.ini.tmpl b/etc/php/8.3/mods-available/newrelic.ini.tmpl new file mode 100644 index 0000000..08b7a9f --- /dev/null +++ b/etc/php/8.3/mods-available/newrelic.ini.tmpl @@ -0,0 +1,14 @@ +; priority=90 + +{{if conv.ToBool (getenv "DESKPRO_ENABLE_NEWRELIC" "false") }} +extension = "newrelic.so" +[newrelic] +newrelic.license = {{ getenv "DESKPRO_NR_LICENSE" "" | quote }} +newrelic.logfile = "/var/log/newrelic/php_agent.log" +newrelic.appname = {{ getenv "DESKPRO_NR_APP_NAME" "Deskpro" | quote }} +newrelic.daemon.logfile = "/var/log/newrelic/newrelic-daemon.log" +newrelic.daemon.location = "/usr/local/bin/newrelic-daemon" +{{else}} +# To enable newrelic extension, set DESKPRO_ENABLE_NEWRELIC=true +# extension = "newrelic.so" +{{end}} diff --git a/usr/local/share/deskpro/container-var-reference.json b/usr/local/share/deskpro/container-var-reference.json index e708d3d..1194f03 100644 --- a/usr/local/share/deskpro/container-var-reference.json +++ b/usr/local/share/deskpro/container-var-reference.json @@ -175,6 +175,12 @@ "type": "boolean", "default": "false" }, + { + "name": "DESKPRO_ENABLE_NEWRELIC", + "description": "Enable NewRelic APM integration.", + "type": "boolean", + "default": "false" + }, { "name": "DESKPRO_ENABLE_OTEL", "description": "Enable OpenTelemetry tracing", @@ -239,6 +245,17 @@ "type": "string", "default": "warning" }, + { + "name": "DESKPRO_NR_APP_NAME", + "description": "Application name for NewRelic integration.", + "type": "string", + "default": "Deskpro" + }, + { + "name": "DESKPRO_NR_LICENSE", + "description": "License key for NewRelic integration.", + "type": "string" + }, { "name": "DESKPRO_SENTRY_BACKEND_DSN", "description": "",