
之前我写了一篇用树莓派唤醒内网设备的文章,现在再写一篇通过群晖唤醒内网设备的。当然还是要你稍微了解 Linux
系统才可以。用的代码和之前文章的一样。
代码目录
首先在群晖套件中心安装 Web Station 和 Node.js v8(v12 的 npm
安装会提示 zlip
有问题的)。通常 Node.js 会在你安装某些应用时候就会装上的,如果没有装你需要先安装一下。
安装好之后打开 File Station 左边的列表应该就会出现一个 Web
文件夹,在文件夹里建一个 node
文件夹作为存放相关代码文件用,并且在 node
文件夹中再新建一个 logs
文件夹存放日志用。

然后修改一下之前树莓派文章的代码,主要是 pm2_config.json
文件改为绝对路径。一般 Web
文件夹绝对路径是 /volume1/web/
,其中 volume1
是储存池的目录,如果你装了多个硬盘或者组阵列的话就需要你自己在终端查一下你 Web
文件夹的目录了。
{
"apps" : [{
"name" : "nodewol",
"script" : "/volume1/web/node/index.js",
"cwd" : "/volume1/web/node/",
"instances" : "1",
"log_date_format" : "YYYY-MM-DD HH:mm Z",
"log_file" : "/volume1/web/node/log/wol.log",
"error_file" : "/volume1/web/node/log/wol-err.log",
"out_file" : "/volume1/web/node/log/wol-out.log",
"watch" : true
}]
}
安装 PM2

在群晖控制面板的「终端机和 SNMP」中勾选「打开 SSH」然后应用。
接着打开你电脑上的终端,Windows 上按 Win+R 然后输入 CMD,或者在开始菜单按钮上右键,选择打开 CMD。

打开只会输入 ssh [email protected]
这样的命令,其中 192.168.2.117
替换为你群晖的 IP。通常在群晖页面右下角的系统状况可以看到。而 user
替换为你群晖的账号名。然后会提示你输入密码,这个时候你输入任何内容都不会显示出来的,你不用管,直接输入密码只会按 Enter
就好了。
如果你 nodejs 默认是 v12,则先输入 nvm set 8.9.4
切换回 v8 才能正常使用 npm!
然后安装 PM2
npm install pm2 -g
等待安装好只会会直接显示 pm2 的路径的,注意记下来,因为后面我们要用绝对路径来运行 pm2 的。这个路径一般都是在 Node.js 目录下面。
/volume1/@appstore/Node.js_v8/usr/local/bin/pm2
or
/volume1/@appstore/Node.js_v8/usr/local/lib/node_modules/pm2/bin/pm2
你可以测试一下运行上传的代码。
/volume1/@appstore/Node.js_v8/usr/local/bin/pm2 start /volume1/web/node/pm2_config.json
如果没有提示红色错误,直接显示表格运行状态的话就 OK 了。然后现在关掉这个测试。因为我们要用群晖的任务计划让他开机自动启动。
/volume1/@appstore/Node.js_v8/usr/local/bin/pm2 stop /volume1/web/node/pm2_config.json
设置开机启动
打开群晖的控制面板,选择任务计划,新增>触发的任务>用户定义的脚本。

任务名称随便你填写一个,用户账号选择 root。然后在任务设置页面「用户定义的脚本」上面测试的那段代码,然后按确定。

保存好只会记得勾选刚新建的项目前面的勾,然后右键>运行。这样就完成了。
设置反向代理
在控制面板中的「应用程序门户」里面的「反响代理服务」新增一项。

描述随便填,协议选择 Https
,端口就是你想用来访问的端口,例如 10505
(填5位数可以防止和常用端口冲突),勾选「启动 HTTP/2」,下面的「目的地」就是填 node.js 应用的信息,地址就是 127.0.0.1
,端口就是应用的端口 5050
。然后确定。
这样就可以把 mac
地址通过 post
发给 https://192.168.2.117:10505/wol
这个地址来唤醒局域网内的设备了。
至于 https 证书问题,如果你用群晖的 DDNS 就不需要额外操作,如果你是用自己的域名就需要用 acme 申请Let’s Encrypt证书了。
当然你要在外网访问还要在路由器上设置端口映射。我之前的文章有写,这这里就不重复了。