Початок роботи
Встановлення 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-mysql | mysqli_* - кожен запит до БД у застосунку |
php8.1-snmp | snmp2_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.