Автоматичний спосіб: один скрипт з особистого кабінету готує весь сервер (вебстек Apache + PHP, базу даних, інструменти безпеки, cron). Далі — розгорнути панель, випустити SSL і ввести ліцензію. Працює на Ubuntu/Debian: на новому VPS налаштовує все з нуля, на вже налаштованому сервері — лише додатково (профіль «Налаштований сервер», крок 01). Усі команди нижче — по порядку, просто гортайте згори донизу. На новому VPS підходить кожен крок поспіль; якщо сервер уже налаштований або на ньому стоїть хостинг-панель, частину роботи скрипт свідомо лишає вам — що саме, він пише наприкінці своєї роботи (розбір виводу — у кроці 01).
monitor.example.com — ваш домен; 203.0.113.10 — реальний IP сервера; /var/www/monitor — корінь панелі (де лежать public/, assets/, config.php); пароль БД придумайте свій.
jail.local), root-crontab, правила UFW, конфіг Apache. Якщо сервер уже налаштований (робоча панель, сайти, пошта, власні jail'и) — обирайте профіль «Налаштований сервер»: він вносить лише додаткові зміни і не чіпає ваш фаєрвол, Fail2ban, пошту, SSH та sysctl. Виявивши хостинг-панель, скрипт перемикається на цей режим самостійно. Перед першим запуском можна ввімкнути сухий прогін (галочка в кабінеті) — він покаже, що буде зроблено, нічого не змінюючи. На робочому сервері про всяк випадок зробіть знімок (snapshot).
my.arciveo.com → розділ «Налаштування сервера» (доступний після оформлення Arcivéo Security Monitor). Вона прив'язана до вашого облікового запису та містить персональний токен.
Скрипт готує весь сервер: вебстек (Apache + PHP), базу даних, інструменти для SSL, повний набір засобів захисту та cron-завдання (Lynis, SMART, debsums, Logwatch, щоденний звіт, оновлення ipsum).
1) Оберіть рівень захисту (у кабінеті, перед копіюванням команди):
2) Виконайте на сервері під root команду з кабінету — вона має такий вигляд:
3) Прочитайте вивід наприкінці — там сказано, що лишилося на вас. Скрипт завершує роботу блоком перевірок і списком «Далі — встановлення панелі». Частину кроків він свідомо не виконує: що саме — залежить від обраного профілю та від того, що він знайшов на сервері. Звіртеся зі списком нижче — виконувати потрібно лише ті пункти, рядки яких з'явилися у вашому виводі.
Control panel detected (…) — сайт створюється засобами самої хостинг-панелі, vhost скрипт не робить. Крок 03, гілка «Сервер із хостинг-панеллю».No vhost created (no domain given) — профіль «Налаштований сервер» без домену: vhost без імені став би сайтом за замовчуванням і перехоплював би ваші ж сайти, тому його не створено. Крок 03, гілка «Створити vhost вручну».sudo rules NOT written — скрипт не зміг визначити, під яким обліковим записом працює панель. Це звичайна ситуація: файли панелі завантажуються вже після автоналаштування, і визначати ще не було за чим. Без цих правил модулі не побачать системних даних. Крок 04, блок «sudo для вебсервера».! Nginx does not read .htaccess — перед Apache стоїть Nginx, і вписати заборону в його конфіг автоматично не вдалося. Зробіть це обов'язково: інакше data/, keys/, database/ і config.php віддаються назовні в обхід .htaccess. Крок 03, блок «Якщо перед Apache стоїть Nginx».UFW installed but inactive — фаєрвол встановлено, але вимкнено: на налаштованому сервері скрипт не вмикає його сам, щоб не відрізати вам доступ. Увімкніть його самі, обов'язково дозволивши свій SSH-порт:
Fail2ban installed but not running — запустіть: sudo systemctl enable --now fail2ban.Database server present … but not running — запустіть СКБД до кроку 04: sudo systemctl enable --now mariadb (або mysql — залежно від того, що встановлено).Certbot skipped — issue SSL in … — сертифікат видається вимикачем Let's Encrypt у хостинг-панелі; крок 06 вам не потрібен.All checks passed. Пункти з ! потребують уваги; подробиці пишуться в лог, його шлях скрипт друкує в самому кінці (Log: …).
Щоб відкривати панель за адресою на кшталт monitor.example.com та отримати безкоштовний SSL, домен має вказувати на сервер. У панелі керування DNS (у реєстратора чи хостера) створіть A-запис:
За кілька хвилин (іноді до години) перевірте, що домен вказує на сервер:
/var/www/monitor і налаштувало сайт Apache (DocumentRoot на корінь панелі, PHP-FPM, AllowOverride для .htaccess). У виводі скрипта це рядок vhost … → DocumentRoot …. Окремо створювати каталог і vhost не потрібно — просто завантажте файли й виставте права.
Гілка «Сервер із хостинг-панеллю» (у виводі: Control panel detected (…)). Сайтами на такому сервері розпоряджається панель, і власний vhost скрипт не створює свідомо — його було б перезаписано під час першої ж перебудови конфігів панеллю. Порядок такий:
public_html цього домену: поруч з index.php, api/, assets/ мають лежати й службові config.php, includes/, data/, tmp/, logs/, keys/, cron/, database/. Нічого вище вебкореня виносити не потрібно: службові теки закриті файлом .htaccess з дистрибутива, а під Nginx — забороною, яку скрипт вписав у конфіг домену.config.php (крок 05). Шляхи в командах замініть на /home/акаунт/web/домен/public_html, а власника — на користувача цього домену замість www-data.Гілка «Створити vhost вручну» (у виводі: No vhost created (no domain given)). Таке буває лише на профілі «Налаштований сервер», коли домен не було передано. Найпростіше — просто перезапустити команду з кабінету, вказавши домен:
Повторний запуск безпечний: уже зроблене не дублюється. Якщо ж vhost потрібно створити руками — ось той самий конфіг, що пише інсталятор:
ServerName тут обов'язковий. Vhost без імені стає сайтом Apache за замовчуванням і починає відповідати за чужі домени на цьому ж сервері. З тієї ж причини не вимикайте 000-default.conf на налаштованому сервері: цей сайт могли переробити під чийсь робочий — на новому VPS інсталятор прибирає його сам, тут цього робити не потрібно.
! Nginx does not read .htaccess). Nginx віддає статичні файли просто з диска і .htaccess не читає — службові теки виявляться відкритими назовні, хоча Apache їх коректно закриває. Скрипт заздалегідь підготував файл із заборонами; його потрібно підключити в блоці server{} вашого сайту й перезавантажити Nginx:
my.arciveo.com → «Завантаження». Розпакуйте архів перед завантаженням на сервер.
Завантажте вміст дистрибутива у /var/www/monitor (щоб усередині опинилися public/, assets/, config.php тощо) — через SFTP/SCP (FileZilla / WinSCP) або командою scp з локального комп'ютера:
ServerName), його передають у команду автоналаштування ще на кроці 01: … | sudo bash -s -- monitor.example.com (або вказують домен у полі «Домен панелі» в кабінеті). Якщо домен не передали — панель відповідає на будь-який хост і за IP, а ServerName пропише certbot під час випуску SSL (крок 06); перевстановлювати нічого не потрібно.
root або через SFTP, файли належать root, і веб-сервер (www-data) не зможе їх прочитати — панель відкриється порожньою або з помилкою 403 (у лозі: .htaccess unreadable / directory not executable). Команда нижче це виправляє:
Відкрийте собі завантаження файлів через SFTP. Після наведеної команди всі файли належать www-data, а FileZilla / WinSCP підключаються під вашим власним користувачем — завантаження тоді завершиться помилкою SSH_FX_PERMISSION_DENIED (Permission denied). Оберіть один із двох варіантів.
Варіант A — ACL лише для вашого користувача (рекомендовано). Право запису отримуєте тільки ви; вебсервер так само не може перезаписати код панелі:
Варіант B — через групу www-data. Простіший, але право запису у файли панелі отримує й вебсервер: за наявності вразливості в PHP код можна буде підмінити. Порядок команд важливий — config.php і робочі теки закриваються останніми:
id deploy — у списку груп має з'явитися www-data; ls -ld /var/www/monitor — права drwxrwsr-x, літера s замість x означає, що setgid встановлено.
Створіть базу та користувача, потім імпортуйте схему. Блок з БД вставляється в термінал повністю (sudo mysql входить root через unix-сокет — пароль root не потрібен). monitor_db і monitor_user — імена для прикладу, можете задати будь-які свої; запам'ятайте ім'я бази, користувача та пароль — впишете їх у config.php на наступному кроці:
admin під час першого входу в браузері (з database/db.sql), якщо БД порожня.
Якщо таблиці не створилися (панель показує помилку підключення до БД або порожній екран замість форми входу) — імпортуйте схему вручну. Команда виконується в корені панелі, значення беруться з блоку вище:
$DBNAME / $DBUSER / $DBPASS уже «забулися» (нова сесія термінала) — підставте значення в команду руками або задайте їх заново тими самими трьома рядками з блоку вище.
sudo rules NOT written — визначити обліковий запис панелі не було за чим (файли ще не завантажені), і правила не створено. Без них розділи на кшталт фаєрвола, Fail2ban і CrowdSec лишатимуться порожніми. Тепер, коли файли на місці, запустіть команду з кабінету ще раз, назвавши обліковий запис явно:
www-data замініть на користувача, під яким працює PHP вашого сайту (на хостинг-панелі це зазвичай власник домену). Подивитися його можна так:
/etc/sudoers.d/monitor існує і в ньому є рядки з вашим користувачем.
config.php у корені панелі (/var/www/monitor/config.php) — єдиний файл, який потрібно редагувати вручну. Усі налаштування панелі задані в ньому константами define(). Відкрийте його в редакторі:
Підставте свої значення у підсвічені місця; решту залиште як є:
Що змінювати:
DB_NAME, DB_USER, DB_PASS — рівно ті самі ім'я бази, користувач і пароль, що ви задали під час створення БД на кроці 04 (якщо залишили приклади — monitor_db / monitor_user). DB_HOST і DB_CHARSET не чіпайте.APP_URL — повна адреса панелі з https://, без слеша в кінці та без www. Має збігатися з доменом, на який активуєте ліцензію (крок 07), інакше ключ буде відхилено.TIMEZONE — ваш часовий пояс (список — timedatectl list-timezones). Впливає лише на те, як панель показує дати; на час запуску cron-завдань не впливає (там діє пояс системи).SESSION_LIFETIME — через скільки секунд бездіяльності панель попросить увійти знову (типово 8 годин). Напр. 3600 = 1 година, 86400 = доба.display_errors, log_errors, error_log) — залиште типовим.Збережіть файл (Ctrl+O, Enter, потім Ctrl+X) і перезапустіть PHP-FPM — інакше через OPcache зміни не застосуються:
640 (виставлені на кроці 03) та явна заборона в кореневому .htaccess. Не викладайте його в публічні репозиторії та не передавайте в підтримку з реальним паролем.
http:// увійти не вдасться.
Certbot skipped — issue SSL in …). Сертифікат видається вимикачем Let's Encrypt на вебдомені в самій панелі — так його продовженням теж опікується панель.
certbot і плагін для Apache вже встановлені автоналаштуванням. DNS домену вже має вказувати на сервер (крок 02). Випуск однією командою:
Якщо панель має відкриватися ще й з www. — перелічіть обидва імені в одній команді, інакше на другій адресі браузер покаже попередження про сертифікат:
Y.<VirtualHost *:443>, налаштує перенаправлення http→https і автопродовження. Наприкінці — Successfully enabled HTTPS.
dig +short monitor.example.com повертає IP сервера і відкриті порти 80/443 (sudo ufw allow 80,443/tcp).
Після випуску: https://monitor.example.com відкривається із замком, http:// перенаправляє на https://.
Відкрийте https://monitor.example.com, увійдіть admin / useradmin та пройдіть чекліст:
ARCIVEO-… з кабінету активуйте на свій домен і вставте ключ у «Налаштування» → «Ліцензія». Докладніше.public/start_db.php, якщо він залишився: він дозволяє без авторизації повторно створити базу. Поки файл лежить у корені панелі або в public/, панель попереджає про нього червоним банером.sudo /usr/local/bin/clamav-scan.sh) сильно навантажує диск і процесор і може тривати годину й більше — на робочому сервері краще дочекатися нічного запуску о 01:30. Розділи «Диски (SMART)», «Продуктивність» та «Оновлення безпеки» наповнюються самі: кожні 30 хвилин, 5 хвилин і раз на годину відповідно.