Автоматичне встановлення

Автоматичний спосіб: один скрипт з особистого кабінету готує весь сервер (вебстек Apache + PHP, базу даних, інструменти безпеки, cron). Далі — розгорнути панель, випустити SSL і ввести ліцензію. Працює на Ubuntu/Debian: на новому VPS налаштовує все з нуля, на вже налаштованому сервері — лише додатково (профіль «Налаштований сервер», крок 01). Усі команди нижче — по порядку, просто гортайте згори донизу.

Значення-заповнювачі в командах замініть на свої: monitor.example.com — ваш домен; 203.0.113.10 — реальний IP сервера; /var/www/monitor — корінь панелі (де лежать public/, assets/, config.php); пароль БД придумайте свій.
Повний набір («Повний захист») розрахований на новий VPS. На чистій Ubuntu/Debian він налаштовує систему безпеки з нуля — Fail2ban (jail.local), root-crontab, правила UFW, конфіг Apache. Якщо сервер уже налаштований (робоча панель, сайти, пошта, власні jail'и) — обирайте профіль «Налаштований сервер»: він вносить лише додаткові зміни і не чіпає ваш фаєрвол, Fail2ban, пошту, SSH та sysctl. Виявивши хостинг-панель, скрипт перемикається на цей режим самостійно. Перед першим запуском можна ввімкнути сухий прогін (галочка в кабінеті) — він покаже, що буде зроблено, нічого не змінюючи. На робочому сервері про всяк випадок зробіть знімок (snapshot).

01. Команда автоналаштування з кабінету

Команду ви берете у своєму особистому кабінеті my.arciveo.com → розділ «Налаштування сервера» (доступний після оформлення Arcivéo Monitor). Вона прив'язана до вашого облікового запису та містить персональний токен.

Скрипт готує весь сервер: вебстек (Apache + PHP), базу даних, інструменти для SSL, повний набір засобів захисту та cron-завдання (Lynis, SMART, debsums, Logwatch, щоденний звіт, оновлення ipsum).

1) Оберіть рівень захисту (у кабінеті, перед копіюванням команди):

  • Повний захист (рекомендовано) — UFW (фаєрвол), Fail2ban, CrowdSec + bouncer, ipsum (блок-список IP), Suricata (IDS/IPS), Falco, ModSecurity + OWASP CRS (WAF), PSAD, mod_evasive (анти-DoS), AIDE (цілісність файлів), debsums, ClamAV + maldet (антивірус), Auditd, AppArmor, Monit, Lynis (аудит), Logwatch, автооновлення безпеки.
  • Полегшений — для VPS з малим обсягом ОЗП: базовий набір без важких компонентів.
  • Налаштований сервер (хостинг-панель) — для вже працюючого сервера з панеллю (HestiaCP тощо), сайтами та поштою: лише адитивні зміни (доустановлення інструментів, cron, sudo-правила), а фаєрвол, Fail2ban, пошта, SSH і sysctl лишаються як є. На сервері з панеллю скрипт обирає цей режим сам.
Сухий прогін. У кабінеті можна поставити галочку «Сухий прогін» — тоді команда лише покаже, що скрипт установить і змінить, і завершиться, нічого не чіпаючи. Корисно на вже налаштованому сервері: спершу прогін, потім реальний запуск без галочки.

2) Виконайте на сервері під root команду з кабінету — вона має такий вигляд:

curl -fsSL "https://my.arciveo.com/install.php?token=YOUR_TOKEN" | sudo bash
Команду тримайте в секреті — вона прив'язана до вашого облікового запису. Посилання має обмежений термін дії; якщо воно застаріло, натисніть у кабінеті «Отримати нове посилання».
Після автоналаштування вебсервер — Apache + PHP-FPM, а інструменти безпеки та cron-завдання вже встановлені й працюють «з коробки» — нічого додатково налаштовувати не потрібно.

02. Домен і DNS

Щоб відкривати панель за адресою на кшталт monitor.example.com та отримати безкоштовний SSL, домен має вказувати на сервер. У панелі керування DNS (у реєстратора чи хостера) створіть A-запис:

Тип: A Ім'я: monitor (піддомен → monitor.example.com) або @ (корінь домену → example.com) Значення: 203.0.113.10 ← IP вашого сервера TTL: 3600

За кілька хвилин (іноді до години) перевірте, що домен вказує на сервер:

dig +short monitor.example.com # має повернути ваш IP # або, якщо dig немає: getent hosts monitor.example.com
SSL-сертифікат (крок 06) видається лише на домен — тому DNS має вказувати на сервер до випуску сертифіката.

03. Завантажити файли панелі

Автоналаштування вже створило каталог панелі /var/www/monitor і налаштувало сайт Apache (DocumentRoot на корінь панелі, PHP-FPM, AllowOverride для .htaccess). Окремо створювати каталог і vhost не потрібно — просто завантажте файли й виставте права.
Файли панелі (архів дистрибутива) завантажуються після покупки в кабінеті my.arciveo.com«Завантаження». Розпакуйте архів перед завантаженням на сервер.

Завантажте вміст дистрибутива у /var/www/monitor (щоб усередині опинилися public/, assets/, config.php тощо) — через SFTP/SCP (FileZilla / WinSCP) або командою scp з локального комп'ютера:

scp -r ./monitor/* deploy@203.0.113.10:/var/www/monitor/
Щоб у vhost одразу прописався ваш домен (ServerName), його передають у команду автоналаштування ще на кроці 01: … | sudo bash -s -- monitor.example.com (або вказують домен у полі «Домен панелі» в кабінеті). Якщо домен не передали — панель відповідає на будь-який хост і за IP, а ServerName пропише certbot під час випуску SSL (крок 06); перевстановлювати нічого не потрібно.
Виставте права на файли — це обов'язковий крок. Якщо завантажували під root або через SFTP, файли належать root, і веб-сервер (www-data) не зможе їх прочитати — панель відкриється порожньою або з помилкою 403 (у лозі: .htaccess unreadable / directory not executable). Команда нижче це виправляє:
# Нормалізуємо права всього вебрута: каталог, створений root, недоступний # веб-серверу (www-data) — без цього панель віддає порожню сторінку або 403. cd /var/www/monitor # Робочі папки створюємо ДО chown — інакше нові каталоги залишаться root:root # і при chmod 750 веб-сервер (www-data) не зможе в них писати. sudo mkdir -p data/lynis data/logwatch tmp logs sudo chown -R www-data:www-data /var/www/monitor sudo find /var/www/monitor -type d -exec chmod 755 {} \; sudo find /var/www/monitor -type f -exec chmod 644 {} \; sudo chmod 640 /var/www/monitor/config.php sudo chmod 750 data tmp logs

Відкрийте собі завантаження файлів через SFTP. Після наведеної команди всі файли належать www-data, а FileZilla / WinSCP підключаються під вашим власним користувачем — завантаження тоді завершиться помилкою SSH_FX_PERMISSION_DENIED (Permission denied). Оберіть один із двох варіантів.

Варіант A — ACL лише для вашого користувача (рекомендовано). Право запису отримуєте тільки ви; вебсервер так само не може перезаписати код панелі:

sudo apt install -y acl # Право запису вашому користувачеві на весь каталог панелі: sudo setfacl -R -m u:deploy:rwX /var/www/monitor # Те саме правило за замовчуванням — для файлів і тек, створених пізніше: sudo setfacl -R -d -m u:deploy:rwX /var/www/monitor

Варіант B — через групу www-data. Простіший, але право запису у файли панелі отримує й вебсервер: за наявності вразливості в PHP код можна буде підмінити. Порядок команд важливий — config.php і робочі теки закриваються останніми:

sudo usermod -aG www-data deploy # Запис для групи + setgid (біт 2): файли, завантажені через SFTP, лишаються # у групі www-data — інакше панель не зможе їх перезаписати. sudo find /var/www/monitor -type d -exec chmod 2775 {} \; sudo find /var/www/monitor -type f -exec chmod 664 {} \; sudo chmod 640 /var/www/monitor/config.php sudo chmod 2750 /var/www/monitor/data /var/www/monitor/tmp /var/www/monitor/logs
Після варіанта B перепідключіться у FileZilla (Сервер → Відключитися, потім увійти знову) — нова група застосовується лише при новому вході, до того прав усе одно не буде. Перевірка: id deploy — у списку груп має з'явитися www-data; ls -ld /var/www/monitor — права drwxrwsr-x, літера s замість x означає, що setgid встановлено.

04. База даних

Створіть базу та користувача, потім імпортуйте схему. Блок з БД вставляється в термінал повністю (sudo mysql входить root через unix-сокет — пароль root не потрібен). monitor_db і monitor_user — імена для прикладу, можете задати будь-які свої; запам'ятайте ім'я бази, користувача та пароль — впишете їх у config.php на наступному кроці:

# 1. База даних. Пароль задається ОДИН раз у DBPASS і підставляється в усі рядки. # Блок вставляється в термінал ПОВНІСТЮ; sudo mysql входить root через unix-сокет # (пароль root не потрібен). НЕ використовуйте інтерактивний `sudo mysql -u root -p` # з копіпастом — під час вставки SQL-рядки підуть у запит пароля і зникнуть. DBPASS='CHOOSE_A_PASSWORD' # ← змініть лише цей рядок sudo mysql <<SQL CREATE DATABASE IF NOT EXISTS monitor_db CHARACTER SET utf8mb4; CREATE USER IF NOT EXISTS 'monitor_user'@'localhost' IDENTIFIED BY '$DBPASS'; GRANT ALL ON monitor_db.* TO 'monitor_user'@'localhost'; FLUSH PRIVILEGES; SQL # Перевірка (має показати monitor_db): mysql -u monitor_user -p"$DBPASS" -e "SHOW DATABASES;" # Цей самий пароль впишіть у config.php → DB_PASS.
Схему імпортувати не потрібно — панель сама створює таблиці й обліковий запис admin під час першого входу в браузері (з database/db.sql), якщо БД порожня.
sudo для вебсервера автоналаштування вже задало — модулі бачать системні дані одразу. Окремо налаштовувати sudo потрібно, лише якщо PHP працює під нестандартним користувачем (не www-data).

05. Налаштування config.php

config.php у корені панелі (/var/www/monitor/config.php) — єдиний файл, який потрібно редагувати вручну. Усі налаштування панелі задані в ньому константами define(). Відкрийте його в редакторі:

sudo nano /var/www/monitor/config.php

Підставте свої значення у підсвічені місця; решту залиште як є:

// --- База даних (з кроку 04) --- define('DB_HOST', 'localhost'); // залишити define('DB_NAME', 'db_name'); // що створили на кроці 04 define('DB_USER', 'user'); // що створили на кроці 04 define('DB_PASS', 'db_password'); // що задали на кроці 04 define('DB_CHARSET', 'utf8mb4'); // залишити // --- Застосунок --- define('APP_URL', 'https://monitor.example.com'); // адреса панелі, без слеша в кінці define('TIMEZONE', 'Europe/Kyiv'); // ваш часовий пояс // --- Час сесії --- define('SESSION_LIFETIME', 28800); // простій до повторного входу, сек (28800 = 8 год)

Що змінювати:

  • 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 зміни не застосуються:

sudo systemctl restart php*-fpm
config.php — секретний файл (у ньому пароль БД). Він лежить у корені панелі, який і є вебкоренем, але закритий: права 640 (виставлені на кроці 03) та явна заборона в кореневому .htaccess. Не викладайте його в публічні репозиторії та не передавайте в підтримку з реальним паролем.
Детальний розбір усіх параметрів — у FAQ: «Файл config.php — усі налаштування панелі».

06. Випуск SSL (HTTPS)

Панель працює лише через HTTPS. Сесія входу використовує захищений cookie, а WebAuthn (2FA) за стандартом працює тільки на HTTPS. Через http:// увійти не вдасться.

certbot і плагін для Apache вже встановлені автоналаштуванням. DNS домену вже має вказувати на сервер (крок 02). Випуск однією командою:

sudo certbot --apache -d monitor.example.com
Що запитає certbot:
  1. Enter email address — ваш e-mail (туди надійдуть сповіщення про закінчення сертифіката).
  2. Terms of Service … (Y)es/(N)oY.
  3. Share email with the EFF … (Y)es/(N)o — на ваш розсуд.
Далі certbot сам випустить сертифікат, пропише <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://.

07. Вхід і початкове налаштування

Відкрийте https://monitor.example.com, увійдіть admin / useradmin та пройдіть чекліст:

  1. Змінити пароль admin — розділ «Користувачі» в меню.
  2. Увімкнути WebAuthn (2FA) — «Ключі WebAuthn» → зареєструвати ключ/passkey (потрібен HTTPS). Зареєструйте одразу два: у разі втрати єдиного ключа вхід за ним буде неможливий. Докладніше.
  3. Обмежити доступ за IP — «Налаштування» → «Обмеження доступу за IP» (впишіть свою IP-адресу перед увімкненням, інакше закриєте собі доступ).
  4. Ввести ліцензію — код активації ARCIVEO-… з кабінету активуйте на свій домен і вставте ключ у «Налаштування» → «Ліцензія». Докладніше.
  5. Налаштувати сповіщення — Telegram та/або Email у «Налаштуваннях». Докладніше.
  6. Видалити інсталятор public/start_db.php, якщо він залишився: він дозволяє без авторизації повторно створити базу. Поки файл лежить у корені панелі або в public/, панель попереджає про нього червоним банером.
Готово. Інструменти безпеки вже працюють — дашборд одразу покаже їхній статус і Оцінку безпеки. Довідник за кожним інструментом — у FAQ.
Arcivéo - Security Monitor © 2026