šŸš€ OpenSpeedTest - Test Your Network Speed [Part 9 of 10]

:rocket: OpenSpeedTest - Test Your Network Speed [Part 9 of 10]

Self-hosted speed test to monitor your network performance

:bar_chart::high_voltage::globe_with_meridians::magnifying_glass_tilted_left:


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!


:brain: 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


:clipboard: What You’ll Need

Prerequisites

  • :white_check_mark: Docker and Portainer running (Part 4)

  • :white_check_mark: Nginx Proxy Manager configured (Part 5)

  • :white_check_mark: Minimal resources (very lightweight)

Ports Required

  • Port 8888 - OpenSpeedTest web interface

:rocket: 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 # 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! :tada:


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.


:globe_with_meridians: 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: :white_check_mark: Enable (if using DNS challenge)

  5. Email Address: Your email for Let’s Encrypt notifications

  6. Agree to Terms: :white_check_mark: 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: :white_check_mark: Enable

  • Block Common Exploits: :white_check_mark: Enable

  • Websockets Support: :white_check_mark: 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: :white_check_mark: Enable

  • HTTP/2 Support: :white_check_mark: Enable

  • HSTS Enabled: :white_large_square: Leave unchecked

Click: Save


Step 3: Test Access

Open your browser:


https://speedtest.homelab.example.com

You should see the OpenSpeedTest interface!


:bullseye: 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


:light_bulb: 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


:wrench: 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


:hammer_and_wrench: 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.


:brain: 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!)


:speech_balloon: 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 →