局域网唤醒工具UpSnap

什么是 UpSnap ?

UpSnap 是使用 SvelteKitGoPocketBasenmap 编写的简单局域网唤醒应用程序。

v3 更新日志:

  • ⚙️ 后端:
    • Go 重写。之前的版本是 Python 写的;
    • 不再支持不同的数据库。后端现在使用基于 SQLitePocketBase
    • 添加了使用密码唤醒事件的选项。如果您的网卡支持,您可以在 BIOS中找到它,称为 SecureOnsmiliar
    • PocketBase 提供了一个 API。可以登录 localhost:8090/_/,点击右上角的 API reviewP·
  • 🎨 前端:
    • Svelte 转换为 SvelteKit,并且几乎重写了所有内容;
    • 摆脱了模式。页面应该更加用户友好;
    • 设备卡上更好的徽章以显示 cron 事件和密码保护;
  • 通用:
    • 大大减少资源需求;
    • 单个二进制文件即可运行所有内容
    • 反向代理不再需要自定义路由;

安装

在群晖上以 Docker 方式安装。

镜像下载

官方的镜像发布在 ghcr.io
地址:https://github.com/seriousm4x/UpSnap/pkgs/container/upsnap

SSH 客户端登录到群晖后,依次执行下面的命令

1
2
3
4
5
6
7
8
9
# 新建文件夹 upsnap 和子目录 
mkdir -p /volume2/docker/upsnap/data

# 进入 upsnap 目录
cd /volume2/docker/upsnap

# 拉取镜像
## 需要注意:官方没有 latest ,所以需要自己去查最新的版本
docker pull ghcr.io/seriousm4x/upsnap:3.0.3

如果没有科学上网,很可能会拉不动,可以试试 docker 代理网站:https://dockerproxy.com/,但是会多几个步骤

1
2
3
4
5
6
7
8
# 如果拉不动的话加个代理
docker pull ghcr.dockerproxy.com/seriousm4x/upsnap:3.0.3

# 重命名镜像(如果是通过代理下载的)
docker tag ghcr.dockerproxy.com/seriousm4x/upsnap:3.0.3 ghcr.io/seriousm4x/upsnap:3.0.3

# 删除代理镜像(如果是通过代理下载的)
docker rmi ghcr.dockerproxy.com/seriousm4x/upsnap:3.0.3

下载完成后,可以在 映像 中找到

命令行安装

如果你熟悉命令行,可能用 docker cli 更快捷

1
2
3
4
5
6
7
8
9
10
11
12
13
# 新建文件夹 upsnap 和 子目录
mkdir -p /volume2/docker/upsnap/data

# 进入 upsnap 目录
cd /volume2/docker/upsnap

# 运行容器
docker run -d \
--restart unless-stopped \
--network host \
--name upsnap \
-v $(pwd)/data:/app/pb_data \
ghcr.io/seriousm4x/upsnap:3.0.3

也可以用 docker-compose 安装,将下面的内容保存为 docker-compose.yml 文件

这是完整的官方版本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
version: "3"

services:
upsnap:
image: ghcr.io/seriousm4x/upsnap:3.0.3
container_name: upsnap
network_mode: host
restart: unless-stopped
volumes:
- ./data:/app/pb_data
healthcheck:
test: wget --no-verbose --tries=1 --spider http://localhost:8090/api/health || exit 1
interval: 1m
timeout: 10s
retries: 3
# environment:
# - TZ=Europe/Berlin # Set container timezone for cron schedules
# - UPSNAP_INTERVAL=@every 10s # Sets the interval in which the devices are pinged
# - UPSNAP_SCAN_RANGE=192.168.1.0/24 # Scan range is used for device discovery on local network
# - UPSNAP_WEBSITE_TITLE=Custom name # Custom website title
# command: ["./upsnap", "serve", "--http", "0.0.0.0:8090"] # Uncomment this if you want to change the port for example

然后执行下面的命令

1
2
3
4
5
6
7
8
9
10
# 新建文件夹 upsnap 和 子目录
mkdir -p /volume2/docker/upsnap/data

# 进入 upsnap 目录
cd /volume2/docker/upsnap

# 将 docker-compose.yml 放入当前目录

# 一键启动
docker-compose up -d

运行

在浏览器中输入 http://群晖IP:8090 就能看到主界面

添加设备

进设置里添加设备

添加完成之后,回到首页会出现设备卡片

点①可以直接网络唤醒

唤醒之后,开关按钮会变绿

点②则显示该设备的详细信息

尝试再添加个端口,比如 SSH 使用的22

设备卡片上会增加

网络扫描

如果觉得一台一台添加麻烦,也可以直接用网络扫描

速度还是比较快的,但存在缺漏

点设备后面的 Add +,返回首页

API

PocketBase 提供了 API ,浏览器中打开 http://群晖IP:8090/_/

注册账号之后,进入主界面

右上角 API Preview

日志

最后来一张官网的图

参考文档

seriousm4x/UpSnap: A simple wake on lan app written with SvelteKit, Go, PocketBase and nmap
地址:https://github.com/seriousm4x/UpSnap

UpSnap v3 is out and rewritten in Go : selfhosted
地址:https://www.reddit.com/r/selfhosted/comments/10rz7jc/upsnap_v3_is_out_and_rewritten_in_go/