Uzaktan Wake-on-LAN Sunucusu Kurulumu (Docker + Python)

Bu kılavuz, Turn Off PC tarafından kullanılan uzaktan Wake-on-LAN (WOL) sunucusunun nasıl kurulacağını ve çalıştırılacağını açıklar.

Bu sunucu, VPN ile yerel ağ arasında köprü görevi görerek ev ağı dışındaki cihazların Wake-on-LAN kullanarak bilgisayarları uyandırmasına olanak tanır.

Servis, bir Docker konteyneri içinde çalışan bir Python HTTP sunucusu olarak uygulanmaktadır.


Bu sunucunun yaptıkları

WOL sunucusu:


Ön Koşullar

Uzaktan Wake-on-LAN sunucusunu kurmadan önce, ana cihazdaki aşağıdaki bileşenlerin zaten kurulup çalışır durumda olduğundan emin olun:

Ana cihaz şu özelliklere sahip olmalıdır:


Oluşan proje yapısı

Bu kılavuzu tamamladıktan sonra dizin yapısı şöyle olacak:

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

Adım 1: Proje dizinini oluşturun

WOL sunucusunu barındıracak bir dizin oluşturun ve içine girin:

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

Adım 2: Python sunucu betiğini oluşturun

Ana Python betiğini oluşturun:

nano wol_server.py

Aşağıdaki kodu yapıştırın:

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)

Kaydedin ve çıkın: Ctrl + O → Enter Ctrl + X


Adım 3: Python bağımlılıkları dosyasını oluşturun

requirements.txt dosyasını oluşturun:

nano requirements.txt

Gerekli bağımlılığı ekleyin:

Flask==2.3.3

Kaydedin ve çıkın: Ctrl + O → Enter Ctrl + X


Adım 4: Dockerfile oluşturun

Dockerfile'ı oluşturun:

nano Dockerfile

Aşağıdaki içeriği yapıştırın:

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

Kaydedin ve çıkın: Ctrl + O → Enter Ctrl + X


Adım 5: Docker Compose dosyasını oluşturun

Docker Compose kullanmak, yönetimi kolaylaştırır ve konteynerin otomatik olarak yeniden başlatılmasını sağlar.

Dosyayı oluşturun:

nano docker-compose.yml

Aşağıdaki yapılandırmayı yapıştırın:

version: "3"

services:
  wol-server:
    build: .
    network_mode: "host"        # Ana bilgisayar ağını kullanır (yayın için gerekli)
    cap_add:
      - NET_ADMIN               # Yayın paketleri göndermeye izin verir
    restart: unless-stopped

Kaydedin ve çıkın: Ctrl + O → Enter Ctrl + X

network_mode: host neden gereklidir Wake-on-LAN, yayın paketleri kullanır.

Docker'ın varsayılan köprü ağı, yayın paketlerini doğru şekilde gönderemez. Ana bilgisayar ağını kullanmak, konteynerin şunları yapmasına olanak tanır:

Fiziksel ağa doğrudan erişim

WOL paketlerini yerel LAN'a gönderme

Yerel bir servis gibi davranma


Adım 6: Konteyneri oluşturun ve başlatın

wol-server dizininin içinden şunu çalıştırın:

docker compose up -d

Docker şunları yapacak:

İmajı oluşturma

Bağımlılıkları yükleme

Sunucuyu arka planda başlatma


Adım 7: Sunucunun çalıştığını doğrulayın

Çalışan konteynerleri kontrol edin:

docker ps

Şuna benzer bir çıktı görmelisiniz:

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

Konteyner çalışıyorsa sunucu etkindir.

Sunucu nasıl kullanılır Sunucu şu adreste dinler:

http://<SUNUCU_IP>:5000/wake JSON verisi içeren bir HTTP POST isteği bekler:

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

Adım 8: Turn Off PC'de Uzaktan WOL'u etkinleştirin (mobil uygulama)

Telefonunuzda Turn Off PC'yi açın

Cihazınızı düzenlemeye gidin

Uzaktan WOL'u etkinleştirin

Raspberry Pi IP'sini harici sunucu IP'sine girin

Yapılandırmayı kaydedin

Hepsi bu kadar. Uzaktan Wake-on-LAN artık etkinleştirildi.