先放个实际搭建好的网站:https://speedtest.vmrack.dpdns.org/
最近在写 EasyLink 的测评,他家VPS主打三网精品和三网优化,于是打算做一个Librespeed测速站,让MJJ实际体验下线路质量
,尝试跟着官方 docker 教程配置,由于个人理解能力不行,配置出错好几次
,在网上搜了一圈没找到配置双测速节点的教程,最后靠自己弄好了,写个配置教程方便之后的MJJ
注意!Librespeed 没有鉴权设置,可以直接通过浏览器的开发者工具获取到测速节点地址,换句话说,你的测速后端还可以是我的测速后端,配置之前请斟酌风险
架构如下:
以下内容基于假设测速网站前端为(1.1.1.1:1234),测速节点1为(1.1.1.1:11111),测速节点2为(2.2.2.2:22222),请根据实际情况进行修改
先把域名 backendone.example.com 和 speedtest.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:
- 如何获取并使用别人的测速后端节点?
以官方网站为例
第一张图是网站在初始加载的时候检测可用测速节点,第二张图是进行测速的请求
可以得到这两个测速后端地址
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


