Установка сервера удалённого Wake-on-LAN (Docker + Python)

Вернуться к руководству по подключению

Это руководство объясняет, как установить и запустить сервер удалённого Wake-on-LAN (WOL), используемый Turn Off PC.

Этот сервер выступает в роли моста между VPN и локальной сетью, позволяя устройствам за пределами домашней сети будить компьютеры с помощью Wake-on-LAN.

Сервис реализован как HTTP-сервер на Python, работающий внутри контейнера Docker.


Что делает этот сервер

Сервер 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 не может корректно отправлять широковещательные пакеты. Использование хостовой сети позволяет контейнеру:

Получить прямой доступ к физической сети

Отправлять WOL-пакеты в локальную LAN

Работать как нативный сервис


Шаг 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 Он ожидает HTTP POST запрос с JSON-данными:

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

Шаг 8: Включите удалённый WOL в Turn Off PC (мобильное приложение)

Откройте Turn Off PC на вашем телефоне

Перейдите к редактированию вашего устройства

Включите удалённый WOL

Введите IP Raspberry Pi в поле IP внешнего сервера

Сохраните конфигурацию

Всё готово. Удалённый Wake-on-LAN теперь включён.