Installation du Serveur Wake-on-LAN Distant (Docker + Python)
Ce guide explique comment installer et executer le serveur Wake-on-LAN (WOL) distant utilise par Turn Off PC.
Ce serveur agit comme un pont entre le VPN et le reseau local, permettant aux appareils situes en dehors du reseau domestique de reveiller des ordinateurs en utilisant le Wake-on-LAN.
Le service est implemente sous forme d'un serveur HTTP Python fonctionnant a l'interieur d'un conteneur Docker.
Ce que fait ce serveur
Le serveur WOL :
- Fonctionne en continu sur un systeme Linux (recommande : Raspberry Pi)
- Ecoute les requetes HTTP sur le port 5000
- Recoit une adresse MAC via HTTP POST
- Envoie un paquet magique Wake-on-LAN a l'interieur du reseau local
- Permet le Wake-on-LAN distant lorsqu'il est utilise avec un VPN (par exemple Tailscale)
Prerequis
Avant d'installer le serveur Wake-on-LAN distant, assurez-vous que les composants suivants sont deja installes et fonctionnels sur l'appareil hote :
-
Raspberry Pi OS (ou une autre distribution Linux compatible) → Installation de Raspberry Pi OS
-
Docker (necessaire pour executer le conteneur du serveur WOL) → Installation de Docker sur Linux
-
Tailscale (necessaire pour l'acces distant via VPN) → Installation de Tailscale
L'appareil hote doit :
- Etre allume en permanence
- Etre connecte au reseau local
- Etre connecte au VPN (Tailscale)
Structure du projet resultante
Apres avoir complete ce guide, la structure des repertoires sera :
wol-server/
├── Dockerfile
├── docker-compose.yml
├── requirements.txt
└── wol_server.py
Etape 1 : Creer le repertoire du projet
Creez un repertoire pour heberger le serveur WOL et entrez-y :
mkdir -p ~/wol-server
cd ~/wol-server
Etape 2 : Creer le script du serveur Python
Creez le script Python principal :
nano wol_server.py
Collez le code suivant :
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)
Sauvegardez et quittez : Ctrl + O → Entree Ctrl + X
Etape 3 : Creer le fichier de dependances Python
Creez le fichier requirements.txt :
nano requirements.txt
Ajoutez la dependance requise :
Flask==2.3.3
Sauvegardez et quittez : Ctrl + O → Entree Ctrl + X
Etape 4 : Creer le Dockerfile
Creez le Dockerfile :
nano Dockerfile
Collez le contenu suivant :
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"]
Sauvegardez et quittez : Ctrl + O → Entree Ctrl + X
Etape 5 : Creer le fichier Docker Compose
L'utilisation de Docker Compose simplifie la gestion et garantit que le conteneur redemarre automatiquement.
Creez le fichier :
nano docker-compose.yml
Collez la configuration suivante :
version: "3"
services:
wol-server:
build: .
network_mode: "host" # Uses the host network (required for broadcast)
cap_add:
- NET_ADMIN # Allows sending broadcast packets
restart: unless-stopped
Sauvegardez et quittez : Ctrl + O → Entree Ctrl + X
Pourquoi network_mode: host est necessaire Le Wake-on-LAN utilise des paquets broadcast.
Le reseau bridge par defaut de Docker ne peut pas diffuser correctement les paquets broadcast. L'utilisation du reseau hote permet au conteneur de :
Acceder directement au reseau physique
Envoyer des paquets WOL vers le LAN local
Se comporter comme un service natif
Etape 6 : Construire et demarrer le conteneur
Depuis le repertoire wol-server, executez :
docker compose up -d
Docker va :
Construire l'image
Installer les dependances
Demarrer le serveur en arriere-plan
Etape 7 : Verifier que le serveur fonctionne
Verifiez les conteneurs en cours d'execution :
docker ps
Vous devriez voir une sortie similaire 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 le conteneur est en cours d'execution, le serveur est actif.
Comment le serveur est utilise Le serveur ecoute sur :
http://<SERVER_IP>:5000/wake Il attend une requete HTTP POST avec des donnees JSON :
{
"mac": "AA:BB:CC:DD:EE:FF"
}
Etape 8 : Activer le WOL Distant dans Turn Off PC (application mobile)
Ouvrez Turn Off PC sur votre telephone
Allez modifier votre appareil
Activez le WOL Distant
Entrez l'IP du Raspberry Pi dans le champ IP du serveur externe
Sauvegardez la configuration
C'est tout. Le Wake-on-LAN distant est maintenant active.