先放个实际搭建好的网站: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 nginxcertbot --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 nginxcertbot --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 nginxcertbot --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: "[email protected]" # 如果记录数据的话要填写,将作为通用数据保护条例的联系邮箱 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: "[email protected]" # 如果记录数据的话要填写,将作为通用数据保护条例的联系邮箱 volumes: - ./database:/database - ./servers.json:/servers.json需要注意的是,因为调用的后端测速节点为https,那么必须要配置https证书才可以使用,不能直接用IP+端口的办法进行访问,因为前文已经写过,不再赘述
2. 如何修改测速前端网页icon?
需要挂载一个favicon.ico到容器内的/speedtest/favicon.ico
例如
./favicon.ico:/speedtest/favicon.ico
评论 (0)