远程 Wake-on-LAN 服务器安装(Docker + Python)

本指南说明如何安装和运行 Turn Off PC 使用的远程 Wake-on-LAN (WOL) 服务器

此服务器充当 VPN 和本地网络之间的桥梁,允许家庭网络外部的设备使用 Wake-on-LAN 唤醒电脑。

该服务以运行在 Docker 容器中的 Python HTTP 服务器实现。


此服务器的功能

WOL 服务器:


前提条件

在安装远程 Wake-on-LAN 服务器之前,请确保以下组件已在主机设备上安装并正常工作:

主机设备必须:


最终项目结构

完成本指南后,目录结构将为:

wol-server/
├── Dockerfile
├── docker-compose.yml
├── requirements.txt
└── wol_server.py

步骤 1:创建项目目录

创建用于托管 WOL 服务器的目录并进入:

mkdir -p ~/wol-server
cd ~/wol-server

步骤 2:创建 Python 服务器脚本

创建主 Python 脚本:

nano wol_server.py

粘贴以下代码:

from flask import Flask, request
import os

app = Flask(__name__)

@app.route("/wake", methods=["POST"])
def wake():
    data = request.get_json()
    mac = data.get("mac")

    if not mac:
        return "No MAC address provided", 400

    os.system(f"wakeonlan {mac}")
    return f"Magic packet sent to {mac}", 200

if __name__ == "__main__":
    app.run(host="0.0.0.0", port=5000)

保存并退出: Ctrl + O → Enter Ctrl + X


步骤 3:创建 Python 依赖文件

创建 requirements.txt 文件:

nano requirements.txt

添加所需的依赖:

Flask==2.3.3

保存并退出: Ctrl + O → Enter Ctrl + X


步骤 4:创建 Dockerfile

创建 Dockerfile:

nano Dockerfile

粘贴以下内容:

FROM python:3.11-slim

RUN apt-get update && \
    apt-get install -y wakeonlan && \
    rm -rf /var/lib/apt/lists/*

WORKDIR /app

COPY requirements.txt .
COPY wol_server.py .

RUN pip install --no-cache-dir -r requirements.txt

EXPOSE 5000

CMD ["python3", "wol_server.py"]

保存并退出: Ctrl + O → Enter Ctrl + X


步骤 5:创建 Docker Compose 文件

使用 Docker Compose 简化管理并确保容器自动重启。

创建文件:

nano docker-compose.yml

粘贴以下配置:

version: "3"

services:
  wol-server:
    build: .
    network_mode: "host"        # 使用主机网络(广播所必需)
    cap_add:
      - NET_ADMIN               # 允许发送广播数据包
    restart: unless-stopped

保存并退出: Ctrl + O → Enter Ctrl + X

为什么需要 network_mode: host Wake-on-LAN 使用广播数据包。

Docker 的默认桥接网络无法正确广播数据包。 使用主机网络允许容器:

直接访问物理网络

向本地 LAN 发送 WOL 数据包

像原生服务一样运行


步骤 6:构建并启动容器

在 wol-server 目录内运行:

docker compose up -d

Docker 将:

构建镜像

安装依赖

在后台启动服务器


步骤 7:验证服务器正在运行

检查正在运行的容器:

docker ps

您应该看到类似以下的输出:

CONTAINER ID   IMAGE                   COMMAND                  CREATED         STATUS         PORTS     NAMES
4XXXXXX31ba4   wol-server-wol-server   "python3 wol_server.py"  4 minutes ago   Up 4 minutes             wol-server-wol-server-1

如果容器正在运行,服务器处于活动状态。

服务器的使用方式 服务器监听:

http://<SERVER_IP>:5000/wake 它期望收到包含 JSON 数据的 HTTP POST 请求:

{
  "mac": "AA:BB:CC:DD:EE:FF"
}

步骤 8:在 Turn Off PC(手机应用)中启用远程 WOL

在手机上打开 Turn Off PC

进入编辑您的设备

启用远程 WOL

在外部服务器 IP 中输入 Raspberry Pi 的 IP

保存配置

完成。远程 Wake-on-LAN 现已启用。