[5 Mins Docker] A Self-Hosted Speedtest App with Test History - Speedtest-x (Koyeb) - NETSEC

Latest

Learning, Sharing, Creating

Cybersecurity Memo

Monday, March 13, 2023

[5 Mins Docker] A Self-Hosted Speedtest App with Test History - Speedtest-x (Koyeb)

This Github Speedtest-x project is an extension of LibreSpeed, which is a pretty lightweight speedtest tool. Speedtest-x project uses file datebase to save speedtest results from various users. Thus you can check out different results from various countries/regions.



Features


  • Self-hosted lightweight speedtest page
  • User speedtest result datasheet
  • No MySQL, but lightweight file database
  • Use ip.sb to get IP info by default
My Forked Github: https://
Original Author's Github: https://github.com/BadApple9/speedtest-x
Docker Hub Image: https://hub.docker.com/r/badapple9/speedtest-x

Test Sites:

Limitation: Sige in account every 7 days, else your services will be paused in 48 hours. 




Docker Run Deployment

One line command to bring your speedtest site up and runnin if you have your docker environment ready. 

Else you can check this post for howto set up your docker environment:

Run Docker using docker run command
  • docker run -d --name speedtest-x-en -p 9001:80 -it johnyan2/speedtest-x-en

-d:start it as a daemon mode

9001: default mapping internal port 80 to host port 9001


Environment variables :

-e WEBPORT=80: Internal Speedtest-x Docker Web Port . Default is 80.

-e MAX_LOG_COUNT=100: Maximum history numbers for saved test results. Default is 100.

-e IP_SERVICE=ip.sb: Which IP DB service provider( default is ip.sb or ipinfo.io)

-e SAME_IP_MULTI_LOGS=false: If allow save multiple results for same ip. Default is false. but strongly suggest to set it to True


Run Docker with multiple environment variables
  • docker run -d -e SAME_IP_MULTI_LOGS=true -e MAX_LOG_COUNT=500 -p 9001:80 -it johnyan2/speedtest-x-en


Speedtest-X Home Page:


Self Hosted Docker Installation Pre-requirements

Free resources you might need to complete this docker project:


Pre-installed services:

  • Docker, 
    • apt update
    • apt install docker.io
    • apt install docker-compose
    • apt upgrade docker.io
    • mkdir /root/data/docker_data/<docker_name>
  • Docker-Compose (Using Ubuntu OS for the commands)
    • Docker-compose down
    • Optional command : use following command to backup your Docker data. You might need to change your folder name based on your docker configuraiton
      • cp -r /root/data/docker_data/<docker_name> /root/data/docker_data_backup/<docker_name>
    • docker-compose pull
    • docker-compose up -d
    • docker image prune
  • Portainer (Optional)
    • docker volume create portainer_data
    • docker run -d -p 9000:9000 --name portainer --restart always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce:latest
  • Install some applications: apt install wget curl sudo vim git (Optional)
  • aapanel with Nginx (Optional)
  • Nginx Proxy Manager (Optional)
  • Install screen (Optional)
    • Install screen (Depends on the Linux Distribution if it came pre installed or not) : yum install screen
    • Initiate a Screen : screen or  screen -S <screen name> <command to execute>
    • Detach from the screen : "CTRL+A,D" not "CTRL+A+D"
    • List all the screen currently working : screen -ls
    • Reattach to a screen : screen  -r  <session number> or screen -r <screen name>
    • Kill specific screen: screen -X -S <screen name> quit
    • Kill all screens : pkill screen



Deploy to Own VPS

Not recommended to deploy it to other application platform such as fly.io, since those platforms are having limitation for the outbound/inbound througputs. It will be better for you to know the speed limitation on your VPS before deploying to it.


Speedtest-X Test History Result Page:

Make Docker Support ipv6

If you would like your docker to support IPv6, you can edit /etc/docker/daemon.json ,add following content into file, or create this new file if it doesn't exist.
  • {
  • "ipv6": true,
  • "fixed-cidr-v6": "fd00::/80",
  • "experimental": true,
  • "ip6tables": true
  • }



Deploy Docker to Koyeb Platform

URL: https://www.koyeb.com/
Koyeb is a developer-friendly serverless platform to deploy apps globally. No-ops, servers, and infrastructure management. For side-projects, it is $0/month. Free account ,Koyeb is giving you $5.5/month free credit to use, which is enough for two Nano type apps, or one Micro type app. 

Price list:

 

NANO

MICRO

SMALL

MEDIUM

LARGE

XLARGE

CPU

1

1

1

2

4

8

RAM

256MB

512MB

1GB

2GB

4GB

8GB

DISK

2.5GB SSD

5GB SSD

10GB SSD

20GB SSD

40GB SSD

80GB SSD

PRICE

$2.7/mo

$5.4/mo

$10.7/mo

$21.4/mo

$42.9/mo

$85.7/mo


If you have Github account, you can log in with your Github account for free. But you do need provide a valid credit card to enable your free account to use. 

After you created and enabled your free account, you should be able to log in and start your Koyeb journey. 

Configuration :

Configuration Cont. :


Using your own domain for your Koyeb deployment:

Demo site: fast.51sec.org


Create Own Speedtest Docker Using Dockerfile

 
mkdir src
cd src 
wget https://github.com/51sec/speedtest-x-en/archive/refs/heads/master.zip
unzip master.zip
mv speedtest-x-en/* .
rm master.zip
rm -fr speedtest-x-en

vi Dockerfile
FROM php:7.2-apache
COPY src/ /var/www/html/

$ docker build -t speedtest .
Sending build context to Docker daemon  372.7kB
Step 1/2 : FROM php:7.2-apache
 ---> c61d277263e1
Step 2/2 : COPY src/ /var/www/html/
 ---> e25caaefbc8e
Successfully built e25caaefbc8e
Successfully tagged speedtest:latest
[node2] (local) [email protected] ~
$ docker run -dit --name st -p 80:80 speedtest
4aa7d58c485b1599518605c9bce98959cbdcc8c473b5f3807e633620777e706d
[node2] (local) [email protected] ~
$ docker exec -it st /bin/bash


You also can set up a Github action workflow to complete the process making docker image and upload to dockerhub.

Video

 



No comments:

Post a Comment