3种Docker部署方案:从单机测速到全球分布式网络

【免费下载链接】speedtest Self-hosted Speed Test for HTML5 and more. Easy setup, examples, configurable, mobile friendly. Supports PHP, Node, Multiple servers, and more 【免费下载链接】speedtest 项目地址: https://gitcode.com/gh_mirrors/sp/speedtest

LibreSpeed是一款轻量级、无依赖的HTML5网络测速工具,无需Flash、Java或WebSocket即可提供精准的下载、上传、延迟和抖动测试。对于需要自建测速服务的开发者、网络管理员和企业用户,Docker部署提供了最便捷的解决方案。本文将深入探讨三种不同场景下的部署方案,帮助您根据实际需求选择最适合的配置。

场景分析:找到您的部署需求

在开始部署之前,首先需要明确您的使用场景。不同的业务需求对应着不同的技术架构:

单服务器场景:适用于个人用户、小型企业或内部网络测试,只需要一个测速点即可满足需求。这种场景下,独立模式是最佳选择。

多服务器场景:适用于内容分发网络(CDN)提供商、大型企业或全球分布式网络,需要多个地理位置的测速点。这种场景需要前后端分离架构。

混合场景:既需要本地测速服务,又希望连接其他公共测速点。双模式可以满足这种混合需求。

方案一:独立模式部署(单服务器场景)

独立模式是LibreSpeed最简单的部署方式,适合单服务器环境。它集成了完整的Web界面和测速后端,开箱即用。

核心优势

  • 部署简单,一条命令即可完成
  • 资源占用少,适合小型环境
  • 内置完整的Web界面和测试功能

快速体验配置

如果您只是想快速体验LibreSpeed,可以使用以下命令:

docker run -p 80:8080 -d --name speedtest --rm ghcr.io/librespeed/speedtest

这条命令会拉取最新镜像,在后台运行容器,并将容器的8080端口映射到主机的80端口。访问 http://您的服务器IP 即可开始测速。

生产环境配置

对于生产环境,我们推荐使用Docker Compose进行管理。以下是完整的配置文件:

version: '3.7'
services:
  speedtest:
    container_name: speedtest
    image: ghcr.io/librespeed/speedtest:latest
    restart: always
    environment:
      MODE: standalone
      TITLE: "企业网络测速平台"
      TELEMETRY: "true"
      ENABLE_ID_OBFUSCATION: "true"
      REDACT_IP_ADDRESSES: "true"
      PASSWORD: "您的安全密码"
      EMAIL: "admin@yourdomain.com"
      DISTANCE: "km"
      WEBPORT: 8080
    ports:
      - "80:8080"
    volumes:
      - ./database:/database

关键配置说明

配置项 说明 推荐值
TELEMETRY 启用数据收集功能 true(生产环境建议开启)
ENABLE_ID_OBFUSCATION 混淆测试ID,保护隐私 true
REDACT_IP_ADDRESSES 隐藏用户IP地址 true(符合GDPR要求)
PASSWORD 统计页面访问密码 设置强密码
EMAIL GDPR合规联系邮箱 有效的管理员邮箱

数据持久化配置

为了确保测试数据不会在容器重启后丢失,需要配置数据持久化:

docker run -e MODE=standalone -e TELEMETRY=true \
  -e ENABLE_ID_OBFUSCATION=true -e PASSWORD="yourSecurePassword" \
  -e WEBPORT=86 -p 86:86 \
  -v $PWD/db-dir/:/database \
  -it ghcr.io/librespeed/speedtest

这个配置将SQLite数据库文件持久化到主机的 db-dir 目录中。

LibreSpeed独立模式架构

独立模式架构示意图展示了单服务器部署的简单结构,适合大多数基础应用场景。

方案二:前后端分离部署(多服务器场景)

当您需要构建全球分布式测速网络时,前后端分离架构是最佳选择。这种架构允许您部署多个测速后端,并通过统一的前端界面进行管理。

架构优势

  • 支持无限扩展测速节点
  • 前端统一管理所有测速点
  • 后端节点可以独立部署和升级
  • 负载均衡和故障转移能力

后端节点配置

后端节点只提供测速功能,不包含Web界面。每个地理位置的服务器都可以部署一个后端节点:

docker run -e MODE=backend -p 8080:8080 -d \
  --name speedtest-backend-us \
  ghcr.io/librespeed/speedtest

后端节点会暴露以下关键接口:

  • garbage.php:下载测试接口
  • empty.php:上传和延迟测试接口
  • getIP.php:获取客户端IP接口

前端服务器配置

前端服务器负责提供Web界面和服务器列表管理。首先需要创建 servers.json 配置文件:

[
    {
        "name": "美国洛杉矶节点",
        "server": "//us-west.yourdomain.com/",
        "dlURL": "garbage.php",
        "ulURL": "empty.php",
        "pingURL": "empty.php",
        "getIpURL": "getIP.php"
    },
    {
        "name": "德国法兰克福节点",
        "server": "//eu-central.yourdomain.com/",
        "dlURL": "garbage.php",
        "ulURL": "empty.php",
        "pingURL": "empty.php",
        "getIpURL": "getIP.php"
    },
    {
        "name": "日本东京节点",
        "server": "//ap-northeast.yourdomain.com/",
        "dlURL": "garbage.php",
        "ulURL": "empty.php",
        "pingURL": "empty.php",
        "getIpURL": "getIP.php"
    }
]

前端部署命令

docker run -e MODE=frontend -e TELEMETRY=true \
  -e PASSWORD="yourSecurePassword" \
  -v $PWD/servers.json:/servers.json \
  -v $PWD/db-dir/:/database \
  -p 80:8080 -d \
  ghcr.io/librespeed/speedtest

协议支持说明

servers.json 配置中,server 字段的协议处理规则:

  • 同时支持HTTP和HTTPS:使用 // 开头(自动选择协议)
  • 仅支持HTTP:使用 http:// 开头
  • 仅支持HTTPS:使用 https:// 开头

方案三:双模式部署(混合场景)

双模式结合了独立模式和前后端分离模式的优点,既提供本地测速服务,又可以连接外部测速点。

适用场景

  • 企业既有内部测速需求,又需要连接公共测速点
  • 服务提供商希望提供自有测速点,同时集成合作伙伴节点
  • 逐步迁移架构时的过渡方案

配置要点

  1. 设置运行模式MODE=dual
  2. 配置服务器列表:与前端模式相同,需要 servers.json 文件
  3. 本地服务器配置servers.json 的第一个条目必须是本地服务器

示例配置

[
    {
        "name": "本地主节点",
        "server": "//speedtest.yourdomain.com/",
        "dlURL": "garbage.php",
        "ulURL": "empty.php",
        "pingURL": "empty.php",
        "getIpURL": "getIP.php"
    },
    {
        "name": "公共测速节点1",
        "server": "https://public-speedtest1.com/",
        "dlURL": "garbage.php",
        "ulURL": "empty.php",
        "pingURL": "empty.php",
        "getIpURL": "getIP.php"
    }
]

部署命令

docker run -e MODE=dual -e TELEMETRY=true \
  -e ENABLE_ID_OBFUSCATION=true \
  -v $PWD/servers.json:/servers.json \
  -v $PWD/db-dir/:/database \
  -p 80:8080 -d \
  ghcr.io/librespeed/speedtest

数据库配置详解

LibreSpeed支持多种数据库后端,满足不同规模和性能需求。

SQLite(默认)

最简单的数据库方案,适合小型部署:

  • 数据文件位置:/database/db.sql
  • 无需额外配置
  • 适合测试环境和小规模使用

MySQL/PostgreSQL

适合生产环境和大型部署:

environment:
  DB_TYPE: "mysql"
  DB_HOSTNAME: "数据库服务器地址"
  DB_PORT: "3306"
  DB_NAME: "speedtest_db"
  DB_USERNAME: "数据库用户名"
  DB_PASSWORD: "数据库密码"

数据库初始化

在启用MySQL或PostgreSQL之前,需要手动创建数据库和表结构。可以参考项目中的SQL文件:

安全与隐私配置

数据安全和用户隐私是现代网络应用的重要考虑因素。LibreSpeed提供了多种安全配置选项。

隐私保护配置

  1. IP地址脱敏:启用 REDACT_IP_ADDRESSES=true 可以隐藏用户IP地址
  2. 测试ID混淆:启用 ENABLE_ID_OBFUSCATION=true 可以防止数据库ID暴露
  3. 自定义混淆盐值:通过 OBFUSCATION_SALT 设置自定义混淆盐值

访问控制配置

  1. 统计页面密码:设置 PASSWORD 保护统计页面访问
  2. GDPR合规:设置 EMAIL 提供GDPR合规的联系方式
  3. IP信息控制:通过 DISABLE_IPINFO 控制是否获取用户ISP信息

完整安全配置示例

environment:
  REDACT_IP_ADDRESSES: "true"
  ENABLE_ID_OBFUSCATION: "true"
  OBFUSCATION_SALT: "0x1234abcd"
  PASSWORD: "StrongPassword123!"
  EMAIL: "privacy@yourcompany.com"
  DISABLE_IPINFO: "false"

高级功能配置

IP信息与地理位置

LibreSpeed支持通过ipinfo.io获取用户的地理位置和ISP信息:

environment:
  DISABLE_IPINFO: "false"
  IPINFO_APIKEY: "your_ipinfo_api_key"
  DISTANCE: "km"

如果没有API密钥,系统会使用内置的离线数据库,但距离测量功能将不可用。

自定义Web端口

如果需要使用非标准端口,可以通过 WEBPORT 配置:

environment:
  WEBPORT: 3000
ports:
  - "3000:3000"

Alpine Linux变体

对于资源受限的环境,可以使用Alpine Linux变体,镜像体积更小:

docker run -p 80:8080 -d --name speedtest \
  ghcr.io/librespeed/speedtest:latest-alpine

部署检查清单

在完成部署前,请对照以下清单检查配置:

基础配置检查

  •  运行模式(MODE)是否正确设置
  •  端口映射配置是否正确
  •  数据持久化卷是否挂载
  •  容器重启策略是否为always

安全配置检查

  •  统计页面密码是否设置
  •  GDPR合规邮箱是否配置
  •  IP地址脱敏是否启用
  •  测试ID混淆是否启用

功能配置检查

  •  服务器列表(servers.json)是否正确配置
  •  数据库连接配置是否正确
  •  IP信息API密钥是否配置(如需要)
  •  距离单位设置是否正确

网络配置检查

  •  防火墙端口是否开放
  •  域名解析是否配置
  •  SSL证书是否部署(如需要HTTPS)
  •  负载均衡配置是否正确(多节点部署)

故障排查指南

常见问题及解决方案

问题1:无法访问Web界面

  • 检查端口映射:确保 -p 主机端口:容器端口 配置正确
  • 检查防火墙:确保主机防火墙开放了对应端口
  • 检查容器状态:使用 docker ps 确认容器正在运行

问题2:测速数据不准确

  • 检查服务器带宽:确保服务器有足够的网络带宽
  • 检查地理位置:确保服务器与用户地理位置匹配
  • 检查网络延迟:排除网络中间节点的延迟问题

问题3:数据库连接失败

  • 检查数据库配置:确认DB_TYPE、DB_HOSTNAME等参数正确
  • 检查网络连通性:确保容器可以访问数据库服务器
  • 检查权限配置:确保数据库用户有正确的读写权限

问题4:服务器列表无法加载

  • 检查servers.json格式:使用JSON验证工具检查格式
  • 检查文件挂载:确认servers.json正确挂载到容器
  • 检查服务器地址:确保服务器地址可以被客户端访问

日志查看方法

# 查看容器日志
docker logs speedtest

# 实时查看日志
docker logs -f speedtest

# 查看详细日志
docker logs --tail 100 speedtest

性能优化建议

容器资源限制

对于生产环境,建议设置合理的资源限制:

deploy:
  resources:
    limits:
      memory: 512M
      cpus: '1.0'
    reservations:
      memory: 256M
      cpus: '0.5'

网络优化

  1. 使用主机网络模式:对于性能关键的应用,考虑使用 network_mode: host
  2. 启用HTTP/2:配置反向代理启用HTTP/2支持
  3. 启用GZIP压缩:在Web服务器层面启用内容压缩

监控与告警

建议配置以下监控指标:

  • 容器CPU和内存使用率
  • 网络带宽使用情况
  • 数据库连接数
  • 测速请求成功率

扩展与集成

与监控系统集成

LibreSpeed的统计页面提供了丰富的测试数据,可以通过以下方式集成到现有监控系统:

  1. 数据导出:定期导出数据库数据到监控系统
  2. API集成:通过自定义脚本获取统计数据
  3. 告警配置:基于测速结果配置告警规则

自定义界面开发

LibreSpeed提供了丰富的示例界面,您可以根据需求进行定制:

总结

LibreSpeed的Docker部署提供了极大的灵活性和可扩展性,无论是简单的单服务器部署还是复杂的全球分布式网络,都能找到合适的解决方案。通过本文介绍的三种部署模式,您可以根据实际需求选择最适合的架构。

关键要点总结:

  1. 独立模式适合简单场景,部署快速,维护简单
  2. 前后端分离模式适合大规模部署,支持无限扩展
  3. 双模式适合混合场景,兼顾本地和外部测速点

无论选择哪种部署模式,都不要忽视安全和隐私配置。合理的数据保护措施不仅能满足合规要求,也能增强用户信任。

通过合理的配置和优化,LibreSpeed可以成为您网络监控和性能测试的可靠工具,帮助您更好地了解网络状况,优化用户体验。

【免费下载链接】speedtest Self-hosted Speed Test for HTML5 and more. Easy setup, examples, configurable, mobile friendly. Supports PHP, Node, Multiple servers, and more 【免费下载链接】speedtest 项目地址: https://gitcode.com/gh_mirrors/sp/speedtest

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐