Knowledge Base > IT & Systems > OpenSpeedTest

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:

  1. Click Stacks in left sidebar
  2. Click + Add stack
  3. Name: openspeedtest
  4. Build method: Web editor

Paste this compose configuration:

version: '3.8'

services:
  openspeedtest:
    container_name: openspeedtest
    image: openspeedtest/latest
    environment:
      TZ: America/New_York  # Find yours: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
    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:

  1. Go to SSL Certificates
  2. Click Add SSL Certificate > Let's Encrypt
  3. Domain Names: speedtest.homelab.example.com
  4. Use a DNS Challenge: Enable (if using DNS challenge)
  5. Email Address: Your email for Let's Encrypt notifications
  6. Agree to Terms: Check
  7. Click Save
  8. Wait for certificate issuance (1-2 minutes)

Step 2: Create Proxy Host

In NPM:

  1. Go to Hosts > Proxy Hosts
  2. 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:

  1. Open the URL in your browser
  2. Click "Start" button
  3. Wait for test to complete (30-60 seconds)
  4. 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:

  1. Run test on WiFi
  2. Connect same device via Ethernet
  3. Run test again
  4. 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:

  1. Test from device experiencing issues
  2. Compare to other devices
  3. Check if issue is device-specific or network-wide
  4. 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:

  1. Go to Stacks > openspeedtest
  2. Click Editor
  3. Click Update the stack
  4. Select Re-pull image and redeploy
  5. 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:

  1. Go to NPM > Proxy Hosts
  2. Edit speedtest.homelab.example.com
  3. Go to Advanced tab
  4. Confirm: client_max_body_size 35M;
  5. 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:

  1. Container is running: docker ps | grep openspeedtest
  2. Firewall allows port 8888
  3. NPM proxy host is configured correctly
  4. 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!)