Self-hosted Speed Test for HTML5 and more. Easy setup, examples, configurable, mobile friendly. Supports PHP, Node, Multiple servers, and more
docker pull library/postgres
docker run -d --name speedtest -p 9123:9123 --restart always postgres:alpine
podman run -d --name speedtest -p 9123:9123 --restart always postgres:alpine
skopeo inspect docker://docker.io/library/postgres:alpine
oras pull postgres:alpine
docker compose up -d
## 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