Instalare automată

Metoda automată: un singur script din contul personal pregătește întregul server (stiva web Apache + PHP, baza de date, instrumentele de securitate, cron). Apoi — desfășurați panoul, emiteți SSL și introduceți licența. Funcționează pe Ubuntu/Debian: pe un VPS nou configurează totul de la zero, pe un server deja configurat — doar aditiv (profilul „Server configurat”, pasul 01). Toate comenzile de mai jos sunt în ordine, doar derulați de sus în jos.

Valorile de tip substituent din comenzi înlocuiți-le cu ale dumneavoastră: monitor.example.com — domeniul dumneavoastră; 203.0.113.10 — IP-ul real al serverului; /var/www/monitor — rădăcina panoului (unde se află public/, assets/, config.php); parola pentru baza de date alegeți-o dumneavoastră.
Setul complet („Protecție completă”) este destinat unui VPS nou. Pe o instalare curată de Ubuntu/Debian configurează sistemul de securitate de la zero — Fail2ban (jail.local), root-crontab, reguli UFW, configurația Apache. Dacă serverul este deja configurat (panou funcțional, site-uri, poștă, jail-uri proprii) — alegeți profilul „Server configurat”: acesta aduce doar modificări aditive și nu vă atinge firewallul, Fail2ban, poșta, SSH și sysctl. La detectarea unui panou de hosting, scriptul comută singur pe acest mod. Înainte de prima rulare puteți activa rularea în gol (bifă în cont) — vă va arăta ce se va face, fără a modifica nimic. Pe un server de producție faceți, pentru orice eventualitate, un instantaneu (snapshot).

01. Comanda de configurare automată din cont

Comanda o luați din contul dumneavoastră personal my.arciveo.com → secțiunea „Configurare server” (disponibilă după activarea Arcivéo Monitor). Ea este legată de contul dumneavoastră și conține un token personal.

Scriptul pregătește întregul server: stiva web (Apache + PHP), baza de date, instrumentele pentru SSL, setul complet de mijloace de protecție și sarcinile cron (Lynis, SMART, debsums, Logwatch, raport zilnic, actualizare ipsum).

1) Alegeți nivelul de protecție (în cont, înainte de a copia comanda):

  • Protecție completă (recomandat) — UFW (firewall), Fail2ban, CrowdSec + bouncer, ipsum (listă de blocare IP), Suricata (IDS/IPS), Falco, ModSecurity + OWASP CRS (WAF), PSAD, mod_evasive (anti-DoS), AIDE (integritatea fișierelor), debsums, ClamAV + maldet (antivirus), Auditd, AppArmor, Monit, Lynis (audit), Logwatch, actualizări de securitate automate.
  • Ușurată — pentru VPS cu volum mic de RAM: setul de bază fără componente grele.
  • Server configurat (panou de hosting) — pentru un server deja funcțional cu panou (HestiaCP etc.), site-uri și e-mail: doar modificări aditive (instalarea suplimentară de instrumente, cron, reguli sudo), iar firewall-ul, Fail2ban, e-mailul, SSH și sysctl rămân neschimbate. Pe un server cu panou scriptul alege singur acest mod.
Rulare de probă. În cont puteți bifa „Rulare de probă” — atunci comanda doar arată ce va instala și modifica scriptul și se încheie fără să atingă nimic. Utilă pe un server deja configurat: mai întâi proba, apoi rularea reală fără bifă.

2) Executați pe server ca root comanda din cont — ea arată astfel:

curl -fsSL "https://my.arciveo.com/install.php?token=YOUR_TOKEN" | sudo bash
Comanda țineți-o secretă — este legată de contul dumneavoastră. Link-ul are o durată de valabilitate limitată; dacă a expirat, apăsați în cont „Obține un link nou”.
După configurarea automată serverul web este Apache + PHP-FPM, iar instrumentele de securitate și sarcinile cron sunt deja instalate și funcționează „din start” — nu trebuie configurat nimic suplimentar.

02. Domeniu și DNS

Pentru a deschide panoul la o adresă de tipul monitor.example.com și pentru a obține un SSL gratuit, domeniul trebuie să indice către server. În panoul de gestiune DNS (la registrator sau la găzduire) creați o înregistrare A:

Tip: A Nume: monitor (subdomeniu → monitor.example.com) sau @ (rădăcina domeniului → example.com) Valoare: 203.0.113.10 ← IP-ul serverului dvs. TTL: 3600

După câteva minute (uneori până la o oră), verificați că domeniul indică către server:

dig +short monitor.example.com # trebuie să returneze IP-ul dvs. # sau, dacă nu există dig: getent hosts monitor.example.com
Certificatul SSL (pasul 06) se emite doar pentru un domeniu — de aceea DNS-ul trebuie să indice către server înainte de emiterea certificatului.

03. Încărcați fișierele panoului

Configurarea automată a creat deja directorul panoului /var/www/monitor și a configurat site-ul Apache (DocumentRoot spre rădăcina panoului, PHP-FPM, AllowOverride pentru .htaccess). Nu trebuie să creați separat directorul și vhost-ul — pur și simplu încărcați fișierele și setați permisiunile.
Fișierele panoului (arhiva distribuției) se descarcă după cumpărare din contul my.arciveo.com„Descărcări”. Dezarhivați arhiva înainte de a o încărca pe server.

Încărcați conținutul distribuției în /var/www/monitor (astfel încât înăuntru să ajungă public/, assets/, config.php etc.) — prin SFTP/SCP (FileZilla / WinSCP) sau cu comanda scp de pe computerul local:

scp -r ./monitor/* deploy@203.0.113.10:/var/www/monitor/
Pentru ca în vhost să fie înscris imediat domeniul dumneavoastră (ServerName), acesta este transmis comenzii de configurare automată încă de la pasul 01: … | sudo bash -s -- monitor.example.com (sau indicați domeniul în câmpul „Domeniul panoului” din cont). Dacă domeniul nu a fost transmis — panoul răspunde la orice host și după IP, iar ServerName îl va înscrie certbot la emiterea SSL (pasul 06); nu trebuie să reinstalați nimic.
Setați permisiunile pe fișiere — este un pas obligatoriu. Dacă ați încărcat sub root sau prin SFTP, fișierele aparțin lui root, iar serverul web (www-data) nu le va putea citi — panoul se va deschide gol sau cu eroarea 403 (în jurnal: .htaccess unreadable / directory not executable). Comanda de mai jos rezolvă asta:
# Normalizăm permisiunile întregului webroot: directorul creat de root este inaccesibil # serverului web (www-data) — fără asta panoul returnează o pagină goală sau 403. cd /var/www/monitor # Creăm folderele de lucru ÎNAINTE de chown — altfel directoarele noi rămân root:root # și la chmod 750 serverul web (www-data) nu va putea scrie în ele. 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

Deschideți-vă încărcarea fișierelor prin SFTP. După comanda de mai sus toate fișierele aparțin lui www-data, în timp ce FileZilla / WinSCP se conectează cu utilizatorul dumneavoastră — încărcarea va eșua atunci cu SSH_FX_PERMISSION_DENIED (Permission denied). Alegeți una dintre cele două variante.

Varianta A — o ACL doar pentru utilizatorul dumneavoastră (recomandat). Dreptul de scriere îl primiți numai dumneavoastră; serverul web tot nu poate rescrie codul panoului:

sudo apt install -y acl # Drept de scriere pentru utilizatorul dumneavoastră pe tot directorul panoului: sudo setfacl -R -m u:deploy:rwX /var/www/monitor # Aceeași regulă ca implicită — pentru fișierele și folderele create ulterior: sudo setfacl -R -d -m u:deploy:rwX /var/www/monitor

Varianta B — prin grupul www-data. Mai simplă, dar dreptul de scriere asupra fișierelor panoului îl primește și serverul web: la o vulnerabilitate în PHP codul ar putea fi înlocuit. Ordinea comenzilor contează — config.php și folderele de lucru se închid la final:

sudo usermod -aG www-data deploy # Scriere pentru grup + setgid (bitul 2): fișierele încărcate prin SFTP rămân # în grupul www-data — altfel panoul nu le va putea rescrie. 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
După varianta B reconectați-vă în FileZilla (Server → Deconectare, apoi autentificați-vă din nou) — grupul nou se aplică abia la o autentificare nouă, până atunci tot nu veți avea drepturi. Verificare: id deploy — în lista de grupuri trebuie să apară www-data; ls -ld /var/www/monitor — drepturi drwxrwsr-x, litera s în locul lui x înseamnă că setgid este activat.

04. Baza de date

Creați baza și utilizatorul, apoi importați schema. Blocul cu baza de date se inserează în terminal integral (sudo mysql intră ca root prin socket unix — parola root nu este necesară). monitor_db și monitor_user sunt nume de exemplu, puteți alege oricare doriți; rețineți numele bazei, utilizatorul și parola — le veți introduce în config.php la pasul următor:

# 1. Baza de date. Parola se setează O SINGURĂ dată în DBPASS și se introduce în toate liniile. # Blocul se inserează în terminal INTEGRAL; sudo mysql intră ca root prin socket unix # (parola root nu este necesară). NU folosiți `sudo mysql -u root -p` interactiv # cu copy-paste — la inserare liniile SQL vor ajunge în prompturile de parolă și se vor pierde. DBPASS='CHOOSE_A_PASSWORD' # ← modificați doar această linie 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 # Verificare (trebuie să afișeze monitor_db): mysql -u monitor_user -p"$DBPASS" -e "SHOW DATABASES;" # Aceeași parolă introduceți-o în config.php → DB_PASS.
Nu este nevoie să importați schema — panoul creează singur tabelele și contul admin la prima accesare din browser (din database/db.sql), dacă baza de date este goală.
sudo pentru serverul web a fost deja configurat automat — modulele văd imediat datele de sistem. Configurarea separată a sudo este necesară doar dacă PHP rulează sub un utilizator nestandard (nu www-data).

05. Configurarea config.php

config.php din rădăcina panoului (/var/www/monitor/config.php) este singurul fișier care trebuie editat manual. Toate setările panoului sunt definite în el prin constante define(). Deschideți-l în editor:

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

Introduceți valorile dumneavoastră în locurile evidențiate; restul lăsați-l așa cum este:

// --- Baza de date (din pasul 04) --- define('DB_HOST', 'localhost'); // se lasă define('DB_NAME', 'db_name'); // ce ați creat la pasul 04 define('DB_USER', 'user'); // ce ați creat la pasul 04 define('DB_PASS', 'db_password'); // ce ați setat la pasul 04 define('DB_CHARSET', 'utf8mb4'); // se lasă // --- Aplicație --- define('APP_URL', 'https://monitor.example.com'); // adresa panoului, fără slash la final define('TIMEZONE', 'Europe/Bucharest'); // fusul dumneavoastră orar // --- Durata sesiunii --- define('SESSION_LIFETIME', 28800); // inactivitate până la reautentificare, sec (28800 = 8 h)

Ce trebuie modificat:

  • DB_NAME, DB_USER, DB_PASS — exact aceleași nume de bază, utilizator și parolă pe care le-ați setat la crearea BD în pasul 04 (dacă ați păstrat exemplele — monitor_db / monitor_user). DB_HOST și DB_CHARSET nu le atingeți.
  • APP_URL — adresa completă a panoului cu https://, fără slash la final și fără www. Trebuie să coincidă cu domeniul pe care activați licența (pasul 07), altfel cheia va fi respinsă.
  • TIMEZONE — fusul dumneavoastră orar (lista — timedatectl list-timezones). Afectează doar modul în care panoul afișează datele; asupra momentului de rulare a sarcinilor cron nu influențează (acolo se aplică fusul sistemului).
  • SESSION_LIFETIME — după câte secunde de inactivitate panoul va cere reautentificarea (implicit 8 ore). De ex. 3600 = 1 oră, 86400 = o zi.
  • Blocul de jurnalizare a erorilor (display_errors, log_errors, error_log) — lăsați-l implicit.

Salvați fișierul (Ctrl+O, Enter, apoi Ctrl+X) și reporniți PHP-FPM — altfel, din cauza OPcache, modificările nu se vor aplica:

sudo systemctl restart php*-fpm
config.php — fișier secret (conține parola BD). Se află în rădăcina panoului, care este chiar rădăcina web, dar este protejat: drepturi 640 (setate la pasul 03) și interdicție explicită în .htaccess-ul din rădăcină. Nu-l publicați în depozite publice și nu-l trimiteți la suport cu parola reală.
Analiza detaliată a tuturor parametrilor — în FAQ: „Fișierul config.php — toate setările panoului”.

06. Emiterea SSL (HTTPS)

Panoul funcționează doar prin HTTPS. Sesiunea de autentificare folosește un cookie securizat, iar WebAuthn (2FA) funcționează conform standardului doar pe HTTPS. Prin http:// nu vă veți putea autentifica.

certbot și pluginul pentru Apache sunt deja instalate prin autoconfigurare. DNS-ul domeniului trebuie deja să indice către server (pasul 02). Emitere printr-o singură comandă:

sudo certbot --apache -d monitor.example.com
Ce va întreba certbot:
  1. Enter email address — e-mailul dumneavoastră (acolo vor sosi notificările despre expirarea certificatului).
  2. Terms of Service … (Y)es/(N)oY.
  3. Share email with the EFF … (Y)es/(N)o — la alegerea dumneavoastră.
Mai departe, certbot va emite singur certificatul, va înscrie <VirtualHost *:443>, va configura redirecționarea http→https și reînnoirea automată. La final — Successfully enabled HTTPS.
Dacă emiterea eșuează — verificați că dig +short monitor.example.com returnează IP-ul serverului și că porturile 80/443 sunt deschise (sudo ufw allow 80,443/tcp).

După emitere: https://monitor.example.com se deschide cu lacăt, iar http:// redirecționează către https://.

07. Autentificare și configurare inițială

Deschideți https://monitor.example.com, autentificați-vă cu admin / useradmin și parcurgeți lista de verificare:

  1. Schimbați parola admin — secțiunea „Utilizatori” din meniu.
  2. Activați WebAuthn (2FA) — „Chei WebAuthn” → înregistrați o cheie/passkey (necesită HTTPS). Înregistrați imediat două: la pierderea singurei chei, autentificarea cu ea va fi imposibilă. Detalii.
  3. Restricționați accesul după IP — „Setări” → „Restricționarea accesului după IP” (introduceți-vă propriul IP înainte de activare, altfel vă blocați accesul).
  4. Introduceți licența — activați codul ARCIVEO-… din cont pe domeniul dumneavoastră și inserați cheia în „Setări” → „Licență”. Detalii.
  5. Configurați notificările — Telegram și/sau Email în „Setări”. Detalii.
  6. Ștergeți programul de instalare public/start_db.php, dacă a rămas: permite recrearea bazei fără autentificare. Cât timp fișierul se află în rădăcina panoului sau în public/, panoul avertizează despre el printr-un banner roșu.
Gata. Instrumentele de securitate funcționează deja — panoul le afișează imediat statusul și Scorul de securitate. Ghidul pentru fiecare instrument se află în FAQ.
Arcivéo - Security Monitor © 2026