No Flash, No Java, No WebSocket, No Bullshit.
This is a very lightweight speed test implemented in JavaScript, using XMLHttpRequest and Web Workers.
All modern browsers are supported: IE11, latest Edge, latest Chrome, latest Firefox, latest Safari. Works with mobile versions too.
.php
suffixes)You can use an Ansible role for installing speedtest-go easily. You can find the role on the Ansible galaxy. There is a separate repository for documentation about the Ansible role.
You need Go 1.16+ to compile the binary. If you have an older version of Go and don't want to install the tarball
manually, you can install newer version of Go into your GOPATH
:
Install Go 1.17
$ go get golang.org/dl/go1.17.1
# Assuming your GOPATH is default (~/go), Go 1.17.1 will be installed in ~/go/bin
$ ~/go/bin/go1.17.1 version
go version go1.17.1 linux/amd64
Clone this repository:
$ git clone github.com/librespeed/speedtest-go
Build
# Change current working directory to the repository
$ cd speedtest-go
# Compile
$ go build -ldflags "-w -s" -trimpath -o speedtest main.go
Copy the assets
directory, settings.toml
file along with the compiled speedtest
binary into a single directory
If you have telemetry enabled,
For PostgreSQL/MySQL, create database and import the corresponding .sql
file under database/{postgresql,mysql}
# assume you have already created a database named `speedtest` under current user
$ psql speedtest < database/postgresql/telemetry_postgresql.sql
For embedded BoltDB, make sure to define the database_file
path in settings.toml
:
database_file="speedtest.db"
Put assets
folder under the same directory as your compiled binary.
assets
directoryassets
directory. They can be access directly under the server root
(e.g. /example-singleServer-full.html
)/
, simply put a file named index.html
under assets
Change settings.toml
according to your environment:
# bind address, use empty string to bind to all interfaces
bind_address="127.0.0.1"
# backend listen port, default is 8989
listen_port=8989
# proxy protocol port, use 0 to disable
proxyprotocol_port=0
# Server location, use zeroes to fetch from API automatically
server_lat=0
server_lng=0
# ipinfo.io API key, if applicable
ipinfo_api_key=""
# assets directory path, defaults to `assets` in the same directory
# if the path cannot be found, embedded default assets will be used
assets_path="./assets"
# password for logging into statistics page, change this to enable stats page
statistics_password="PASSWORD"
# redact IP addresses
redact_ip_addresses=false
# database type for statistics data, currently supports: none, memory, bolt, mysql, postgresql
# if none is specified, no telemetry/stats will be recorded, and no result PNG will be generated
database_type="postgresql"
database_hostname="localhost"
database_name="speedtest"
database_username="postgres"
database_password=""
# if you use `bolt` as database, set database_file to database file location
database_file="speedtest.db"
# TLS and HTTP/2 settings. TLS is required for HTTP/2
enable_tls=false
enable_http2=false
# if you use HTTP/2 or TLS, you need to prepare certificates and private keys
# tls_cert_file="cert.pem"
# tls_key_file="privkey.pem"
Copyright (C) 2016-2020 Federico Dossena Copyright (C) 2020 Maddie Zhan
This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU Lesser General Public License along with this program. If not, see https://www.gnu.org/licenses/lgpl.