Αυτόματη εγκατάσταση

Αυτόματος τρόπος: ένα script από τον λογαριασμό προετοιμάζει ολόκληρο τον διακομιστή (στοίβα web Apache + PHP, βάση δεδομένων, εργαλεία ασφαλείας, cron). Στη συνέχεια — ανάπτυξη του dashboard, έκδοση SSL και εισαγωγή της άδειας. Λειτουργεί σε Ubuntu/Debian: σε νέο VPS ρυθμίζει τα πάντα από την αρχή, σε ήδη ρυθμισμένο διακομιστή — μόνο προσθετικά (προφίλ «Ρυθμισμένος διακομιστής», βήμα 01). Όλες οι εντολές παρακάτω είναι με τη σειρά, απλώς κυλήστε από πάνω προς τα κάτω. Σε νέο VPS ταιριάζει κάθε βήμα με τη σειρά· αν ο διακομιστής είναι ήδη ρυθμισμένος ή έχει πάνελ φιλοξενίας, μέρος της δουλειάς το script το αφήνει σκόπιμα σε εσάς — τι ακριβώς, το γράφει στο τέλος της εκτέλεσής του (ανάλυση της εξόδου — στο βήμα 01).

Τις τιμές-κράτησης θέσης στις εντολές αντικαταστήστε με τις δικές σας: monitor.example.com — ο τομέας σας· 203.0.113.10 — η πραγματική IP του διακομιστή· /var/www/monitor — η ρίζα του dashboard (όπου βρίσκονται τα public/, assets/, config.php)· τον κωδικό της ΒΔ ορίστε τον δικό σας.
Το πλήρες πακέτο («Πλήρης προστασία») προορίζεται για νέο VPS. Σε καθαρό Ubuntu/Debian ρυθμίζει το σύστημα ασφαλείας από την αρχή — Fail2ban (jail.local), root-crontab, κανόνες UFW, ρυθμίσεις Apache. Αν ο διακομιστής είναι ήδη ρυθμισμένος (λειτουργικό dashboard, ιστότοποι, email, δικά σας jail) — επιλέξτε το προφίλ «Ρυθμισμένος διακομιστής»: κάνει μόνο προσθετικές αλλαγές και δεν αγγίζει το firewall, το Fail2ban, το email, το SSH και το sysctl σας. Όταν εντοπίσει hosting panel, το script μεταβαίνει μόνο του σε αυτή τη λειτουργία. Πριν την πρώτη εκτέλεση μπορείτε να ενεργοποιήσετε το dry run (επιλογή στον λογαριασμό) — δείχνει τι θα γίνει, χωρίς να αλλάζει τίποτα. Σε λειτουργικό διακομιστή, για κάθε ενδεχόμενο, δημιουργήστε ένα snapshot.

01. Εντολή αυτόματης ρύθμισης από τον λογαριασμό

Την εντολή τη λαμβάνετε στον λογαριασμό σας my.arciveo.com → ενότητα «Ρύθμιση διακομιστή» (διαθέσιμη μετά την απόκτηση του Arcivéo Security Monitor). Είναι συνδεδεμένη με τον λογαριασμό σας και περιέχει προσωπικό token.

Το script προετοιμάζει ολόκληρο τον διακομιστή: web-stack (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 (anti-DoS), AIDE (ακεραιότητα αρχείων), debsums, ClamAV + maldet (antivirus), Auditd, AppArmor, Monit, Lynis (έλεγχος), Logwatch, αυτόματες ενημερώσεις ασφαλείας.
  • Ελαφριά — για VPS με λίγη RAM: βασικό σύνολο χωρίς βαριά στοιχεία.
  • Ρυθμισμένος διακομιστής (πάνελ φιλοξενίας) — για διακομιστή που ήδη λειτουργεί με πάνελ (HestiaCP κ.λπ.), ιστότοπους και email: μόνο προσθετικές αλλαγές (εγκατάσταση εργαλείων, cron, κανόνες sudo), ενώ το τείχος προστασίας, το Fail2ban, το email, το SSH και το sysctl παραμένουν ως έχουν. Σε διακομιστή με πάνελ το script επιλέγει μόνο του αυτή τη λειτουργία.
Δοκιμαστική εκτέλεση. Στον λογαριασμό μπορείτε να επιλέξετε «Δοκιμαστική εκτέλεση» — τότε η εντολή θα δείξει μόνο τι θα εγκαταστήσει και θα αλλάξει το script και θα τερματίσει, χωρίς να αγγίξει τίποτα. Χρήσιμο σε ήδη ρυθμισμένο διακομιστή: πρώτα δοκιμή, μετά πραγματική εκτέλεση χωρίς την επιλογή.

2) Εκτελέστε στον διακομιστή ως root την εντολή από τον λογαριασμό — έχει την εξής μορφή:

curl -fsSL "https://my.arciveo.com/install.php?token=YOUR_TOKEN" | sudo bash
Την εντολή κρατήστε την μυστική — είναι συνδεδεμένη με τον λογαριασμό σας. Ο σύνδεσμος έχει περιορισμένη διάρκεια ισχύος· αν έχει λήξει, πατήστε στον λογαριασμό «Λήψη νέου συνδέσμου».
Μετά την αυτόματη ρύθμιση, ο web-διακομιστής είναι Apache + PHP-FPM, ενώ τα εργαλεία ασφαλείας και οι cron-εργασίες είναι ήδη εγκατεστημένα και λειτουργούν «out of the box».

3) Διαβάστε την έξοδο στο τέλος — εκεί αναφέρεται τι μένει σε εσάς. Το script ολοκληρώνει την εργασία του με ένα μπλοκ ελέγχων και μια λίστα «Στη συνέχεια — εγκατάσταση του πίνακα». Μέρος των βημάτων σκόπιμα δεν το εκτελεί: τι ακριβώς, εξαρτάται από το προφίλ που επιλέξατε και από όσα βρήκε στον διακομιστή. Συγκρίνετε με τη λίστα παρακάτω — χρειάζεται να εκτελέσετε μόνο τα σημεία των οποίων οι γραμμές εμφανίστηκαν στη δική σας έξοδο.

  • Control panel detected (…) — ο ιστότοπος δημιουργείται με τα μέσα του ίδιου του πάνελ φιλοξενίας, vhost το script δεν φτιάχνει. Βήμα 03, κλάδος «Διακομιστής με πάνελ φιλοξενίας».
  • No vhost created (no domain given) — προφίλ «Ρυθμισμένος διακομιστής» χωρίς τομέα: ένα vhost χωρίς όνομα θα γινόταν ο προεπιλεγμένος ιστότοπος και θα άρπαζε τους δικούς σας ιστότοπους, γι' αυτό δεν δημιουργήθηκε. Βήμα 03, κλάδος «Δημιουργία vhost χειροκίνητα».
  • sudo rules NOT written — το script δεν μπόρεσε να προσδιορίσει με ποιον λογαριασμό λειτουργεί το πάνελ. Αυτό είναι συνηθισμένη κατάσταση: τα αρχεία του πάνελ ανεβαίνουν μετά την αυτόματη ρύθμιση, οπότε δεν υπήρχε ακόμη από τι να προσδιοριστεί. Χωρίς αυτούς τους κανόνες οι μονάδες δεν θα βλέπουν τα δεδομένα του συστήματος. Βήμα 04, μπλοκ «sudo για τον web διακομιστή».
  • ! Nginx does not read .htaccess — μπροστά από τον Apache βρίσκεται Nginx και η αυτόματη καταχώριση της απαγόρευσης στη ρύθμισή του δεν πέτυχε. Κάντε το οπωσδήποτε: αλλιώς τα data/, keys/, database/ και config.php δίνονται προς τα έξω παρακάμπτοντας το .htaccess. Βήμα 03, μπλοκ «Αν μπροστά από τον Apache βρίσκεται Nginx».
  • UFW installed but inactive — το τείχος προστασίας είναι εγκατεστημένο αλλά απενεργοποιημένο: σε ρυθμισμένο διακομιστή το script δεν το ενεργοποιεί μόνο του, για να μη σας κόψει την πρόσβαση. Ενεργοποιήστε το εσείς, επιτρέποντας οπωσδήποτε τη δική σας θύρα SSH:
    sudo ufw allow OpenSSH # μη τυπική θύρα SSH: sudo ufw allow 2222/tcp sudo ufw allow 80,443/tcp sudo ufw enable
  • 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, τη διαδρομή του οποίου το script τυπώνει στο τέλος (Log: …).

02. Domain και DNS

Για να ανοίγει ο πίνακας σε διεύθυνση όπως monitor.example.com και να λάβετε δωρεάν SSL, το domain πρέπει να δείχνει στον διακομιστή. Στον πίνακα διαχείρισης DNS (στον καταχωρητή ή στον πάροχο φιλοξενίας) δημιουργήστε μια εγγραφή A:

Τύπος: A Όνομα: monitor (υποτομέας → monitor.example.com) ή @ (ρίζα domain → example.com) Τιμή: 203.0.113.10 ← IP του διακομιστή σας TTL: 3600

Μετά από λίγα λεπτά (μερικές φορές έως και μία ώρα) ελέγξτε ότι το domain δείχνει στον διακομιστή:

dig +short monitor.example.com # πρέπει να επιστρέψει το IP σας # ή, αν δεν υπάρχει dig: getent hosts monitor.example.com
Το πιστοποιητικό SSL (βήμα 06) εκδίδεται μόνο για domain — γι' αυτό το DNS πρέπει να δείχνει στον διακομιστή πριν από την έκδοση του πιστοποιητικού.

03. Ανεβάστε τα αρχεία του πίνακα

Συνηθισμένη περίπτωση (νέο VPS). Η αυτόματη ρύθμιση έχει ήδη δημιουργήσει τον κατάλογο του πίνακα /var/www/monitor και ρύθμισε τον ιστότοπο Apache (DocumentRoot στη ρίζα του πίνακα, PHP-FPM, AllowOverride για .htaccess). Στην έξοδο του script αυτό είναι η γραμμή vhost … → DocumentRoot …. Δεν χρειάζεται να δημιουργήσετε ξεχωριστά κατάλογο και vhost — απλώς ανεβάστε τα αρχεία και ορίστε τα δικαιώματα.
Δύο περιπτώσεις όπου το vhost ΔΕΝ δημιουργήθηκε — το script το αναφέρει ρητά στο τέλος της εργασίας του. Τότε εκτελέστε πρώτα τον αντίστοιχο κλάδο παρακάτω και μόνο μετά ανεβάστε τα αρχεία.

Κλάδος «Διακομιστής με πάνελ φιλοξενίας» (στην έξοδο: Control panel detected (…)). Τους ιστότοπους σε τέτοιον διακομιστή τους διαχειρίζεται το πάνελ, και δικό του vhost το script δεν δημιουργεί σκόπιμα — θα σβηνόταν με την πρώτη κιόλας ανακατασκευή των ρυθμίσεων από το πάνελ. Η σειρά είναι η εξής:

  1. Δημιουργήστε έναν web-τομέα στο πάνελ φιλοξενίας (HestiaCP κ.λπ.) — το DocumentRoot του παραμένει ως έχει.
  2. Ανεβάστε τη διανομή ολόκληρη στο public_html αυτού του τομέα: δίπλα στα index.php, api/, assets/ πρέπει να βρίσκονται και τα υπηρεσιακά config.php, includes/, data/, tmp/, logs/, keys/, cron/, database/. Δεν χρειάζεται να μεταφέρετε τίποτα πάνω από τη ρίζα του web: οι υπηρεσιακοί φάκελοι κλείνουν με το αρχείο .htaccess της διανομής, ενώ κάτω από Nginx — με την απαγόρευση που έγραψε το script στη ρύθμιση του τομέα.
  3. Το SSL εκδίδεται με τον διακόπτη Let's Encrypt μέσα στο ίδιο το πάνελ — το βήμα 06 παραλείψτε το.
  4. Στη συνέχεια — δικαιώματα (παρακάτω σε αυτό το βήμα), βάση (βήμα 04) και config.php (βήμα 05). Τις διαδρομές στις εντολές αντικαταστήστε τις με /home/λογαριασμός/web/τομέας/public_html, και τον ιδιοκτήτη — με τον χρήστη αυτού του τομέα αντί για www-data.

Κλάδος «Δημιουργία vhost χειροκίνητα» (στην έξοδο: No vhost created (no domain given)). Αυτό συμβαίνει μόνο στο προφίλ «Ρυθμισμένος διακομιστής», όταν δεν δόθηκε τομέας. Το απλούστερο είναι απλώς να ξανατρέξετε την εντολή από τον λογαριασμό, δηλώνοντας τον τομέα:

curl -fsSL "https://my.arciveo.com/install.php?token=YOUR_TOKEN&profile=existing" | sudo bash -s -- monitor.example.com

Η επανεκτέλεση είναι ασφαλής: ό,τι έχει ήδη γίνει δεν διπλασιάζεται. Αν όμως το vhost πρέπει να δημιουργηθεί με το χέρι — να η ίδια ρύθμιση που γράφει ο εγκαταστάτης:

sudo mkdir -p /var/www/monitor # Το socket του PHP-FPM το εντοπίζουμε αυτόματα — η έκδοση PHP διαφέρει ανά διακομιστή. PHPSOCK=$(ls -1 /run/php/php*-fpm.sock 2>/dev/null | head -1) sudo tee /etc/apache2/sites-available/arciveo-monitor.conf > /dev/null <<'EOF' <VirtualHost *:80> ServerName monitor.example.com DocumentRoot /var/www/monitor <Directory /var/www/monitor> Options -Indexes +FollowSymLinks AllowOverride All Require all granted </Directory> <FilesMatch "\.php$"> SetHandler "proxy:unix:__PHPSOCK__|fcgi://localhost" </FilesMatch> ErrorLog ${APACHE_LOG_DIR}/arciveo-monitor_error.log CustomLog ${APACHE_LOG_DIR}/arciveo-monitor_requests.log combined </VirtualHost> EOF sudo sed -i "s#__PHPSOCK__#${PHPSOCK}#" /etc/apache2/sites-available/arciveo-monitor.conf sudo a2ensite arciveo-monitor.conf sudo apache2ctl configtest sudo systemctl reload apache2
Το ServerName εδώ είναι υποχρεωτικό. Ένα vhost χωρίς όνομα γίνεται ο προεπιλεγμένος ιστότοπος του Apache και αρχίζει να απαντά για ξένους τομείς στον ίδιο διακομιστή. Για τον ίδιο λόγο μην απενεργοποιείτε το 000-default.conf σε ρυθμισμένο διακομιστή: αυτός ο ιστότοπος μπορεί να έχει μετατραπεί σε κάποιον λειτουργικό — σε νέο VPS ο εγκαταστάτης τον αφαιρεί μόνος του, εδώ δεν χρειάζεται να το κάνετε.
Αν μπροστά από τον Apache βρίσκεται Nginx (στην έξοδο: ! Nginx does not read .htaccess). Ο Nginx δίνει τα στατικά αρχεία απευθείας από τον δίσκο και το .htaccess δεν το διαβάζει — οι υπηρεσιακοί φάκελοι θα μείνουν ανοιχτοί προς τα έξω, παρότι ο Apache τους κλείνει σωστά. Το script έχει ετοιμάσει εκ των προτέρων ένα αρχείο με τις απαγορεύσεις· πρέπει να το συνδέσετε στο μπλοκ server{} του ιστότοπού σας και να επαναφορτώσετε τον Nginx:
include /etc/nginx/snippets/arciveo-deny.conf;
sudo nginx -t && sudo systemctl reload nginx # Έλεγχος: πρέπει να επιστρέψει 403, όχι το περιεχόμενο του αρχείου curl -sI https://monitor.example.com/config.php | head -1
Τα αρχεία του πίνακα (το αρχείο διανομής) κατεβαίνουν μετά την αγορά στον λογαριασμό 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 (ή δηλώνετε τον τομέα στο πεδίο «Τομέας πίνακα» στον λογαριασμό). Αν δεν περάσατε τομέα — ο πίνακας απαντά σε οποιονδήποτε host και μέσω IP, ενώ το ServerName θα το καταχωρήσει το certbot κατά την έκδοση SSL (βήμα 06)· δεν χρειάζεται καμία επανεγκατάσταση.
Ορίστε τα δικαιώματα των αρχείων — είναι υποχρεωτικό βήμα. Αν ανεβάσατε ως root ή μέσω SFTP, τα αρχεία ανήκουν στον root και ο διακομιστής web (www-data) δεν θα μπορεί να τα διαβάσει — ο πίνακας θα ανοίξει κενός ή με σφάλμα 403 (στο log: .htaccess unreadable / directory not executable). Η παρακάτω εντολή το διορθώνει:
# Κανονικοποιούμε τα δικαιώματα όλου του webroot: ο κατάλογος που δημιούργησε ο root είναι απροσπέλαστος # για τον διακομιστή web (www-data) — χωρίς αυτό ο πίνακας εμφανίζει κενή σελίδα ή 403. cd /var/www/monitor # Τους φακέλους εργασίας τους δημιουργούμε ΠΡΙΝ το chown — αλλιώς οι νέοι κατάλογοι θα μείνουν root:root # και με chmod 750 ο διακομιστής web (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 μόνο για τον χρήστη σας (συνιστάται). Δικαίωμα εγγραφής παίρνετε μόνο εσείς· ο διακομιστής web εξακολουθεί να μην μπορεί να αντικαταστήσει τον κώδικα του πίνακα:

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. Πιο απλή, αλλά δικαίωμα εγγραφής στα αρχεία του πίνακα αποκτά και ο διακομιστής web: με μια ευπάθεια στην PHP ο κώδικας θα μπορούσε να αντικατασταθεί. Η σειρά των εντολών έχει σημασία — το config.php και οι φάκελοι εργασίας κλείνουν τελευταίοι:

sudo usermod -aG www-data deploy # Εγγραφή για την ομάδα + setgid (το bit 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-socket — δεν χρειάζεται κωδικός root). Τα monitor_db και monitor_user είναι ενδεικτικά ονόματα, μπορείτε να ορίσετε τα δικά σας· θυμηθείτε το όνομα της βάσης, τον χρήστη και τον κωδικό — θα τα καταχωρίσετε στο config.php στο επόμενο βήμα:

# 1. Βάση δεδομένων. Το όνομα της βάσης, ο χρήστης και ο κωδικός ορίζονται ΜΙΑ φορά παρακάτω και μπαίνουν σε όλες τις γραμμές. # Το μπλοκ επικολλάται στο τερματικό ΟΛΟΚΛΗΡΟ· το sudo mysql συνδέεται ως root μέσω unix-socket # (δεν χρειάζεται κωδικός root). ΜΗΝ χρησιμοποιείτε διαδραστικό `sudo mysql -u root -p` # με copy-paste — κατά την επικόλληση οι SQL-γραμμές θα σταλούν στην ερώτηση κωδικού και θα χαθούν. DBNAME='monitor_db' # ← όνομα βάσης, μπορεί να μείνει DBUSER='monitor_user' # ← χρήστης βάσης, μπορεί να μείνει DBPASS='CHOOSE_A_PASSWORD' # ← κωδικός, βάλτε δικό σας sudo mysql <<SQL CREATE DATABASE IF NOT EXISTS $DBNAME CHARACTER SET utf8mb4; CREATE USER IF NOT EXISTS '$DBUSER'@'localhost' IDENTIFIED BY '$DBPASS'; GRANT ALL ON $DBNAME.* TO '$DBUSER'@'localhost'; FLUSH PRIVILEGES; SQL # Έλεγχος (πρέπει να εμφανίσει το $DBNAME): mysql -u "$DBUSER" -p"$DBPASS" -e "SHOW DATABASES;" # Τις ίδιες τρεις τιμές καταχωρίστε στο config.php → DB_NAME, DB_USER, DB_PASS.
Συνήθως δεν χρειάζεται εισαγωγή σχήματος — ο πίνακας δημιουργεί μόνος του τους πίνακες και τον λογαριασμό admin στην πρώτη είσοδο από τον browser (από το database/db.sql), αν η ΒΔ είναι κενή.

Αν οι πίνακες δεν δημιουργήθηκαν (ο πίνακας εμφανίζει σφάλμα σύνδεσης στη ΒΔ ή κενή οθόνη αντί για τη φόρμα εισόδου) — εισαγάγετε το σχήμα χειροκίνητα. Η εντολή εκτελείται στη ρίζα του πίνακα, οι τιμές λαμβάνονται από το παραπάνω μπλοκ:

# Εισαγωγή σχήματος: cd /var/www/monitor && mysql -u "$DBUSER" -p"$DBPASS" "$DBNAME" < database/db.sql # Έλεγχος — πρέπει να εμφανιστεί η λίστα των πινάκων: mysql -u "$DBUSER" -p"$DBPASS" "$DBNAME" -e "SHOW TABLES;"
Αν οι μεταβλητές $DBNAME / $DBUSER / $DBPASS έχουν πλέον «ξεχαστεί» (νέα συνεδρία τερματικού) — βάλτε τις τιμές στην εντολή με το χέρι ή ορίστε τις ξανά με τις ίδιες τρεις γραμμές από το παραπάνω μπλοκ.
sudo για τον web διακομιστή. Συνήθως οι κανόνες έχουν ήδη γραφτεί από την αυτόματη ρύθμιση και οι μονάδες βλέπουν αμέσως τα δεδομένα του συστήματος. Αν όμως στην έξοδο του script υπήρχε η γραμμή sudo rules NOT written — δεν υπήρχε από τι να προσδιοριστεί ο λογαριασμός του πάνελ (τα αρχεία δεν είχαν ακόμη ανέβει) και οι κανόνες δεν δημιουργήθηκαν. Χωρίς αυτούς, ενότητες όπως το τείχος προστασίας, το Fail2ban και το CrowdSec θα μείνουν κενές. Τώρα που τα αρχεία βρίσκονται στη θέση τους, εκτελέστε ξανά την εντολή από τον λογαριασμό, δηλώνοντας ρητά τον λογαριασμό:
curl -fsSL "https://my.arciveo.com/install.php?token=YOUR_TOKEN&profile=existing" | sudo ARCIVEO_USER=www-data bash -s -- monitor.example.com
Το www-data αντικαταστήστε το με τον χρήστη με τον οποίο εκτελείται η PHP του ιστότοπού σας (σε πάνελ φιλοξενίας είναι συνήθως ο ιδιοκτήτης του τομέα). Μπορείτε να τον δείτε ως εξής:
ps -o user= -C php-fpm8.3 | sort -u # βάλτε τη δική σας έκδοση # ή: ps aux | grep -m3 '[p]hp-fpm'
Έλεγχος μετά την επανεκτέλεση: το αρχείο /etc/sudoers.d/monitor υπάρχει και περιέχει γραμμές με τον χρήστη σας.

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/Athens'); // η ζώνη ώρας σας // --- Διάρκεια συνεδρίας --- 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 είναι μυστικό αρχείο (περιέχει τον κωδικό της βάσης). Βρίσκεται στη ρίζα του πίνακα, που είναι και η ρίζα του web, αλλά προστατεύεται: δικαιώματα 640 (ορίστηκαν στο βήμα 03) και ρητή απαγόρευση στο κεντρικό .htaccess. Μην το ανεβάζετε σε δημόσια αποθετήρια και μην το στέλνετε στην υποστήριξη με τον πραγματικό κωδικό.
Αναλυτική επεξήγηση όλων των παραμέτρων — στο FAQ: «Το αρχείο config.php — όλες οι ρυθμίσεις του πίνακα».

06. Έκδοση SSL (HTTPS)

Ο πίνακας λειτουργεί μόνο μέσω HTTPS. Η σύνοδος σύνδεσης χρησιμοποιεί ασφαλές cookie, ενώ το WebAuthn (2FA) εξ ορισμού λειτουργεί μόνο σε HTTPS. Μέσω http:// δεν θα μπορέσετε να συνδεθείτε.
Σε διακομιστή με πάνελ φιλοξενίας αυτό το βήμα δεν χρειάζεται (στην έξοδο του script: Certbot skipped — issue SSL in …). Το πιστοποιητικό εκδίδεται με τον διακόπτη Let's Encrypt στον web-τομέα μέσα στο ίδιο το πάνελ — έτσι και την ανανέωσή του την αναλαμβάνει το πάνελ.

Το certbot και το πρόσθετο για τον Apache έχουν ήδη εγκατασταθεί από την αυτόματη ρύθμιση. Το DNS του τομέα πρέπει ήδη να δείχνει στον διακομιστή (βήμα 02). Έκδοση με μία εντολή:

sudo certbot --apache -d monitor.example.com

Αν ο πίνακας πρέπει να ανοίγει και με www. — αναφέρετε και τα δύο ονόματα σε μία εντολή, αλλιώς στη δεύτερη διεύθυνση ο browser θα εμφανίσει προειδοποίηση για το πιστοποιητικό:

sudo certbot --apache -d monitor.example.com -d www.monitor.example.com
Το δεύτερο όνομα προσθέστε το μόνο αν υπάρχει και γι' αυτό εγγραφή A που δείχνει σε αυτόν τον διακομιστή (βήμα 02). Αλλιώς η Let's Encrypt δεν θα μπορέσει να το επαληθεύσει και δεν θα εκδώσει καθόλου το πιστοποιητικό — ούτε καν για τον κύριο τομέα.
Τι θα ρωτήσει το certbot:
  1. Enter email address — το e-mail σας (εκεί θα έρχονται οι ειδοποιήσεις λήξης του πιστοποιητικού).
  2. Terms of Service … (Y)es/(N)o — Y.
  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-… από τον λογαριασμό ενεργοποιήστε τον στον δικό σας domain και εισαγάγετε το κλειδί στις «Ρυθμίσεις» → «Άδεια». Περισσότερα.
  5. Ρύθμιση ειδοποιήσεων — Telegram ή/και Email στις «Ρυθμίσεις». Περισσότερα.
  6. Διαγραφή του εγκαταστάτη public/start_db.php, αν έχει απομείνει: επιτρέπει την αναδημιουργία της βάσης χωρίς αυθεντικοποίηση. Όσο το αρχείο βρίσκεται στη ρίζα του πίνακα ή στο public/, ο πίνακας προειδοποιεί γι' αυτό με κόκκινο μπάνερ.
  7. Εκτελέστε τους πρώτους ελέγχους χειροκίνητα — αλλιώς μέρος των ενοτήτων θα είναι κενό μέχρι τη νύχτα (δείτε το μπλοκ παρακάτω).
Γιατί ο «Έλεγχος Lynis» και το «Logwatch» είναι αρχικά κενά. Η αυτόματη ρύθμιση εγκατέστησε τα εργαλεία και δημιούργησε τις cron-εργασίες, αλλά δεν εκτέλεσε τους ίδιους τους ελέγχους — αυτοί θα τρέξουν βάσει προγράμματος: Lynis στις 03:00, Logwatch στις 06:00, debsums στις 04:30, ClamAV στις 01:30. Μέχρι τότε οι ενότητες δείχνουν ειλικρινά ότι αναφορές δεν υπάρχουν ακόμη. Για να μην περιμένετε μια ολόκληρη μέρα, τρέξτε τους μία φορά με το χέρι:
# Έλεγχος Lynis — πρώτη αναφορά (μερικά λεπτά): sudo /usr/local/bin/lynis-scan.sh # Αναφορά Logwatch για το εικοσιτετράωρο: sudo /usr/local/bin/logwatch_daily.sh # Ακεραιότητα πακέτων (debsums) — σε μεγάλο διακομιστή διαρκεί πολύ: sudo /usr/local/bin/debsums-scan.sh
Το Lynis μπορείτε να το εκτελέσετε και απευθείας από τον πίνακα — με το κουμπί «Εκτέλεση ελέγχου» στη σελίδα «Έλεγχος Lynis»: εκτελεί το ίδιο script στο παρασκήνιο και ενημερώνει μόνο του την αναφορά. Στη συνέχεια όλα προχωρούν βάσει προγράμματος, χειροκίνητη εκτέλεση δεν χρειάζεται πια.
Η πρώτη σάρωση antivirus (sudo /usr/local/bin/clamav-scan.sh) επιβαρύνει έντονα τον δίσκο και τον επεξεργαστή και μπορεί να διαρκέσει μία ώρα και περισσότερο — σε λειτουργικό διακομιστή είναι προτιμότερο να περιμένετε τη νυχτερινή εκτέλεση στις 01:30. Οι ενότητες «Δίσκοι (SMART)», «Απόδοση» και «Ενημερώσεις ασφαλείας» γεμίζουν μόνες τους: κάθε 30 λεπτά, 5 λεπτά και μία φορά την ώρα αντίστοιχα.
Έτοιμο. Οδηγός για κάθε εργαλείο στο FAQ.
Χρειάζεστε σε αυτόν τον διακομιστή ακόμη έναν ιστότοπο με δικό του domain — δείτε το FAQ: «Δεύτερος ιστότοπος σε αυτόν τον διακομιστή (ακόμη ένα domain)».