Початок роботи
Встановлення 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). Потім запустіть фонову службу PonControl. Вона опитує OLT, перевіряє оновлення та надсилає сповіщення про обрані ONU, кожне з інтервалом, який ви задаєте в Налаштування → Планувальник:
sudo cp /var/www/poncontrol2/deploy/systemd/poncontrol.service /etc/systemd/system/
sudo sed -i "s#__PROJECT_DIR__#/var/www/poncontrol2#g" /etc/systemd/system/poncontrol.service
sudo install -m 644 /var/www/poncontrol2/deploy/logrotate/poncontrol /etc/logrotate.d/poncontrol
sudo systemctl daemon-reload
sudo systemctl enable --now poncontrol
Служба сама обирає PHP 7.4 або новіший. Якщо типовий php на сервері старіший (наприклад 5.6), це не проблема, якщо встановлено новіший. Щоб побачити, що є: ls /usr/bin/php* і update-alternatives --list php. Щоб закріпити конкретний, виконайте sudo systemctl edit poncontrol і додайте під [Service] Environment=PONCONTROL_PHP=/usr/bin/php7.4. Журнал - /var/log/poncontrol/poncontrol.log, ротується щодня і зберігається 14 днів.
Перевірити роботу можна командою systemctl status poncontrol. Якщо ви переходите з
установки на cron, видаліть старі рядки PonControl з crontab www-data (sudo crontab -u www-data -e),
щоб нічого не запускалось двічі.
Що далі
- Двофакторна автентифікація - кожен співробітник може увімкнути код із застосунку- автентифікатора для входу за паролем (Змінити пароль → Двофакторна автентифікація). Адміністратори можуть зробити це обов'язковим у Налаштування → Безпека.
- Оновлення - перевірка оновлень працює під службою. Якщо сервер отримує код із приватного
репозиторію, покладіть deploy-ключ у
/etc/poncontrol-deploy/- перевірка знайде його автоматично. - Android-застосунок - встановіть APK зі сторінки застосунку в PonControl, введіть адресу
цього сервера і увійдіть. Для миттєвих сповіщень про обрані ONU покладіть ключ сервісного облікового запису
Firebase у
config/fcm_service_account.json, доступний групі www-data (режим 640). До того сповіщення надходитимуть за розкладом служби. - Zabbix на цьому сервері - якщо він працює на тій самій машині, його скрипти сповіщень мають мати доступ до читання файлів конфігурації. Адміністраторська панель покаже точні команди, якщо ні.
- Сповіщення Zabbix/Telegram, інтеграція з UserSide і вхід через Google - усе опціонально і налаштовується в Налаштування → Інтеграції; нічого з цього не потрібно для базового моніторингу OLT/ONU.