Instal·lació del servidor remot Wake-on-LAN (Docker + Python)

Aquesta guia explica com instal·lar i executar el servidor remot Wake-on-LAN (WOL) utilitzat per Turn Off PC.

Aquest servidor actua com un pont entre la VPN i la xarxa local, permetent que dispositius fora de la xarxa domèstica encenguin ordinadors utilitzant Wake-on-LAN.

El servei està implementat com un servidor HTTP Python executant-se dins d'un contenidor Docker.


Què fa aquest servidor

El servidor WOL:


Requisits previs

Abans d'instal·lar el servidor remot Wake-on-LAN, assegura't que els components següents ja estan instal·lats i funcionant al dispositiu amfitrió:

El dispositiu amfitrió ha de:


Estructura del projecte resultant

Després de completar aquesta guia, l'estructura de directoris serà:

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

Pas 1: Crear el directori del projecte

Crea un directori per allotjar el servidor WOL i entra-hi:

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

Pas 2: Crear l'script del servidor Python

Crea l'script principal de Python:

nano wol_server.py

Enganxa el codi següent:

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)

Desa i surt: Ctrl + O → Enter Ctrl + X


Pas 3: Crear el fitxer de dependències de Python

Crea el fitxer requirements.txt:

nano requirements.txt

Afegeix la dependència necessària:

Flask==2.3.3

Desa i surt: Ctrl + O → Enter Ctrl + X


Pas 4: Crear el Dockerfile

Crea el Dockerfile:

nano Dockerfile

Enganxa el contingut següent:

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"]

Desa i surt: Ctrl + O → Enter Ctrl + X


Pas 5: Crear el fitxer Docker Compose

Utilitzar Docker Compose simplifica la gestió i assegura que el contenidor es reinicia automàticament.

Crea el fitxer:

nano docker-compose.yml

Enganxa la configuració següent:

version: "3"

services:
  wol-server:
    build: .
    network_mode: "host"        # Utilitza la xarxa de l'amfitrió (necessari per al broadcast)
    cap_add:
      - NET_ADMIN               # Permet l'enviament de paquets broadcast
    restart: unless-stopped

Desa i surt: Ctrl + O → Enter Ctrl + X

Per què network_mode: host és necessari Wake-on-LAN utilitza paquets broadcast.

La xarxa bridge predeterminada de Docker no pot enviar paquets broadcast correctament. Utilitzar la xarxa de l'amfitrió permet al contenidor:

Accedir a la xarxa física directament

Enviar paquets WOL a la LAN local

Comportar-se com un servei natiu


Pas 6: Construir i iniciar el contenidor

Des de dins del directori wol-server, executa:

docker compose up -d

Docker:

Construirà la imatge

Instal·larà les dependències

Iniciarà el servidor en segon pla


Pas 7: Verificar que el servidor s'està executant

Comprova els contenidors en execució:

docker ps

Hauries de veure una sortida similar a:

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

Si el contenidor s'està executant, el servidor està actiu.

Com s'utilitza el servidor El servidor escolta a:

http://<SERVER_IP>:5000/wake Espera una sol·licitud HTTP POST amb dades JSON:

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

Pas 8: Activar el WOL remot a Turn Off PC (aplicació mòbil)

Obre Turn Off PC al teu telèfon

Ves a editar el teu dispositiu

Activa el WOL remot

Introdueix la IP de la Raspberry Pi al camp IP del servidor extern

Desa la configuració

Això és tot. El Wake-on-LAN remot ja està activat.