OpenSpeedTest - Test Your Network Speed [Part 9 of 10]
Self-hosted speed test to monitor your network performance
![]()
![]()
![]()
![]()
Ever wonder if your network is actually as fast as it should be? Want to test LAN speeds without relying on external services?
OpenSpeedTest is a free, self-hosted speed test tool that runs entirely in your browser.
Features:
-
Test download and upload speeds
-
Measure ping and jitter
-
No external dependencies
-
Works completely offline
-
Beautiful, modern interface
-
Mobile-friendly
-
Supports up to 10 Gbps testing
-
No data collection or tracking
Letās set it up!
What is OpenSpeedTest?
OpenSpeedTest is an HTML5-based network speed test application.
Perfect for:
-
Testing LAN speeds - Check network performance between devices
-
WiFi vs Ethernet - Compare wireless and wired speeds
-
Network troubleshooting - Identify bottlenecks
-
Verifying upgrades - Confirm new hardware is working
-
Continuous monitoring - Track network performance over time
Why self-host a speed test?
-
Test LAN speeds - External services only test internet speed
-
Privacy - No data sent to third parties
-
Works offline - No internet connection required
-
Accurate - Direct connection to your server
-
Free - No limits or subscriptions
What Youāll Need
Prerequisites
-
Docker and Portainer running (Part 4) -
Nginx Proxy Manager configured (Part 5) -
Minimal resources (very lightweight)
Ports Required
- Port 8888 - OpenSpeedTest web interface
Installing OpenSpeedTest
OpenSpeedTest is a single container with no database or persistent storage needed.
Step 1: Deploy via Portainer
Login to Portainer:
https://portainer.homelab.example.com
Create new stack:
-
Click Stacks in left sidebar
-
Click + Add stack
-
Name:
openspeedtest -
Build method: Web editor
Paste this compose configuration:
version: '3.8'
services:
openspeedtest:
container_name: openspeedtest
image: openspeedtest/latest
environment:
TZ: America/New_York # Change to your timezone
ports:
- '8888:3000'
restart: unless-stopped
networks:
- portainer-network
networks:
portainer-network:
external: true
Note about timezone:
-
Find your timezone: TZ Database Timezones
-
Examples:
America/New_York,America/Los_Angeles,Europe/London,Asia/Tokyo
Step 2: Deploy the Stack
Deploy:
-
Scroll down
-
Click Deploy the stack
-
Wait 1-2 minutes for deployment
Verify deployment:
-
Go to Containers in Portainer
-
Confirm container is running:
-
openspeedtest
No environment variables or data directories needed! ![]()
Step 3: Configure Firewall
On your Ubuntu server (via SSH):
# Allow OpenSpeedTest from LAN
sudo ufw allow from 192.168.1.0/24 to any port 8888 proto tcp comment 'OpenSpeedTest from LAN'
# Check firewall status
sudo ufw status numbered
Note: Replace 192.168.1.0/24 with your network range.
Setting Up Proxy with NPM
Now letās add OpenSpeedTest to Nginx Proxy Manager.
Step 1: Create SSL Certificate
Login to NPM:
https://npm.homelab.example.com
Create certificate:
-
Go to SSL Certificates
-
Click Add SSL Certificate ā Letās Encrypt
-
Domain Names:
speedtest.homelab.example.com -
Use a DNS Challenge:
Enable (if using DNS challenge) -
Email Address: Your email for Letās Encrypt notifications
-
Agree to Terms:
Check -
Click Save
-
Wait for certificate issuance (1-2 minutes)
Step 2: Create Proxy Host
In NPM:
-
Go to Hosts ā Proxy Hosts
-
Click Add Proxy Host
Details Tab:
-
Domain Names:
speedtest.homelab.example.com -
Scheme:
http -
Forward Hostname/IP:
openspeedtest(container name) -
Forward Port:
3000(internal port, NOT 8888) -
Cache Assets:
Enable -
Block Common Exploits:
Enable -
Websockets Support:
Enable
Advanced Tab:
Click the Advanced tab and add this custom configuration:
client_max_body_size 35M;
Why? OpenSpeedTest needs to upload at least 35MB of data for accurate upload speed testing.
SSL Tab:
-
SSL Certificate: Select your certificate
-
Force SSL:
Enable -
HTTP/2 Support:
Enable -
HSTS Enabled:
Leave unchecked
Click: Save
Step 3: Test Access
Open your browser:
https://speedtest.homelab.example.com
You should see the OpenSpeedTest interface!
Using OpenSpeedTest
Running a Speed Test
Itās incredibly simple:
-
Open the URL in your browser
-
Click āStartā button
-
Wait for test to complete (30-60 seconds)
-
View results:
-
Download speed
-
Upload speed
-
Ping (latency)
-
Jitter (ping variation)
Thatās it! No configuration, no accounts, no tracking.
Understanding Results
Download Speed:
-
How fast data comes FROM the server TO your device
-
Measured in Mbps (megabits per second) or Gbps (gigabits per second)
-
Good LAN speed: 900+ Mbps on gigabit network
Upload Speed:
-
How fast data goes FROM your device TO the server
-
Also measured in Mbps/Gbps
-
Good LAN speed: 900+ Mbps on gigabit network
Ping (Latency):
-
Time for data to travel to server and back
-
Measured in milliseconds (ms)
-
Good LAN ping: < 1ms
Jitter:
-
Variation in ping times
-
Measured in milliseconds (ms)
-
Good jitter: < 1ms
-
High jitter = unstable connection
Use Cases
Test WiFi vs Ethernet:
-
Run test on WiFi
-
Connect same device via Ethernet
-
Run test again
-
Compare results
Typical results:
-
WiFi 5 (802.11ac): 300-600 Mbps
-
WiFi 6 (802.11ax): 600-900 Mbps
-
Gigabit Ethernet: 900-950 Mbps
Troubleshoot Slow Network:
-
Test from device experiencing issues
-
Compare to other devices
-
Check if issue is device-specific or network-wide
-
Test at different times of day
Verify Network Upgrades:
-
Upgraded to gigabit switch? Test it!
-
New WiFi router? Measure the improvement!
-
Installed Cat6 cables? Confirm the speed!
Monitor Network Health:
-
Run tests periodically
-
Track performance over time
-
Identify degradation early
-
Document baseline performance
Tips for Accurate Testing
For Best Results:
Use Ethernet:
-
WiFi introduces variables
-
Wired connection = most accurate
-
Test WiFi separately if needed
Close Other Apps:
-
Stop downloads/uploads
-
Pause streaming services
-
Close bandwidth-heavy apps
-
One test at a time
Test Multiple Times:
-
Run 3-5 tests
-
Average the results
-
Ignore outliers
-
Look for consistency
Test from Different Devices:
-
Desktop vs laptop
-
Different WiFi devices
-
Various locations
-
Identify device-specific issues
Maintenance
Check Container Status
# View OpenSpeedTest container
docker ps | grep openspeedtest
# Check logs
docker logs openspeedtest
Update OpenSpeedTest
Via Portainer:
-
Go to Stacks ā openspeedtest
-
Click Editor
-
Click Update the stack
-
Select Re-pull image and redeploy
-
Wait for update to complete
Updates are rare - OpenSpeedTest is very stable.
Restart Container
# Via command line
docker restart openspeedtest
# Or via Portainer: Containers ā openspeedtest ā Restart
Troubleshooting
Upload Test Fails or Shows Low Speeds
Problem: NPM is blocking large uploads.
Solution: Verify custom Nginx configuration:
-
Go to NPM ā Proxy Hosts
-
Go to Advanced tab
-
Confirm:
client_max_body_size 35M; -
Save and test again
Results Donāt Match Expected Speed
Check these factors:
Network type:
-
Gigabit Ethernet: ~940 Mbps max
-
Fast Ethernet: ~95 Mbps max
-
WiFi 5: ~600 Mbps typical
-
WiFi 6: ~900 Mbps typical
Cable quality:
-
Cat5e: 1 Gbps max
-
Cat6/6a: 10 Gbps max
-
Old/damaged cables: degraded performance
Switch/router:
-
Gigabit switch required for 1 Gbps
-
Fast Ethernet switch limits to 100 Mbps
-
Check switch specifications
Device limitations:
-
Old network card
-
USB Ethernet adapter (often slower)
-
WiFi adapter capabilities
Canāt Access via Domain
Check:
-
Container is running:
docker ps | grep openspeedtest -
Firewall allows port 8888
-
NPM proxy host is configured correctly
-
SSL certificate is valid
Test direct access:
http://192.168.1.100:8888
If this works, issue is with NPM configuration.
TL;DR
-
OpenSpeedTest is a self-hosted speed test tool
-
Features: Download/upload speed, ping, jitter testing
-
Installation: Single container, no database needed
-
Setup: Deploy via Portainer, add to NPM
-
Usage: Click āStartā and view results
-
Perfect for: LAN speed testing, network troubleshooting
-
Next: Weāll set up Uptime Kuma for service monitoring in Part 10 (final part!)
Your Turn
Whatās your current network speed?
Have you tested WiFi vs Ethernet?
Any network bottlenecks youāve discovered?
Drop a comment below!
Navigation: ā Part 8 | Part 10 ā