介绍
一个用 SvelteKit、Go 和 PocketBase 编写的简单 LAN 网络应用程序唤醒。
UpSnap 是,和 永远是,免费和开源软件。
特征
- 🚀 一键式设备唤醒仪表板
- ⏰ 通过 Cron 实现自动化的定时事件
- 🔌 Ping 您选择的任何端口
- 🔍 使用网络扫描发现设备(需要 nmap)
- 👤 安全的用户管理
- 🌐 i18n 对这些语言的支持
- 🎨 35 个主题
- 🐳 适用于 amd64、arm64、arm/v7、arm/v6 的 Docker 镜像
- 🏠 自托管
自由度高,可通过自定义Ping、唤醒、关机命令来实现进阶功能
- 管理PVE虚拟机
- 管理docker容器
欢迎关注我B站账号 秦曱凧 (读作 qín yuē zhēng)
有需要帮忙部署这个项目的朋友,一杯奶茶,即可程远程帮你部署,需要可联系。
微信号 E-0_0-
闲鱼搜索用户 明月人间
或者邮箱 firfe163@163.com
如果这个项目有帮到你。欢迎start。
镜像
- DockerHub
seriousm4x/upsnap:5.1.9 - ghcr.io
ghcr.io/seriousm4x/upsnap:5.1.9
docker run 部署
mkdir -p /docker/upsnap && \
cd /docker/upsnap
docker run -d \
--name upsnap \
--restart always \
--cpus 1 --memory 512m \
--log-opt max-size=1m \
--log-opt max-file=3 \
--network bridge \
--tty --interactive \
-e TZ=Asia/Shanghai \
-e TIME_ZONE=Asia/Shanghai \
-e UPSNAP_WEBSITE_TITLE=网站标题 \
-p 端口:5000 \
-v 映射路径:/app/pb_data \
-v 映射路径:/ssh \
seriousm4x/upsnap:5.1.9
compose 部署
compose 文件
文件名
compose.yaml
文件内容
# version: "3"
name: upsnap
x-config: &config
restart: always
cpus: 1
mem_limit: 512m
logging:
options:
max-size: 1m
max-file: "3"
services:
upsnap:
container_name: upsnap
image: seriousm4x/upsnap:5.1.9
network_mode: bridge
tty: true
stdin_open: true
<<: *config
environment:
TZ: Asia/Shanghai
TIME_ZONE: Asia/Shanghai
UPSNAP_WEBSITE_TITLE: 网络唤醒
ports:
- 端口:8090
volumes:
- 文件路径/data:/app/pb_data
- 文件路径/ssh:/ssh
部署命令
docker compose up -d
参数说明
-
初始化设置管理员账号
-
中文
- 登录
- 点击 右上角头像
- 点击
Edit account Language选择中文- 点击
Save
-
自定义端口
配置中添加下面内容entrypoint: /bin/sh -c "./upsnap serve --http 0.0.0.0:端口" # 健康检查,自定义端口后建议添加 healthcheck: test: curl -fs "http://localhost:端口/api/health" || exit 1 interval: 10s -
环境变量
UPSNAP_INTERVAL示例值:*/10 * * * * *,设置设备轮询的时间间隔UPSNAP_SCAN_RANGE示例值:192.168.1.0/24,扫描范围用于本地网络上的设备发现UPSNAP_SCAN_TIMEOUT示例值:500ms,扫描超时是 nmap 的 --host-timeout 参数值,用于等待设备响应 (nmap.org/book/man-pe…)UPSNAP_PING_PRIVILEGED示例值:true,如果没有 root 用户权限,设置为 false
下面所有Linux命令以Debian为例
系统开启网络唤醒
不同的主板策略不同,有的直接在bios中打开对应的选项即可,有的需要在系统中配置,具体情况和询问主板客服。
Windows设置方法
- 打开设备管理器
- 在“网络适配器”中找到电脑网卡名称,鼠标右键选择“属性”
- 点击高级,找到【Wakke on Magic Packer】设置为【Enabled】值即可
- 关闭快速启动功能
- 在电脑的搜索窗口搜索“选择电源计划”,然后点击打开选择电源计划
- 点击【选择电源按钮的功能】
- 先点击【更改当前不可用的设置】,然后再取消勾选“启用快速启动”选项即可
Linux(Debian)设置方法
- 检查网卡是否支持 WOL
首先,确认你的网卡支持网络唤醒功能。- 使用
ethtool检查- 安装
ethtool:apt update && apt install ethtool - 查看网卡名称:
找到你的网卡名称(如ip aeth0或enp0s3)。 - 检查 WOL 支持:
ethtool <网卡名称>
在输出中,找到ethtool enp0s3Supports Wake-on和Wake-on字段:Supports Wake-on:表示网卡支持的 WOL 模式(如g表示支持魔术包唤醒)。Wake-on:当前 WOL 设置(d表示禁用,g表示启用)。
- 安装
- 使用
- 启用 WOL
如果网卡支持 WOL,但当前未启用,可以通过以下步骤启用。- 使用
ethtool启用
运行以下命令启用 WOL:ethtool -s 网卡名称 wol gethtool -s enp0s3 wol g
- 使用
- 验证是否启用
再次运行ethtool检查Wake-on字段是否为g:ethtool enp0s3 - 持久化 WOL 设置
默认情况下,ethtool的设置会在重启后失效。为了持久化 WOL 设置,可以通过以下方法实现。- 编辑网络配置文件:
如果文件不存在,可以编辑nano /etc/network/interfaces.d/<网卡名称>/etc/network/interfaces。 - 在网卡配置中添加以下行:
up /sbin/ethtool -s <网卡名称> wol gauto enp0s3 iface enp0s3 inet dhcp up /sbin/ethtool -s enp0s3 wol g - 保存并退出,然后重启网络服务:
systemctl restart networking
- 编辑网络配置文件:
普通网络唤醒
- 新增
- 通用(下面内容必填)
- 名称 给添加的设备起一个名字
- IP 需要唤醒设备的IP地址
- MAC 需要唤醒设备的MAC地址
- 子网掩码,一般是
255.255.255.0 - 查看IP和MAC
- NAS 图形界面中的网络设置
- Linux 终端输入命令
ip a - Windows 设置 网络和Internet 属性
- 链接(可不写) 可以添加设置的常用网址
- 分组(可不写) 根据需求添加
- 保存
添加关机命令
注意实际使用时,把下面示例命令中的密码或秘钥文件名
pass.txtkey.txt改成自己添加的,() 设备IP192.168.1.11也改成自己实际的设备IP
Linux(NAS)
原理是通过SSH链接设备,执行关机命令。因此设备的SSH需要开启
-
准备密码或秘钥
- 将密码或秘钥写入一个文本文件中
- 文件放在部署时映射的
ssl目录中 - 下面示例中
- 密码文件名
pass.txt - 秘钥文件名
key.txt - 设备IP
192.168.1.11
- 密码文件名
-
root用户-
在关机选项中关机命令天机下面内容
-
密码 格式
sshpass -f 密码文件 ssh -o "StrictHostKeyChecking=no" 用户名@IP "具体命令"示例
sshpass -f /ssh/pass.txt ssh -o "StrictHostKeyChecking=no" root@IP "shutdown -h now"- 密码明文(不推荐)
sshpass -p 密码 ssh -o "StrictHostKeyChecking=no" 用户@IP地址 "shutdown -h now"
- 密码明文(不推荐)
-
秘钥
在使用秘钥时,要确保秘钥文件只有所有者可读,即权限
600格式
ssh -i 密钥路径 -o "StrictHostKeyChecking=no" 用户@IP地址 "具体命令"示例
ssh -i /ssh/key.txt -o "StrictHostKeyChecking=no" root@192.168.1.1 "shutdown -h now"
-
-
非
root用户- 需要用户具有执行
shutdown命令的权限 - 这里提供一个简单的通过编辑
visudo文件来实现- 切换到root
- 输入下面命令
visudo - 在末尾写入下面内容 用户名 ALL=(ALL) NOPASSWD: /sbin/shutdown, /sbin/poweroff, /sbin/halt
- 保存退出
- 这样指定的用户就可以直接运行
sudo shutdown -h now而不需要输入密码来关机
- 需要用户具有执行
Windows
在 Windows 上通过 net rpc来执行命令关机,因为net rpc走的是SMB通道,因此需要目标设备开启SMB共享、防火墙关闭或开启ping相关的规则。
-
防火墙操作
- 打开
高级安全 Windows Defender 防火墙 - 相关入站规则
核心网络诊断 - ICMP 回显请求(ICMPv4-In)专用,公用
- 打开
-
密码明文
net rpc shutdown -I IP地址 -U "用户名%密码" -
密码文件
- 创建一个文件,存放用户名密码
- 文件内容格式
username=用户名 password=你的密码 - 设置权限
- 必须设置为
600,否则net命令会拒绝读取
- 必须设置为
- 命令格式
net rpc shutdown -I 192.168.1.100 -A 用户名密码文件路径
定时开关机
通过cron来设置定时规则
-
打开
启用定时关机或启用定时开机 -
计划任务填写
cron表达式 -
示例表达式
- 每天早上8点
0 8 * * * - 每天晚上8点10分
10 20 * * *
- 每天早上8点
-
在线Cron表达式生成器
管理PVE
-
思路
- 在唤醒部分通过自定义命令,用SSH链接到PVE上,执行对应虚拟机的开机命令即可
-
CT模板 开机命令
pct start 容器ID -
普通虚拟机 开机命令
qm start 虚拟机ID
管理docker容器
-
思路
-
在
Ping选项,自定义检测容器端口命令代替Ping -
在唤醒和关机部分远程执行容器的启动和停止命令
-
权限问题
- 默认只有root用户有权限操作docker
- 如果使用非root用户,需要赋予用户执行docker的权限
- 切换到root
- 查看是否有Docker用户组
grep docker /etc/group - 创建Docker用户组
groupadd docker - 查看
/var/run/docker.sock是否属于Docker用户组ls -l /var/run/docker.sock - 将用户添加到Docker用户组
usermod -aG docker 用户名 - 需要注销再重新登录或重启系统以使更改生效。
-
Ping自定义
格式如下,替换容器的具体IP和端口nc -z -w 1 IP 端口; exit $? -
容器操作
- 容器名称在容器部署时可以设置,没设置会自动生成
docker run命令通过参数--name设置compose通过通过参数container_name设置- 没有设置,自动生成的需要自己查找
- 开启
- 单个
docker start 容器名 - 多个
docker start 容器名1 容器名2 容器名3
- 单个
- 停止
- 单个
docker stop 容器名 - 多个
docker stop 容器名1 容器名2 容器名3
- 单个
- 容器名称在容器部署时可以设置,没设置会自动生成
-
Compose操作
这个仅限非NAS的Linux设备,NAS上不行- 启动
cd compose文件目录 && docker compose start - 停止
-
cd compose文件目录 && docker compose stop
- 启动