speedtest Docker & Self-Hosted Deployment

GitHub

Self-hosted Speed Test for HTML5 and more. Easy setup, examples, configurable, mobile friendly. Supports PHP, Node, Multiple servers, and more

RAW Compose
1. Pull Image (DOCKERHUB) docker pull library/postgres
2. Docker Run (1-Click Launch) docker run -d --name speedtest -p 9123:9123 --restart always postgres:alpine
3. Podman Run podman run -d --name speedtest -p 9123:9123 --restart always postgres:alpine
4. Skopeo Inspect (Zero-Pull Manifest) skopeo inspect docker://docker.io/library/postgres:alpine
5. ORAS Pull (OCI Artifact) oras pull postgres:alpine
6. Compose Deployment docker compose up -d
docker/test/docker-compose.yml
Download .yml
## this is a docker compose file used to test all scenarios
## do not use it in production
x-shared:
  speedtest-service: &speedtest-service
    environment:
      - PASSWORD=gimmeTheStats1337
      - [email protected]
      - ENABLE_ID_OBFUSCATION=true
      - MODE=standalone
      - REDACT_IP_ADDRESSES=true
      - TELEMETRY=true

services:
  ###################### POSTGRESQL ################################
  pg:
    image: postgres:alpine
    environment:
      POSTGRES_PASSWORD: Not4SecureProduction
      POSTGRES_USER: librespeed
    volumes:
      # mount init script from source to create database tables
      - ../../results/telemetry_postgresql.sql:/docker-entrypoint-initdb.d/01-init.sql

  speedtest-debian-pg:
    build:
      context: ../..
      dockerfile: Dockerfile
    environment: &env_vars_pg
      - PASSWORD=gimmeTheStats1337
      - DB_HOSTNAME=pg
      - DB_NAME=librespeed
      - DB_PASSWORD=Not4SecureProduction
      - DB_TYPE=postgresql
      - DB_USERNAME=librespeed
      - [email protected]
      - ENABLE_ID_OBFUSCATION=true
      - MODE=standalone
      - REDACT_IP_ADDRESSES=true
      - TELEMETRY=true
    ports:
      - 9123:8080

  speedtest-alpine-pg:
    build:
      context: ../..
      dockerfile: Dockerfile.alpine
    environment: *env_vars_pg
    ports:
      - 9124:8080

  ####################### MYSQL ##############################

  mysql:
    image: mysql:lts
    environment:
      MYSQL_ROOT_PASSWORD: Not4SecureProduction
      MYSQL_USER: librespeed
      MYSQL_PASSWORD: Not4SecureProduction
      MYSQL_DATABASE: librespeed
    volumes:
      # mount init script from source to create database tables
      - ../../results/telemetry_mysql.sql:/docker-entrypoint-initdb.d/01-init.sql

  speedtest-debian-mysql:
    # check at http://localhost:9125/results/sanitycheck.php
    build:
      context: ../..
      dockerfile: Dockerfile
    environment: &env_vars_mysql
      - PASSWORD=gimmeTheStats1337
      - DB_HOSTNAME=mysql
      - DB_NAME=librespeed
      - DB_PASSWORD=Not4SecureProduction
      - DB_TYPE=mysql
      - DB_USERNAME=librespeed
      - [email protected]
      - ENABLE_ID_OBFUSCATION=true
      - MODE=standalone
      - REDACT_IP_ADDRESSES=true
      - TELEMETRY=true
    ports:
      - 9125:8080
  speedtest-alpine-mysql:
    build:
      context: ../..
      dockerfile: Dockerfile.alpine
    environment: *env_vars_mysql
    ports:
      - 9126:8080

  ####################### MSSQL ##############################

  mssql:
    image: mcr.microsoft.com/mssql/server:2022-latest
    environment:
      - ACCEPT_EULA=Y
      - SA_PASSWORD=Not4SecureProduction1337
      - MSSQL_PID=Express
    healthcheck:
      test:
        ["CMD-SHELL", "/opt/mssql-tools18/bin/sqlcmd -S localhost -U sa -P $$SA_PASSWORD -C -Q 'SELECT 1' || exit 1"]
      interval: 10s
      retries: 5
      start_period: 30s

  mssql-init:
    image: mcr.microsoft.com/mssql/server:2022-latest
    depends_on:
      mssql:
        condition: service_healthy
    environment:
      - SA_PASSWORD=Not4SecureProduction1337
    volumes:
      - ../../results/telemetry_mssql.sql:/docker-entrypoint-initdb.d/01-init.sql:ro
    command: >
      bash -c '
        echo "Waiting for MSSQL to be ready...";
        until /opt/mssql-tools18/bin/sqlcmd -S mssql -U sa -P "$$SA_PASSWORD" -C -Q "SELECT 1"; do
          sleep 1;
        done;
        echo "Running init scripts...";
        for f in /docker-entrypoint-initdb.d/*.sql; do
          echo "Executing $$f...";
          /opt/mssql-tools18/bin/sqlcmd -S mssql -U sa -P "$$SA_PASSWORD" -C -i "$$f";
        done;
        echo "Initialization complete!";
      '

  speedtest-debian-mssql:
    build:
      context: ../..
      dockerfile: Dockerfile
    environment: &env_vars_mssql
      - PASSWORD=gimmeTheStats1337
      - DB_HOSTNAME=mssql
      - DB_NAME=librespeed
      - DB_PASSWORD=Not4SecureProduction1337
      - DB_TYPE=mssql
      - DB_USERNAME=sa
      - [email protected]
      - ENABLE_ID_OBFUSCATION=true
      - MODE=standalone
      - REDACT_IP_ADDRESSES=true
      - TELEMETRY=true
    ports:
      - 9130:8080

  speedtest-alpine-mssql:
    build:
      context: ../..
      dockerfile: Dockerfile.alpine
    environment: *env_vars_mssql
    ports:
      - 9131:8080

  ################ SQLITE ####################################

  speedtest-debian-sqlite:
    # check at http://localhost:9125/results/sanitycheck.php
    build:
      context: ../..
      dockerfile: Dockerfile
    environment: &env_vars_sqlite
      - PASSWORD=gimmeTheStats1337
      - [email protected]
      - ENABLE_ID_OBFUSCATION=true
      - MODE=standalone
      - REDACT_IP_ADDRESSES=true
      - TELEMETRY=true
    ports:
      - 9127:8080

  speedtest-alpine-sqlite:
    build:
      context: ../..
      dockerfile: Dockerfile.alpine
    environment: *env_vars_sqlite
    ports:
      - 9128:8080

  speedtest-alpine-sqlite-dual:
    <<: *speedtest-service
    build:
      context: ../..
      dockerfile: Dockerfile.alpine
    environment:
      - MODE=dual

    volumes:
      - ./servers.json:/servers.json:ro
    ports:
      - 9129:8080

  ##############  TEST CONTAINER  ###############################################################
  test-container:
    image: alpine
    depends_on:
      - pg
      - mysql
      - mssql-init
      - speedtest-alpine-mysql
      - speedtest-alpine-pg
      - speedtest-alpine-mssql
    volumes:
      - ./test-script.sh:/test-script.sh
    command:
      - sh
      - /test-script.sh