Hits: 27

SPX is a PHP Extension for Profiling, also open source, very simple, multimetric capable and with out-of-box web UI for listing, sorting and report details.

For installation, we need to build our extension. We can of course put the building phases directly into our Dockerfile, but I want to know, what things (extension file, webUI Files and configuration changes) need to come through the extension. For this reason, I make a seperate build process in my Dockerfile and copy everything this extension needs.

I follow the steps from official documentation (Timestamp: 20.05.2022), please check, if new or old steps were published, after this blog article)

FROM ubuntu:20.04 as spx_builder
# We declare, that we need using zero interaction  while installation or upgrading system via apt.
ARG DEBIAN_FRONTEND="noninteractive"

# Default Timezone declartion, if your system in another timezone placed, update this
ENV TZ="Europe/Berlin"

# Install the php-dev, git and extension requirements for the extension building steps
RUN apt-get -y update && apt-get install -y git zlib1g-dev software-properties-common
RUN add-apt-repository ppa:ondrej/php
RUN apt-get update && apt-get install -y php8.0-dev

# Create tmp directory for git cloning and build
RUN mkdir /tmp/php-spx
RUN git clone https://github.com/NoiseByNorthwest/php-spx.git /tmp/php-spx
RUN cd php-spx && git checkout release/latest && phpize && ./configure && make && make install

# Main PHP image with Apache
FROM php:8.0-apache

# Copy builded extension and webui files in to php image
COPY --from=spx_builder /tmp/php-spx/assets /usr/local/share/misc/php-spx/assets
COPY --from=spx_builder /tmp/php-spx/modules/spx.so /usr/local/lib/php/extensions/no-debug-non-zts-20190902

# Create ini file for extension
RUN echo 'extension=spx' > /usr/local/etc/php/conf.d/docker-php-ext-spx.ini
# Config for extension
RUN echo 'spx.http_enabled=1 \n\
spx.http_ui_assets_dir="/usr/local/share/misc/php-spx/assets/web-ui" \n\
spx.http_key="dev" \n\
spx.http_ip_whitelist="*" \n\
spx.http_trusted_proxies="*"' >> /usr/local/etc/php/php.ini

For testing, we can use the docker-compose for simple exection..


version: '2'
    container_name: php-apache
      context: .
      dockerfile: ./Dockerfile
      - ./src:/var/www/html/
      - "3333:80"
docker-compose up -d

and browse the localhost:3333, here is my result. Directly we can check the Enabled checkbox, it means, all incoming request will be analyzed and listed under control panel settings.

after enabling, I visit the index page via a new tab without any get parameters or anything.

After that, I refresh the control page, and i see the link the profiling detail from my request in index.php (3)

And… Here is the profiling detail page