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:
- S'executa contínuament en un sistema Linux (recomanat: Raspberry Pi)
- Escolta sol·licituds HTTP al port 5000
- Rep una adreça MAC via HTTP POST
- Envia un paquet màgic Wake-on-LAN dins de la xarxa local
- Permet el Wake-on-LAN remot quan s'utilitza conjuntament amb una VPN (p. ex. Tailscale)
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ó:
-
Raspberry Pi OS (o una altra distribució Linux compatible) → Instal·lació de Raspberry Pi OS
-
Docker (necessari per executar el contenidor del servidor WOL) → Instal·lació de Docker a Linux
-
Tailscale (necessari per a l'accés remot via VPN) → Instal·lació de Tailscale
El dispositiu amfitrió ha de:
- Estar encès en tot moment
- Estar connectat a la xarxa local
- Estar connectat a la VPN (Tailscale)
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.