Installazione del server Wake-on-LAN remoto (Docker + Python)

Torna alla Guida alla connessione

Questa guida spiega come installare ed eseguire il server Wake-on-LAN (WOL) remoto utilizzato da Turn Off PC.

Questo server agisce come un ponte tra la VPN e la rete locale, consentendo ai dispositivi al di fuori della rete domestica di risvegliare i computer utilizzando Wake-on-LAN.

Il servizio e' implementato come un server HTTP Python in esecuzione all'interno di un container Docker.


Cosa fa questo server

Il server WOL:


Prerequisiti

Prima di installare il server Wake-on-LAN remoto, assicurati che i seguenti componenti siano gia installati e funzionanti sul dispositivo host:

Il dispositivo host deve:


Struttura del progetto risultante

Dopo aver completato questa guida, la struttura delle directory sara:

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

Passaggio 1: Creare la directory del progetto

Crea una directory per ospitare il server WOL e accedivi:

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

Passaggio 2: Creare lo script del server Python

Crea lo script Python principale:

nano wol_server.py

Incolla il seguente codice:

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)

Salva ed esci: Ctrl + O → Invio Ctrl + X


Passaggio 3: Creare il file delle dipendenze Python

Crea il file requirements.txt:

nano requirements.txt

Aggiungi la dipendenza necessaria:

Flask==2.3.3

Salva ed esci: Ctrl + O → Invio Ctrl + X


Passaggio 4: Creare il Dockerfile

Crea il Dockerfile:

nano Dockerfile

Incolla il seguente contenuto:

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

Salva ed esci: Ctrl + O → Invio Ctrl + X


Passaggio 5: Creare il file Docker Compose

L'uso di Docker Compose semplifica la gestione e garantisce che il container si riavvii automaticamente.

Crea il file:

nano docker-compose.yml

Incolla la seguente configurazione:

version: "3"

services:
  wol-server:
    build: .
    network_mode: "host"        # Usa la rete dell'host (necessario per il broadcast)
    cap_add:
      - NET_ADMIN               # Consente l'invio di pacchetti broadcast
    restart: unless-stopped

Salva ed esci: Ctrl + O → Invio Ctrl + X

Perche' network_mode: host e' necessario Wake-on-LAN utilizza pacchetti broadcast.

La rete bridge predefinita di Docker non puo trasmettere correttamente i pacchetti broadcast. L'uso della rete host consente al container di:

Accedere direttamente alla rete fisica

Inviare pacchetti WOL alla LAN locale

Comportarsi come un servizio nativo


Passaggio 6: Compilare e avviare il container

Dall'interno della directory wol-server, esegui:

docker compose up -d

Docker:

Compilera l'immagine

Installera le dipendenze

Avviera il server in background


Passaggio 7: Verificare che il server sia in esecuzione

Controlla i container in esecuzione:

docker ps

Dovresti vedere un output simile 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

Se il container e' in esecuzione, il server e' attivo.

Come viene utilizzato il server Il server ascolta su:

http://<SERVER_IP>:5000/wake Si aspetta una richiesta HTTP POST con dati JSON:

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

Passaggio 8: Abilitare il WOL remoto in Turn Off PC (app mobile)

Apri Turn Off PC sul tuo telefono

Vai a modificare il tuo dispositivo

Abilita il WOL remoto

Inserisci l'IP del Raspberry nel campo IP del server esterno

Salva la configurazione

Questo e' tutto. Il Wake-on-LAN remoto e' ora abilitato.