使用群晖唤醒局域网内其他设备

synology nas wake on lan

之前我写了一篇用树莓派唤醒内网设备的文章,现在再写一篇通过群晖唤醒内网设备的。当然还是要你稍微了解 Linux 系统才可以。用的代码和之前文章的一样。

代码目录

首先在群晖套件中心安装 Web Station 和 Node.js v8(v12 的 npm 安装会提示 zlip 有问题的)。通常 Node.js 会在你安装某些应用时候就会装上的,如果没有装你需要先安装一下。

安装好之后打开 File Station 左边的列表应该就会出现一个 Web 文件夹,在文件夹里建一个 node 文件夹作为存放相关代码文件用,并且在 node 文件夹中再新建一个 logs 文件夹存放日志用。

群晖 Web Station 目录

然后修改一下之前树莓派文章的代码,主要是 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

开启群晖 SSH

在群晖控制面板的「终端机和 SNMP」中勾选「打开 SSH」然后应用。

接着打开你电脑上的终端,Windows 上按 Win+R 然后输入 CMD,或者在开始菜单按钮上右键,选择打开 CMD。

终端 SSH 连接

打开只会输入 ssh [email protected] 这样的命令,其中 192.168.2.117 替换为你群晖的 IP。通常在群晖页面右下角的系统状况可以看到。而 user 替换为你群晖的账号名。然后会提示你输入密码,这个时候你输入任何内容都不会显示出来的,你不用管,直接输入密码只会按 Enter 就好了。

然后安装 PM2

npm install pm2 -g

等待安装好只会会直接显示 pm2 的路径的,注意记下来,因为后面我们要用绝对路径来运行 pm2 的。这个路径一般都是在 Node.js 目录下面。

/volume1/@appstore/Node.js_v8/usr/local/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证书了。

当然你要在外网访问还要在路由器上设置端口映射。我之前的文章有写,这这里就不重复了。