[教程]配置 Librespeed 多测速节点

先放个实际搭建好的网站:https://speedtest.vmrack.dpdns.org/
最近在写 EasyLink 的测评,他家VPS主打三网精品和三网优化,于是打算做一个Librespeed测速站,让MJJ实际体验下线路质量image,尝试跟着官方 docker 教程配置,由于个人理解能力不行,配置出错好几次image,在网上搜了一圈没找到配置双测速节点的教程,最后靠自己弄好了,写个配置教程方便之后的MJJ
注意!Librespeed 没有鉴权设置,可以直接通过浏览器的开发者工具获取到测速节点地址,换句话说,你的测速后端还可以是我的测速后端,配置之前请斟酌风险
架构如下:

以下内容基于假设测速网站前端为(1.1.1.1:1234),测速节点1为(1.1.1.1:11111),测速节点2为(2.2.2.2:22222),请根据实际情况进行修改

先把域名 backendone.example.comspeedtest.example.com DNS 解析到了配置双端的VPS IP(1.1.1.1),域名 backendtwo.example.com DNS 解析到了只配置后端的VPS IP(2.2.2.2)

先配置仅有后端的VPS(2.2.2.2),
安装docker nginx certbot

apt update -y && apt upgrade -y && apt install curl nginx python3-certbot-nginx  -y && curl -fsSL https://get.docker.com -o get-docker.sh && sh ./get-docker.sh

新建并进入目录

mkdir -p /opt/librespeed && cd /opt/librespeed

配置测速节点2的nginx

nano /etc/nginx/sites-available/backendtwo.example.com

填入内容

server {
    server_name backendtwo.example.com;

    location / {
        proxy_pass http://localhost:22222;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }

    listen 80;
    listen [::]:80;
}

重载nginx并获取证书

ln -s /etc/nginx/sites-available/backendtwo.example.com /etc/nginx/sites-enabled/
systemctl reload nginx
certbot --nginx -d backendtwo.example.com

部署docker

nano docker-compose.yml

填入内容

services:
  librespeed-backend:
    image: ghcr.io/librespeed/speedtest:latest
    container_name: librespeed-backend
    restart: always
    ports:
      - "22222:8080"
    environment:
      MODE: "backend"
      IPINFO_APIKEY: "12345678" # ipinfo.io 的 API 密钥,可选,如果填入的话可以展示与测速点的距离,不填入的话将使用离线数据库

运行docker

docker compose up -d

至此,后端测速节点配置完成,可以访问网址 https://backendtwo.example.com/getIP.php 来查看是否能获取到本机IP地址,能获取到即为配置成功

接下来,我们来部署配置双端的VPS IP(1.1.1.1)
安装docker nginx certbot

apt update -y && apt upgrade -y && apt install curl nginx python3-certbot-nginx  -y && curl -fsSL https://get.docker.com -o get-docker.sh && sh ./get-docker.sh

新建并进入目录,因为有要保存数据的前端,要多新建一个database目录

mkdir -p /opt/librespeed && mkdir -p /opt/librespeed/database && cd /opt/librespeed

配置测速节点1的nginx

nano /etc/nginx/sites-available/backendone.example.com

填入内容

server {
    server_name backendone.example.com;
    
    location / {
        proxy_pass http://localhost:11111;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }

    listen 80;
    listen [::]:80;
}

重载nginx并获取证书

ln -s /etc/nginx/sites-available/backendone.example.com /etc/nginx/sites-enabled/
systemctl reload nginx
certbot --nginx -d backendone.example.com

配置测速网站前端的nginx

nano /etc/nginx/sites-available/speedtest.example.com

填入内容

server {
    server_name speedtest.example.com;
    client_max_body_size 0;
    location / {
        proxy_pass http://localhost:1234;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }

    listen 80;
    listen [::]:80;
}

重载nginx并获取证书

ln -s /etc/nginx/sites-available/speedtest.example.com /etc/nginx/sites-enabled/
systemctl reload nginx
certbot --nginx -d speedtest.example.com

部署docker

nano docker-compose.yml

填入内容

services:
  frontend:
    image: ghcr.io/librespeed/speedtest:latest
    container_name: librespeed-frontend
    restart: always
    ports:
      - "1234:8080"
    environment:
      MODE: "frontend"
      TITLE: "Librespeed" # 网站标题
      TELEMETRY: "true" # 如果为true则记录测速数据,可以生成测速图,默认false
      PASSWORD: "123456" # 如果想查看记录数据的话要填写,可以通过访问 网站/results/stats.php 查看测速数据,如果未设置,统计信息页面将不允许访问
      REDACT_IP_ADDRESSES: "false" # 如果为true的话会混淆测速者的IP地址来保护隐私,默认false
      EMAIL: "admin@gmail.com" # 如果记录数据的话要填写,将作为通用数据保护条例的联系邮箱
    volumes:
      - ./database:/database
      - ./servers.json:/servers.json

  backend:
    image: ghcr.io/librespeed/speedtest:latest
    container_name: librespeed-backend
    restart: always
    ports:
      - "11111:8080"
    environment:
      MODE: "backend"
      IPINFO_APIKEY: "12345678" # ipinfo.io 的 API 密钥,可选,如果填入的话可以展示与测速点的距离,不填入的话将使用离线数据库

配置下servers.json,这是两节点的示例,你可以自己加更多节点

nano servers.json

填入内容

[
    {
        "name": "backendone",
        "server": "https://backendone.example.com/",
        "dlURL": "garbage.php",
        "ulURL": "empty.php",
        "pingURL": "empty.php",
        "getIpURL": "getIP.php"
    },
    {
        "name": "backendtwo",
        "server": "https://backendtwo.example.com/",
        "dlURL": "garbage.php",
        "ulURL": "empty.php",
        "pingURL": "empty.php",
        "getIpURL": "getIP.php"
    }
]

运行docker

docker compose up -d

至此,测速网站配置完成,可以访问网址 https://speedtest.example.com/ 来访问测速网站

PS:

  1. 如何获取并使用别人的测速后端节点?
    官方网站为例


    第一张图是网站在初始加载的时候检测可用测速节点,第二张图是进行测速的请求
    可以得到这两个测速后端地址
    https://nyc.speedtest.clouvider.net/backend/empty.php
    https://lasspeed.sharktech.net/backend/empty.php
    根据这两个网址,配置出servers.json
[
    {
        "name": "Clouvider",
        "server": "https://nyc.speedtest.clouvider.net/",
        "dlURL": "backend/garbage.php",
        "ulURL": "backend/empty.php",
        "pingURL": "backend/empty.php",
        "getIpURL": "backend/getIP.php"
    },
    {
        "name": "Sharktech",
        "server": "https://lasspeed.sharktech.net/",
        "dlURL": "backend/garbage.php",
        "ulURL": "backend/empty.php",
        "pingURL": "backend/empty.php",
        "getIpURL": "backend/getIP.php"
    }
]

然后就可以用仅前端的docker-compose.yml进行部署

services:
  frontend:
    image: ghcr.io/librespeed/speedtest:latest
    container_name: librespeed-frontend
    restart: always
    ports:
      - "1234:8080"
    environment:
      MODE: "frontend"
      TITLE: "Librespeed" # 网站标题
      TELEMETRY: "true" # 如果为true则记录测速数据,可以生成测速图,默认false
      PASSWORD: "123456" # 如果想查看记录数据的话要填写,可以通过访问 网站/results/stats.php 查看测速数据,如果未设置,统计信息页面将不允许访问
      REDACT_IP_ADDRESSES: "false" # 如果为true的话会混淆测速者的IP地址来保护隐私,默认false
      EMAIL: "admin@gmail.com" # 如果记录数据的话要填写,将作为通用数据保护条例的联系邮箱
    volumes:
      - ./database:/database
      - ./servers.json:/servers.json

需要注意的是,因为调用的后端测速节点为https,那么必须要配置https证书才可以使用,不能直接用IP+端口的办法进行访问,因为前文已经写过,不再赘述
2. 如何修改测速前端网页icon?
需要挂载一个favicon.ico到容器内的/speedtest/favicon.ico
例如

./favicon.ico:/speedtest/favicon.ico

让我来补一下架构图

1 个赞

前排前排感谢分享

3 个赞