In this tutorial, we'll learn how to install and configure Speedtest Tracker on Ubuntu 24.04.
Introduction
Maintaining a reliable internet connection is essential for work, communication, streaming, gaming, and business operations. Whenever our network slows down, the first reaction is usually to run a quick speed test, but that only shows the speed at that moment. We need something that tracks performance over time.
In this guide, we will install and configure Speedtest Tracker on an Ubuntu 24.04 server using Docker. We will also secure it with Nginx and SSL, making it safe and ready to access through a domain.
What is Speedtest Tracker?
Speedtest Tracker is a self-hosted web application that uses Ookla’s Speedtest CLI to automatically test internet speed at regular intervals. The results are stored and presented in an easy-to-read dashboard, helping us analyze download speed, upload speed, latency, and network stability over time.
Prerequisites
Before we begin, ensure we have the following:
- An Ubuntu 24.04 dedicate server or KVM VPS.
- Basic Linux Command Line Knowledge.
- A domain name, pointing A record to server IP.
Install and Configure Speedtest Tracker on Ubuntu 24.04
Step 1: Install Docker and Docker Compose
Speedtest Tracker runs best in Docker, so we set that up first.
Run the following:
sudo apt update
sudo apt install -y ca-certificates curl gnupg
# Add Docker’s GPG key and repository
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo tee /etc/apt/keyrings/docker.asc >/dev/null
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] \
https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" \
| sudo tee /etc/apt/sources.list.d/docker.list >/dev/null
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
Log out and log back in once so Docker group applies.
Step 2: Create a Folder for Speedtest Tracker
This will store the app and its data.
mkdir -p ~/speedtest-tracker
cd ~/speedtest-tracker
Step 3: Generate App Key (Required)
echo -n 'base64:'; openssl rand -base64 32
Copy the generated key. We paste it in the next step.
Step 4: Create Docker Compose File
nano docker-compose.yml
Paste this:
services:
speedtest-tracker:
image: lscr.io/linuxserver/speedtest-tracker:latest
container_name: speedtest-tracker
restart: unless-stopped
ports:
- "8080:80"
environment:
- PUID=1000
- PGID=1000
- APP_KEY=PASTE_YOUR_KEY_HERE
- DB_CONNECTION=sqlite
- APP_TIMEZONE=Asia/Kolkata
- SPEEDTEST_SCHEDULE=*/30 * * * *
volumes:
- ./data:/config
This setup uses SQLite (simple and perfect for personal or small business use).
Step 5: Start Speedtest Tracker
docker compose pull
docker compose up -d
Check container status:
docker compose ps
Step 6: Verify Speed Tests Are Running
Logs help confirm everything is working:
docker compose logs -f speedtest-tracker
Give it 30–60 minutes and you’ll start seeing history charts.
Step 7: Update When Needed
To update Speedtest Tracker:
cd ~/speedtest-tracker
docker compose pull
docker compose up -d
Optional Enhancements
Use Custom Test Schedule
Examples:
Frequency Value
Every 15 min */15 * * * *
Every hour 0 * * * *
Once daily at 6am 0 6 * * *
Edit the SPEEDTEST_SCHEDULE value in docker-compose.yml.
Use a Custom Domain
If we want a domain like speedtest.example.com, we can later add a reverse proxy like Nginx.
Step 8: Install Nginx
sudo apt update
sudo apt install -y nginx
Enable and check status:
sudo systemctl enable --now nginx
sudo systemctl status nginx
Create Nginx Config for Speedtest Tracker
sudo nano /etc/nginx/sites-available/speedtest
Paste this:
server {
listen 80;
server_name speedtest.example.com;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
Save and enable it:
sudo ln -s /etc/nginx/sites-available/speedtest /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
If it fails, that means you typed something wrong. Fix it instead of restarting the planet.
Step 9: Install Certbot for HTTPS
sudo apt install -y certbot python3-certbot-nginx
Run Certbot:
sudo certbot --nginx -d speedtest.example.com
Certbot will auto-configure SSL in Nginx.
Auto-Renew SSL Certificates
Certbot already installs a cron job for renewal, but test it because assumptions are for amateurs:
sudo certbot renew --dry-run
If this fails, fix it now rather than three months later when your SSL dies at 3 AM.
Step 10: Access the Dashboard
Open in browser:
https://speedtest.example.com
Default login (change after login):
Email: admin@example.com
Password: password
![]()
Once logged in, update login details, set timezone, and confirm scheduled tests are running.
Conclusion
Speedtest Tracker gives us a practical and reliable way to monitor internet performance over time. Instead of guessing or running one-off tests, we can now track real data and identify patterns that affect productivity, streaming quality, gaming, or business operations. Once installed, it runs quietly in the background and maintains a detailed speed history, making it easier to address issues with our ISP or improve network planning.
