Notefix/1.Projects/Персональний сайт портфоліо/Self Hosted/GPTWOL.md

4.4 KiB
Raw Blame History

GPTWOL (Simple Wake/Sleep On LAN Docker GUI) — це легковажний веб-інтерфейс (GUI) на Python у Docker-контейнері, призначений для дистанційного вмикання (Wake-on-LAN) та вимикання (Sleep-on-LAN) комп'ютерів у локальній мережі.

Функціонал досить простий :

  • Керування живленням:

  • Для того щоб включити комп’ютер чи сервер потрібно надіслати спеціальний пакет Wake On LAN (L4 або L2 пакет) для передачі команди на запуск. На комп’ютері в Біосі має бути налаштована така опція. А також включена підтримка у налаштуваннях мережевого адаптера в ОС.

  • Для переведення комп’ютера у режим сну потрібно відправити вже інший пакет Sleep On LAN (UDP-пакет на порт 9) підтримуються ОС Linux/Debian та Windows. Але на практиці Windows 10 чи 11 це працює через раз.

  • Моніторинг стану:

  • На сторінці інтерфейсу можна перевірка доступності пристроїв у мережі за допомогою ICMP (ping), ARP або TCP-запитів (із налаштуванням таймаутів).

  • Додавання пристроїв:

  • Сканування локальної мережі через ARP-SCAN для швидкого виявлення та додавання пристроїв.

  • Перевірка коректності введених IP та MAC-адрес.

  • Автоматизація:

  • Вбудований Cron для планування автоматичного вмикання/вимикання за розкладом.

  • Інтерфейс та безпека:

  • Інтерфейс підтримує Dark Mode, пошук та сортування (за ім’ям, IP або MAC).

  • Авторизація: за замовчуванням вимкнена, але підтримує локальний логін/пароль або OIDC (OpenID Connect).

  • Низьке споживання ресурсів (~20 MB RAM).

Особливості розгортання:

  • Ставиться з Docker-образу (misterbabou/gptwol).
  • Список пристроїв зберігається у базі даних SQLite.
  • Є тільки одна особливість сервіс вимагає мережевого режиму network_mode: host для коректної відправки WOL-пакетів у локальну мережу
version: "3.9"

services:
  gptwol:
    container_name: gptwol
    image: misterbabou/gptwol:latest

    # gptwol працює тільки в host-режимі
    network_mode: host

    restart: unless-stopped

    environment:
      # Часовий пояс — рекомендовано для cron
      TZ: "Europe/Kyiv"

      # Ввімкнути локальну авторизацію
      ENABLE_LOGIN: "true"

      # Зміни ці параметри
      USERNAME: "admin"
      PASSWORD: "rZ1byF9knX4dmI2y"

      # Дозволити додавати/видаляти комп'ютери з інтерфейсу
      ENABLE_ADD_DEL: "true"

      # Автоматичне оновлення статусу (ping/arp/tcp)
      ENABLE_REFRESH: "true"

      # Інтервал оновлення статусу в секундах
      REFRESH_INTERVAL: "30"

      # Таймаути для перевірок
      PING_TIMEOUT: "80"
      ARP_TIMEOUT: "80"
      TCP_TIMEOUT: "1"
      GUNICORN_CMD_ARGS: "--timeout 120 --workers 2"
      
      # Використовувати WOL L2 пакети (краще для локальних мереж)
      ENABLE_L2_WOL_PACKET: "false"
      L2_INTERFACE: "enp0s31f6"

    volumes:
      # Тут зберігається база даних (список комп'ютерів)
      - /home/admin/gptwol/appdata/db:/app/db

      # Тут зберігаються CRON-завдання (автовмикання/вимкнення)
      - /home/admin/gptwol/appdata/cron:/etc/cron.d