Початок роботи

Встановлення PonControl на новому сервері - системні пакети, веб-сервер, PHP і MySQL.

Написано для Ubuntu/Debian. Назви пакетів нижче - для apt (Debian/Ubuntu); для іншого дистрибутива назви пакетів dnf/yum відрізняються (наприклад, php-snmp замість php8.1-snmp).

Потрібен PHP 7.4 або новіший (стрілкові функції - найстаріша мовна можливість, яку цей код реально використовує, нічого 8.x-специфічного тут немає). Приклади нижче використовують назви пакетів php8.1-* лише як заповнювач - підставте ту версію PHP, яку ви реально встановлюєте чи вже маєте (php7.4-*, php8.2-*, ...) - немає потреби ганятись за конкретною новішою версією, якщо на сервері вже є підтримувана старіша.

1. Встановлення пакетів

Apache (рекомендовано)

Саме під нього написані власні файли .htaccess застосунку.

sudo apt update
sudo apt install apache2 libapache2-mod-php8.1 \
    php8.1-cli php8.1-mysql php8.1-snmp php8.1-curl php8.1-mbstring \
    mysql-server git

Це повний список модулів, які цей код реально використовує - перевірено грепом кожного PHP-файлу на функції, специфічні для конкретного розширення:

ПакетНавіщо
php8.1-mysqlmysqli_* - кожен запит до БД у застосунку
php8.1-snmpsnmp2_get()/snmprealwalk() - весь опит OLT/ONU
php8.1-curlобмін токенами Google Sign-In, кілька інших вихідних HTTP-запитів
php8.1-mbstringперевірка довжини багатобайтного рядка в пошуку користувачів

Все інше, що використовує застосунок - сесії, JSON, хешування паролів і gzip-стиснення (використовується Backup/Restore) - вже частина ядра PHP. Зокрема, не потрібен php8.1-zip: резервні копії - це gzip-стиснений JSON, а не zip-файли, спеціально тому, що на такому типі серверів розширення ZipArchive часто відсутнє. GD, LDAP, XML, bcmath, gmp чи intl тут також ніде не використовуються.

Nginx (альтернатива)

Застосунок постачається з файлами .htaccess, які Apache читає автоматично. Nginx повністю ігнорує .htaccess - якщо оберете цей шлях, доведеться вручну прописати ті самі правила у своєму server-блоці, інакше деякі папки залишаться повністю відкритими по HTTP:

  • Весь сайт: HTTP Basic Auth
  • /api/: без Basic Auth (окремий Bearer-token API для мобільного застосунку)
  • /backups/, /update_procedure/, /config/: повна заборона прямого доступу по HTTP
location / {
    auth_basic "Authorize, please!";
    auth_basic_user_file /var/www/poncontrol2/.htpasswd;
    try_files $uri $uri/ /index.php?$query_string;
}
location /api/ {
    try_files $uri =404;
    fastcgi_pass unix:/run/php/php8.1-fpm.sock;
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
location ~ ^/(backups|update_procedure|config)/ {
    deny all;
    return 403;
}
location ~ \.php$ {
    fastcgi_pass unix:/run/php/php8.1-fpm.sock;
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}

2. Віртуальний хост Apache

Єдине налаштування, якого типова конфігурація Apache в Ubuntu не дає за замовчуванням, але яке цьому застосунку реально потрібне - це AllowOverride AuthConfig. Без нього кожен файл .htaccess вище мовчки ігнорується, і весь сайт обслуговується взагалі без жодного захисту.

<VirtualHost *:80>
    ServerName pon.example.org
    DocumentRoot /var/www/poncontrol2

    <Directory /var/www/poncontrol2>
        AllowOverride AuthConfig
        Require all granted
    </Directory>
</VirtualHost>
sudo a2ensite pon.example.org.conf
sudo systemctl reload apache2

HTTPS - не опціонально

Cookie сесії входу встановлюється з secure => true - браузер не надішле таку cookie назад по звичайному HTTP, тож вхід буде мовчки "нічого не робити". Розгорніть TLS перед тестуванням входу (certbot --apache - найпростіший шлях для публічного хосту).

Створення файлу HTTP Basic Auth для всього сайту

sudo htpasswd -c /var/www/poncontrol2/.htpasswd youradminuser

3. Створення бази даних MySQL

CREATE DATABASE poncontrol CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'poncontroluse'@'localhost' IDENTIFIED BY 'poncontrolpassword';
GRANT ALL PRIVILEGES ON poncontrol.* TO 'poncontroluse'@'localhost';
FLUSH PRIVILEGES;

Створювати таблиці вручну не потрібно - кожна таблиця, яку використовує застосунок, створюється автоматично, при першій потребі. Порожня база з правильними правами доступу - це повноцінна початкова точка.

4. Розгортання коду

sudo mkdir -p /var/www/poncontrol2
sudo git clone https://github.com/<your-fork>/poncontrol2.git /var/www/poncontrol2
sudo chown -R www-data:www-data /var/www/poncontrol2

5. Майстер першого запуску

Відкрийте https://ваш-домен/setup.php і заповніть MySQL host/db/user/pass та облікові дані telnet ваших OLT (потрібні для таблиці FDB та обмежень швидкості для окремих ONU). Після відправлення форми створюється config/vars.php і базова таблиця olts.

Логін за замовчуванням

Найперше відкриття сторінки після цього додає один обліковий запис: admin / admin1234. Увійдіть і одразу змініть пароль - цей стандартний пароль публічний.

6. Додавання OLT і запуск опитування

Додайте свій перший OLT через інтерфейс (IP + SNMP community), потім налаштуйте цикл опитування як cron-завдання:

# 2 хвилини - прийнятна початкова точка для кількох OLT
*/2 * * * * php /var/www/poncontrol2/ping_all.php > /dev/null

Що далі

  • Щойно сайт підтверджено робочим, PonControl можна налаштувати на автоматичне оновлення з deploy-ключем і cron.
  • Сповіщення Zabbix/Telegram, інтеграція з UserSide і Google Sign-In - усе опціонально й налаштовується повністю через UI розділу "Налаштування" - ніщо з цього не потрібне для базового моніторингу OLT/ONU.