
1. 项目缘起为什么要在LattePanda上折腾Uptime Kuma最近几年无论是个人项目还是小型团队协作服务监控都成了一个绕不开的话题。你可能和我一样手头攒了几个VPS跑着博客、数据库、Nextcloud或者一些自研的API服务。这些服务平时都好好的但偶尔会因为网络波动、内存泄漏、或者单纯的配置错误而挂掉。问题在于你往往不是第一个发现服务挂掉的人而是等到自己要用的时候才“惊喜”地发现。传统的解决方案是上云监控但要么功能太复杂要么收费不菲要么数据隐私让你心里打鼓。于是像Uptime Kuma这样的自托管监控方案就火了起来。它轻量、开源、界面友好能通过HTTP、TCP、Ping等多种方式检查服务状态支持丰富的通知渠道Telegram、Discord、邮件、Webhook等还能生成漂亮的状态页面。可以说它完美契合了技术爱好者和小型团队“既要功能全又要掌控感”的需求。那么监控工具本身跑在哪里呢放云服务器上那监控服务器本身挂了怎么办而且对于监控国内服务海外VPS的延迟和可用性也是个问题。放家里的旧电脑或树莓派上24小时开机电费和噪音又是顾虑。这时LattePanda 3 Delta这块板子进入了我的视野。它是一台x86架构的迷你电脑性能足以媲美低功耗笔记本功耗却极低。让它7x24小时运行作为家庭网络的“监控与自动化中枢”再合适不过了。这个项目的核心就是把Uptime Kuma这套出色的监控系统部署到LattePanda 3 Delta这块低功耗、高性能的硬件上打造一个完全属于自己、稳定可靠、且能灵活扩展的监控中心。接下来我就把从硬件准备到软件部署、从基础监控到高阶优化的完整过程以及我踩过的坑和总结的经验毫无保留地分享出来。2. LattePanda 3 Delta硬件选型、系统准备与性能基线在开始部署软件之前我们需要先充分了解我们的硬件平台并为其打好坚实的基础。盲目安装往往会导致后续各种诡异问题。2.1 为什么是LattePanda 3 Delta市面上类似的板子不少比如树莓派、Orange Pi等ARM开发板也有Intel NUC等迷你主机。我选择LattePanda 3 Delta主要基于以下几点考量x86架构兼容性无忧Uptime Kuma官方推荐使用Docker部署而Docker在x86平台上的生态是最完善的。虽然ARM版Docker也很成熟但某些镜像或依赖库可能仍存在兼容性问题。选择x86意味着在软件层面几乎不会遇到“这个镜像没有ARM版”的尴尬。性能与功耗的平衡LattePanda 3 Delta搭载了Intel Celeron N5100处理器4核4线程睿频2.8GHz和8GB LPDDR4内存。这个配置运行一个Docker化的Uptime Kuma其本身基于Node.js可以说是“杀鸡用牛刀”。但富裕的性能意味着我们可以同时在这块板子上运行更多服务比如内网穿透客户端、下载工具、智能家居网关等而功耗满载时也不过10瓦左右待机时更低。丰富的接口与扩展性它自带M.2 NVMe插槽支持2242/2280规格、一个全尺寸的HDMI接口、多个USB端口包括USB 3.0、千兆网口甚至还有GPIO针脚。这意味着存储可以非常快速NVMe SSD连接显示器调试方便网络吞吐有保障未来想接个传感器玩点硬件监控也有可能性。完整的Windows/Linux支持它预装Windows 10 Pro但完美支持各种Linux发行版。这给了我们极大的操作系统选择自由。2.2 操作系统选型与安装虽然LattePanda预装了Windows但对于7x24小时运行的服务端场景Linux是更专业、更稳定、资源占用更低的选择。我强烈推荐使用Ubuntu Server LTS版本。为什么是Ubuntu Server长期支持LTS版本提供5年的安全更新省心。庞大的社区遇到问题几乎一定能找到解决方案。对Docker友好官方文档完善安装配置简单。无图形界面节省大量内存和CPU资源全部用于服务。安装步骤与关键配置制作启动盘从Ubuntu官网下载最新的Server LTS镜像如22.04 LTS使用Rufus或balenaEtcher工具将其写入一个至少8GB的U盘。LattePanda设置将U盘插入LattePanda开机按F7具体按键可能因版本略有不同通常是F7或Del进入BIOS/UEFI设置。确保启动顺序中U盘优先并关闭Secure Boot某些Linux版本驱动可能需要。保存并重启。安装Ubuntu Server跟随安装向导。有几个关键点网络配置建议在安装时就配置好静态IP地址。这样你的LattePanda在家庭网络中就有一个固定的地址方便后续访问。记录下IP例如192.168.1.200。磁盘分区对于NVMe SSD选择“使用整个磁盘”并设置LVM通常是最简单的。如果有多块磁盘可以规划一下。SSH服务在安装软件选择环节务必勾选“OpenSSH server”。这样安装完成后你就可以通过其他电脑的终端远程连接它无需接显示器键盘。用户创建设置一个强密码的普通用户例如lpadmin。安装程序会自动将其加入sudo组。首次启动与更新安装完成后重启用你创建的用户通过SSH登录ssh lpadmin192.168.1.200。第一件事就是更新系统sudo apt update sudo apt upgrade -y更新后建议重启一次。2.3 建立性能与健康度基线在部署核心服务前我们先记录一下系统的“健康状态”方便日后对比和排查问题。查看硬件信息# 查看CPU型号和核心数 lscpu # 查看内存总量和使用情况 free -h # 查看磁盘空间和类型确认是NVMe lsblk -f df -h # 查看网卡信息 ip addr show安装并运行基础监控工具sudo apt install htop iotop iftop -yhtop动态查看CPU、内存、进程情况。刚装好的纯净系统内存占用应在300MB左右CPU空闲率接近100%。iotop监控磁盘IO。iftop监控网络流量。运行htop记下初始的CPU和内存占用。这个状态就是我们后续判断“服务是否异常”的基准。注意LattePanda的BIOS中可能有功耗相关的设置。如果追求极致低功耗可以研究一下BIOS中的C-State、P-State等电源管理选项但默认设置对于我们的场景已经非常均衡。3. Docker与Docker Compose容器化部署的基石Uptime Kuma官方极力推荐使用Docker部署这能解决环境依赖、版本冲突、隔离性等一系列问题。我们的部署也将基于Docker Compose用声明式的方式管理服务。3.1 安装Docker Engine不要使用Ubuntu仓库里版本可能较旧的Docker我们使用Docker官方提供的安装脚本。# 1. 卸载旧版本如果是全新系统可跳过 sudo apt remove docker docker-engine docker.io containerd runc -y # 2. 安装依赖工具 sudo apt update sudo apt install ca-certificates curl gnupg lsb-release -y # 3. 添加Docker官方GPG密钥和仓库 sudo mkdir -p /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gosu tee /etc/apt/keyrings/docker.asc /dev/null echo deb [arch$(dpkg --print-architecture) signed-by/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable | sudo tee /etc/apt/sources.list.d/docker.list /dev/null # 4. 安装Docker Engine sudo apt update sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin -y # 5. 验证安装 sudo docker run hello-world如果看到“Hello from Docker!”的输出说明安装成功。3.2 配置Docker非root用户运行与镜像加速默认情况下运行Docker命令需要sudo权限这很不方便也不安全。我们需要将当前用户加入docker组。# 将当前用户加入docker组 sudo usermod -aG docker $USER重要执行此命令后你需要完全退出当前SSH会话并重新登录才能使组权限生效。重新登录后运行docker ps命令不再需要sudo说明配置成功。配置国内镜像加速器可选但强烈推荐 由于网络原因从Docker Hub拉取镜像可能很慢。我们可以配置国内镜像加速器。# 创建或修改Docker守护进程配置文件 sudo nano /etc/docker/daemon.json在文件中输入以下内容以阿里云镜像加速器为例你需要去阿里云容器镜像服务控制台获取专属加速器地址{ registry-mirrors: [https://your-mirror.mirror.aliyuncs.com] }保存并退出然后重启Docker服务sudo systemctl daemon-reload sudo systemctl restart docker验证配置docker info在输出中查找Registry Mirrors确认包含你设置的地址。3.3 安装独立的Docker Compose虽然Docker现在包含了docker compose插件作为子命令但有些人包括我还是习惯使用独立的docker-compose命令。我们两种都准备。# 安装独立版本的docker-compose sudo curl -L https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose sudo chmod x /usr/local/bin/docker-compose # 验证安装 docker-compose --version # 同时也验证一下插件版本 docker compose version现在docker-compose和docker compose命令都可以使用了。4. Uptime Kuma的部署与初始配置万事俱备现在可以部署我们的主角了。我们将使用Docker Compose来定义和运行Uptime Kuma服务。4.1 创建项目目录与Compose文件为服务创建一个独立的目录所有相关文件都放在这里便于管理。# 在用户家目录下创建一个项目目录 mkdir -p ~/docker/uptime-kuma cd ~/docker/uptime-kuma创建docker-compose.yml文件nano docker-compose.yml将以下内容粘贴进去。这是最核心的配置文件我逐段解释version: 3.8 # 指定Compose文件格式版本 services: uptime-kuma: image: louislam/uptime-kuma:latest # 使用官方镜像 container_name: uptime-kuma # 指定容器名称便于管理 restart: unless-stopped # 重启策略除非手动停止否则总是重启应对系统重启或容器意外退出 volumes: # 将容器内的/data目录映射到宿主机的./data目录用于持久化配置和数据库 - ./data:/data # 映射时区文件让容器内时间与宿主机中国时区一致对于定时任务和日志时间戳至关重要 - /etc/localtime:/etc/localtime:ro ports: # 将容器内的3001端口映射到宿主机的3001端口。格式宿主机端口:容器端口 # 你可以把前面的3001改成其他未被占用的端口比如8080 - 3001:3001 environment: # 设置环境变量这里可以配置Uptime Kuma的一些参数但大部分配置在Web界面完成 # 例如可以设置数据存储路径但我们已经通过volumes映射了 # - DATA_DIR/data # 可选为容器设置一个自定义的网络便于未来与其他容器通信如反向代理 # networks: # - monitor-net # 可选定义自定义网络 # networks: # monitor-net: # driver: bridge关键参数解析restart: unless-stopped这是服务可靠性的关键。即使LattePanda意外断电重启Docker服务会随着系统启动并自动重启这个容器。volumes./data:/data映射是灵魂。所有你的监控配置、通知设置、状态页面数据都保存在宿主机的./data目录下。即使你删除了容器只要这个目录在重新启动一个新容器所有数据都会恢复。/etc/localtime:ro确保容器内日志和检查计划的时间与你所在时区一致。ports3001是Uptime Kuma默认的Web UI端口。确保你的LattePanda防火墙如果启用开放了这个端口。4.2 启动服务与初次访问保存docker-compose.yml文件后在同一个目录下运行# 以后台模式启动服务 docker-compose up -d-d参数代表“detached”让容器在后台运行。查看服务状态和日志# 查看容器是否运行 docker-compose ps # 应该看到uptime-kuma服务状态为Up # 查看实时日志用于调试 docker-compose logs -f uptime-kuma # 按 CtrlC 退出日志查看如果一切正常日志最后会显示服务器已启动。现在打开你的浏览器访问http://你的LattePanda IP:3001。例如http://192.168.1.200:3001。你将看到Uptime Kuma的初始化界面。首先需要创建一个管理员账户。输入用户名、密码和邮箱邮箱用于接收通知务必填写真实可用的。4.3 基础配置与第一个监控项登录后我们先进行几项关键的基础配置设置通知渠道这是监控系统的“嘴巴”。点击左侧菜单栏的Settings设置图标然后选择Notifications通知。点击Setup Notification。选择你常用的渠道比如Telegram或Discord。以Telegram为例你需要先与BotFather对话创建一个Bot获取Bot Token。然后与你的Bot发起对话并发送一条消息。访问https://api.telegram.org/botYourBOTToken/getUpdates来获取你的Chat ID。在Uptime Kuma界面填入Token和Chat ID保存。强烈建议至少配置两个不同原理的通知渠道比如“Telegram 邮件”。防止单一渠道失效导致失联。添加第一个监控目标点击左上角的Add New Monitor添加新监控。Monitor Type监控类型选择HTTP(s)最常用。Friendly Name友好名称给你的服务起个名如“个人博客”。URL填入要监控的地址如https://yourblog.com。Heartbeat Interval心跳间隔默认60秒。对于重要服务可以设为30秒对于不那么关键的服务120秒或300秒也行减少请求压力。Retries重试次数默认0。建议设为1或2。网络偶尔有波动一次失败就报警可能产生噪音。设置为1意味着第一次检查失败后会立即再试一次如果还是失败才触发报警。Notification选择你刚设置好的通知渠道。其他选项如超时时间、请求头等可以保持默认。点击Save。稍等片刻你就能在仪表盘上看到这个监控项的状态通常是绿色的“UP”。你可以手动停止你的博客服务测试一下报警通知是否能在设定的时间内正常发出。5. 进阶配置可靠性、安全性与状态页基础监控跑通后我们需要让它更可靠、更安全、更美观。5.1 使用反向代理Nginx Proxy Manager暴露服务直接通过IP:3001访问不够优雅也不安全。我们通常使用域名如status.yourdomain.com并通过HTTPS访问。这就需要反向代理。我推荐使用Nginx Proxy Manager (NPM)它提供了友好的Web界面来管理反向代理和SSL证书。我们同样用Docker Compose来部署NPM。在LattePanda上新建一个目录mkdir -p ~/docker/nginx-proxy-manager cd ~/docker/nginx-proxy-manager nano docker-compose.yml粘贴以下配置version: 3.8 services: app: image: jc21/nginx-proxy-manager:latest container_name: nginx-proxy-manager restart: unless-stopped ports: # NPM管理界面端口 - 8181:81 # HTTP和HTTPS代理端口 - 80:80 - 443:443 volumes: # 持久化配置、SSL证书和日志 - ./data:/data - ./letsencrypt:/etc/letsencrypt environment: # 可选设置数据库驱动默认使用SQLite对个人使用足够 - DB_SQLITE_FILE/data/database.sqlite # 可选禁用IPv6如果网络环境不支持 # - DISABLE_IPV6true启动NPMdocker-compose up -d访问http://你的LattePanda IP:8181初始登录邮箱adminexample.com密码changeme。登录后会强制你修改密码和邮箱。配置反向代理与SSL证书在NPM界面点击Hosts-Proxy Hosts-Add Proxy Host。Details标签Domain Names: 填写你的域名如status.yourdomain.com。Scheme:httpForward Hostname / IP: 填写你的LattePanda的内网IP如192.168.1.200。Forward Port:3001(Uptime Kuma的端口)。SSL标签SSL Certificate: 选择Request a new SSL Certificate。勾选Force SSL和HTTP/2 Support。勾选I agree to the Lets Encrypt Terms of Service。填写你的邮箱。点击Save。NPM会自动为你申请并配置Let‘s Encrypt的免费SSL证书。等待几分钟证书申请成功后你就可以通过https://status.yourdomain.com安全地访问你的Uptime Kuma了。重要提示你需要在你的域名DNS解析商处将status.yourdomain.com的A记录指向你家的公网IP地址。并且你家的路由器需要设置端口转发将WAN口的80和443端口转发到LattePanda的内网IP。由于家庭宽带公网IP通常是动态的你还需要配置DDNS动态域名解析。这部分内容涉及家庭网络配置超出了本文范围但它是从外网访问服务的关键一步。5.2 配置Uptime Kuma的状态页Uptime Kuma内置了状态页功能你可以公开或半公开地展示你的服务健康状况。在Uptime Kuma左侧菜单点击Status Pages。点击Create New Status Page。设置标题、描述、图标等。在Monitor List中选择你想展示在状态页上的监控项。你可以选择“公开”或“需要密码”访问。保存后状态页会有独立的访问链接通常是https://你的域名/status/页面名称。你可以将这个链接分享给需要的人。5.3 数据备份策略./data目录就是你的全部配置。定期备份这个目录至关重要。简单粗暴的本地备份可以写一个简单的cron定时任务用tar或rsync命令将~/docker/uptime-kuma/data目录压缩并拷贝到另一个硬盘或NAS上。# 示例每天凌晨3点备份 crontab -e # 添加一行 0 3 * * * tar -czf /path/to/backup/uptime-kuma-backup-$(date \%Y\%m\%d).tar.gz -C /home/lpadmin/docker/uptime-kuma data更优雅的容器化备份使用restic或borg可以创建另一个Docker容器专门用于加密备份到云端如Backblaze B2、阿里云OSS等。但这属于更进阶的运维范畴。6. 性能调优、监控自身与故障排查让监控系统监控别人那谁又来监控监控系统自己呢我们需要确保Uptime Kuma和LattePanda本身是健康的。6.1 监控LattePanda宿主机的健康度我们可以在Uptime Kuma里添加对LattePanda自身的监控。Ping监控添加一个Ping类型的监控目标地址填LattePanda的内网IP或127.0.0.1。这可以监控板子是否在线、网络是否通畅。端口监控添加一个Port类型的监控目标地址填LattePanda IP端口填22SSH。确保SSH服务正常。HTTP监控监控Uptime Kuma自己的Web界面https://status.yourdomain.com和NPM的管理界面http://你的IP:8181。资源监控进阶可以通过安装Node ExporterPrometheus生态来暴露系统指标CPU、内存、磁盘、温度等然后使用Uptime Kuma的Push监控类型或Heartbeat监控来接收数据。或者更简单点写一个脚本定期检查df、free命令的输出并通过Uptime Kuma的HeartbeatAPI发送状态。6.2 Uptime Kuma容器资源限制与日志管理默认情况下Docker容器可以使用宿主机的所有资源。为了更稳定我们可以给Uptime Kuma容器加上资源限制。修改docker-compose.yml在uptime-kuma服务下添加deploy或resources部分取决于Compose版本services: uptime-kuma: # ... 其他配置 ... deploy: # 适用于 version: 3.8 及更高版本并需要以 docker stack deploy 方式运行。对于 docker-compose up使用下面的 resources。 resources: limits: cpus: 1.0 # 限制最多使用1个CPU核心 memory: 512M # 限制最多使用512MB内存 reservations: cpus: 0.25 memory: 256M或者使用更通用的resources标签直接在service下services: uptime-kuma: # ... 其他配置 ... mem_limit: 512m mem_reservation: 256m cpus: 1.0设置后需要重新部署容器docker-compose down docker-compose up -d。日志管理Docker容器的日志默认会一直增长。我们可以配置日志轮转和大小限制。services: uptime-kuma: # ... 其他配置 ... logging: driver: json-file options: max-size: 10m # 单个日志文件最大10MB max-file: 3 # 最多保留3个日志文件6.3 常见问题与排查思路问题Uptime Kuma Web界面无法访问。排查检查容器状态docker-compose ps确认状态是Up。查看容器日志docker-compose logs uptime-kuma看是否有错误输出。检查端口占用在LattePanda上运行sudo ss -tulpn | grep :3001看3001端口是否被监听。检查防火墙sudo ufw status确保3001端口是允许的如果使用了UFW。检查NPM配置如果用了反向代理检查NPM中的代理主机配置是否正确SSL证书是否有效。问题监控报警不触发或延迟。排查检查通知渠道配置在Uptime Kuma的Settings-Notifications里测试一下通知是否能正常发送。检查监控项配置确认Retries重试和Heartbeat Interval间隔设置是否合理。间隔太大会导致发现故障延迟。检查LattePanda的系统时间date确保时区和时间准确。时间不准会导致定时任务错乱。检查网络连通性从LattePanda上ping或curl一下被监控的目标看是否通。问题LattePanda磁盘空间不足。排查与解决df -h查看磁盘使用情况。清理Docker无用资源docker system prune -a谨慎使用会删除所有未使用的镜像、容器、网络和卷。检查并清理Uptime Kuma的data目录下的日志文件如果有的话或Docker的日志文件/var/lib/docker/containers/...。考虑将数据目录挂载到更大的外部存储。7. 扩展玩法将LattePanda打造成家庭服务中枢部署好Uptime Kuma后你的LattePanda 3 Delta只发挥了它一小部分潜力。凭借其x86性能和低功耗它完全可以成为家庭实验室的“大脑”。这里抛砖引玉提供几个扩展方向内网穿透客户端安装frp或nps的客户端配合有公网IP的VPS实现从外网安全访问家庭内所有服务包括Uptime Kuma状态页。自动化工具安装Home Assistant或Node-RED将智能家居设备接入实现自动化场景。媒体服务器安装Jellyfin或Plex搭建家庭影音库。下载中心安装qBittorrent或Transmission的Docker版本作为24小时下载机。代码仓库/CI安装Gitea和Drone搭建私有的Git服务和自动化构建平台。网络服务安装Pi-hole或AdGuard Home的Docker版作为家庭网络的广告过滤和DNS服务器。所有这些服务都可以通过Docker Compose编排与Uptime Kuma并存。只需要注意规划好端口号避免冲突并通过Nginx Proxy Manager为每个服务配置独立的域名和SSL证书即可。LattePanda 3 Delta的8GB内存和NVMe SSD足以轻松承载以上多个轻量级服务。这个项目从构思到实现最深的体会是“合适”比“强大”更重要。LattePanda 3 Delta对于家庭监控和轻量级服务这个场景就是那个“恰到好处”的选择。它避免了树莓派可能遇到的ARM兼容性问题又远比常年开着的一台旧台式机安静省电。而Uptime Kuma的简洁与强大让服务监控从一项复杂的运维工作变成了一个可以轻松上手的爱好。当你的手机第一次收到“服务下线”的Telegram通知并在一分钟后收到“服务恢复”的消息时那种一切尽在掌握的感觉就是折腾这一切最好的回报。最后一个小建议定期检查你的备份是否有效并考虑给你的LattePanda配一个小的UPS不间断电源以应对短暂的停电让监控真正永不间断。