Caddy

Alpine Linux 部署 SmokePing 网络监控

本文介绍如何在 Alpine Linux 系统上部署 SmokePing 网络延迟监控工具,使用 Caddy 作为 Web 服务器,FCGIWrap 处理 CGI 脚本。

系统要求

  • Alpine Linux 3.18+
  • 2GB+ RAM(推荐 4GB+)
  • 20GB+ 磁盘空间
  • 网络连接正常

安装步骤

1. 安装必要软件包

# 更新软件包索引
apk update

# 安装 SmokePing 及相关组件
apk add fcgiwrap fcgiwrap-openrc caddy smokeping smokeping-openrc

# 创建 fcgiwrap 服务用户
useradd -r fcgiwrap-openrc

2. 创建数据目录

# 创建 SmokePing 数据目录
mkdir -p /var/lib/smokeping/Ping
mkdir -p /var/lib/smokeping/DNS

# 设置权限
chown smokeping:smokeping /var/lib/smokeping/Ping
chown smokeping:smokeping /var/lib/smokeping/DNS
chmod 777 /var/lib/smokeping/images/Ping
chmod 777 /var/lib/smokeping/images/DNS

3. 配置 Caddy Web 服务器

创建 Caddy 配置文件 /etc/caddy/Caddyfile

{
    log {
        output file /var/log/caddy/access.log {
            roll_size 100MB  # 单个日志文件最大 100MB
            roll_keep 10     # 保留最近 10 个日志文件
            roll_keep_for 720h  # 保留 30 天(720 小时)
        }
        format console  # 易读的格式,也可改用 json 格式(format json)
    }
}

http://192.168.1.100 {
    # 处理静态资源
    handle /js/* {
        root * /usr/share/webapps/smokeping/
        file_server
    }
    handle /css/* {
        root * /usr/share/webapps/smokeping/
        file_server
    }
    handle /imgcache/* {
        root * /usr/share/webapps/smokeping/
        file_server
    }
    handle_path /images/* {
        root * /var/lib/smokeping/images
        file_server browse
    }

    # 处理 CGI 请求
    handle {
        root * /usr/share/webapps/smokeping/
        reverse_proxy unix//run/fcgiwrap/fcgiwrap.sock {
            transport fastcgi {
                env SCRIPT_FILENAME /usr/share/webapps/smokeping/smokeping.cgi
                split ""
            }
        }
    }
}

4. 配置 SmokePing

创建配置文件 /etc/smokeping/config

*** General ***

owner    = Demo User
contact  = admin@example.com
mailhost = mail.example.com
sendmail = /usr/sbin/sendmail
# NOTE: do not put the Image Cache below cgi-bin
# since all files under cgi-bin will be executed ... this is not
# good for images.
imgcache = /var/lib/smokeping/images
imgurl   = /images
datadir  = /var/lib/smokeping
piddir   = /run/smokeping
cgiurl   = http://192.168.1.100/smokeping.cgi
smokemail = /etc/smokeping/smokemail
tmail     = /etc/smokeping/tmail
# specify this to get syslog logging
syslogfacility = local0
# each probe is now run in its own process
# disable this to revert to the old behaviour
# concurrentprobes = no

5. 配置告警规则

*** Alerts ***
to = admin@example.com
from = smokeping@example.com

# 定义各种告警规则
+hostdown
type = loss
# in percent
pattern ==0%,==0%,==0%, ==U
comment = 对端无响应

+bigloss
type = loss
# in percent
pattern ==0%,==0%,==0%,==0%,>20%,>20%,>20%
comment = 连续3次采样-丢包率超过20%

+lossdetect
type = loss
# in percent
pattern ==0%,==0%,==0%,==0%,>0%,>0%,>0%
comment = 连续3次采样-存在丢包

+someloss
type = loss
# in percent
pattern >0%,*12*,>0%,*12*,>0%
comment = 间断性丢包

+rttdetect
type = rtt
# in milli seconds
pattern <100,<100,<100,<100,<100,<150,>150,>150,>150
comment = 连续3次采样延迟增大-超过150ms

6. 配置数据库设置

*** Database ***

step     = 300
pings    = 20

# consfn mrhb steps total

AVERAGE  0.5   1  28800
AVERAGE  0.5  12   9600
    MIN  0.5  12   9600
    MAX  0.5  12   9600
AVERAGE  0.5 144   2400
    MAX  0.5 144   2400
    MIN  0.5 144   2400

7. 配置显示模板

*** Presentation ***

template = /etc/smokeping/basepage.html
htmltitle = yes
graphborders = no
# If enabled, treat all filter menu queries as literal strings instead of regex
literalsearch = no

+ charts

menu = Charts
title = The most interesting destinations

++ stddev
sorter = StdDev(entries=>4)
title = Top Standard Deviation
menu = Std Deviation
format = Standard Deviation %f

++ max
sorter = Max(entries=>5)
title = Top Max Roundtrip Time
menu = by Max
format = Max Roundtrip Time %f seconds

++ loss
sorter = Loss(entries=>5)
title = Top Packet Loss
menu = Loss
format = Packets Lost %f

++ median
sorter = Median(entries=>5)
title = Top Median Roundtrip Time
menu = by Median
format = Median RTT %f seconds

8. 配置探针

*** Probes ***

+ FPing

binary = /usr/sbin/fping

+ DNS
binary = /usr/bin/dig
lookup = g.cn
pings = 5
step = 180

9. 配置主从模式(可选)

*** Slaves ***
secrets=/etc/smokeping/smokeping_secrets
+boomer
display_name=boomer
color=0000ff

+slave2
display_name=another
color=00ff00

10. 配置监控目标

*** Targets ***

alerts = someloss
probe = FPing

menu = Top
title = Network Latency Grapher
remark = Welcome to the SmokePing website of <b>Example Company</b>. \
         Here you will learn all about the latency of our network.

+ Ping
menu = Ping
title = 10.0.0.14 Pings
alerts = hostdown,bigloss,lossdetect,someloss,rttdetect

++ server1
menu = 192.168.1.50
host = 192.168.1.50

++ server2
menu = 192.168.1.51
host = 192.168.1.51

+ DNS
menu = DNS
probe = DNS
alerts = hostdown,bigloss,lossdetect,someloss,rttdetect

++ dns-server
menu = 192.168.1.200
host = 192.168.1.200

启动服务

1. 启动并启用服务

# 启动 Caddy 服务
rc-service caddy start
rc-service caddy add

# 启动 SmokePing 服务
rc-service smokeping start
rc-service smokeping add

# 启动 fcgiwrap 服务
rc-service fcgiwrap start
rc-service fcgiwrap add

2. 检查服务状态

# 检查 Caddy 状态
rc-service caddy status

# 检查 SmokePing 状态
rc-service smokeping status

# 检查 fcgiwrap 状态
rc-service fcgiwrap status

验证部署

访问 http://192.168.1.100/smokeping.cgi 验证 SmokePing 是否正常工作。

使用官方 Registry v2 搭建 Docker Mirror 私有镜像仓库

在国内网络环境下,直接从 Docker Hub 拉取镜像经常遇到超时或被限流的问题。搭建一个本地 Docker Mirror 代理仓库可以有效解决这个痛点。本文介绍如何使用官方 Registry v2 搭建私有镜像代理仓库。

为什么要搭 Docker Mirror

1. Docker Hub 公网限速

Docker Hub 对匿名用户的拉取限速为 100 次/6 小时,免费账户为 200 次/6 小时。在 CI/CD 流水线或多人团队环境下,这个限额很容易触达。通过自建 Mirror 代理,所有节点的拉取请求汇聚到 Mirror 节点,Mirror 对上游只产生一次请求,有效规避限额。

2. 缓存加速 Build

在 CI/CD 构建中,每次 docker build 都需要拉取基础镜像。即使代码没有变化,基础镜像也会被反复从公网拉取,浪费时间。Mirror 缓存了基础镜像后:

  • 首次构建:从上游拉取并缓存
  • 后续构建:直接从 Mirror 拉取,速度提升 5-10 倍
  • 多节点并行构建:共享同一个 Mirror,只消耗一次外网流量