Metoda automatyczna: jeden skrypt z panelu klienta przygotowuje cały serwer (stos WWW Apache + PHP, bazę danych, narzędzia bezpieczeństwa, cron). Następnie — wdrożenie panelu, wystawienie certyfikatu SSL i wprowadzenie licencji. Działa na Ubuntu/Debian: na świeżym VPS konfiguruje wszystko od zera, a na już skonfigurowanym serwerze — wyłącznie addytywnie (profil „Skonfigurowany serwer”, krok 01). Wszystkie poniższe polecenia są uporządkowane, wystarczy przewijać od góry do dołu. Na świeżym VPS pasuje każdy krok po kolei; jeśli serwer jest już skonfigurowany lub działa na nim panel hostingowy, część pracy skrypt celowo pozostawia Panu/Pani — co dokładnie, wypisuje na końcu swojego działania (omówienie wyniku — w kroku 01).
monitor.example.com — Pana/Pani domena; 203.0.113.10 — rzeczywisty adres IP serwera; /var/www/monitor — katalog główny panelu (gdzie znajdują się public/, assets/, config.php); hasło do bazy danych wymyśl własne.
jail.local), root-crontab, reguły UFW, konfigurację Apache. Jeśli serwer jest już skonfigurowany (działający panel, strony, poczta, własne jaile) — wybierz profil „Skonfigurowany serwer”: wprowadza on tylko zmiany addytywne i nie narusza Pana/Pani zapory, Fail2ban, poczty, SSH ani sysctl. Po wykryciu panelu hostingowego skrypt sam przełącza się na ten tryb. Przed pierwszym uruchomieniem można włączyć przebieg próbny (opcja w panelu) — pokaże, co zostanie wykonane, nie zmieniając niczego. Na działającym serwerze na wszelki wypadek wykonaj migawkę (snapshot).
my.arciveo.com → sekcja „Konfiguracja serwera” (dostępna po wykupieniu Arcivéo Security Monitor). Jest ono powiązane z Pana/Pani kontem i zawiera osobisty token.
Skrypt przygotowuje cały serwer: stos WWW (Apache + PHP), bazę danych, narzędzia do SSL, pełny zestaw środków ochrony oraz zadania cron (Lynis, SMART, debsums, Logwatch, codzienny raport, aktualizacja ipsum).
1) Wybierz poziom ochrony (w panelu, przed skopiowaniem polecenia):
2) Wykonaj na serwerze jako root polecenie z panelu — wygląda ono tak:
3) Proszę przeczytać wynik na końcu — tam napisano, co pozostaje po Pana/Pani stronie. Skrypt kończy pracę blokiem kontrolnym i listą „Dalej — instalacja panelu”. Części kroków celowo nie wykonuje: co dokładnie, zależy od wybranego profilu i od tego, co znalazł na serwerze. Proszę porównać z poniższą listą — wykonać należy tylko te punkty, których wiersze pojawiły się w Pana/Pani wyniku.
Control panel detected (…) — witryna tworzona jest środkami samego panelu hostingowego, skrypt nie zakłada vhosta. Krok 03, gałąź „Serwer z panelem hostingowym”.No vhost created (no domain given) — profil „Skonfigurowany serwer” bez domeny: vhost bez nazwy stałby się witryną domyślną i przechwytywałby Pana/Pani własne witryny, dlatego nie został utworzony. Krok 03, gałąź „Utworzyć vhost ręcznie”.sudo rules NOT written — skrypt nie zdołał ustalić, na jakim koncie działa panel. To zwykła sytuacja: pliki panelu wgrywa się dopiero po automatycznej konfiguracji, więc nie było jeszcze na czym się oprzeć. Bez tych reguł moduły nie zobaczą danych systemowych. Krok 04, blok „sudo dla serwera WWW”.! Nginx does not read .htaccess — przed Apache stoi Nginx, a wpisanie zakazu do jego konfiguracji nie powiodło się automatycznie. Proszę koniecznie to zrobić: inaczej data/, keys/, database/ i config.php są wydawane na zewnątrz z pominięciem .htaccess. Krok 03, blok „Jeśli przed Apache stoi Nginx”.UFW installed but inactive — zapora jest zainstalowana, ale wyłączona: na skonfigurowanym serwerze skrypt nie włącza jej sam, aby nie odciąć Panu/Pani dostępu. Proszę włączyć ją samodzielnie, koniecznie zezwalając na własny port SSH:
Fail2ban installed but not running — proszę uruchomić: sudo systemctl enable --now fail2ban.Database server present … but not running — proszę uruchomić serwer bazy przed krokiem 04: sudo systemctl enable --now mariadb (lub mysql — zależnie od tego, co jest zainstalowane).Certbot skipped — issue SSL in … — certyfikat wydaje się przełącznikiem Let's Encrypt w panelu hostingowym; krok 06 nie jest Panu/Pani potrzebny.All checks passed. Punkty ze znakiem ! wymagają uwagi; szczegóły trafiają do logu, którego ścieżkę skrypt wypisuje na samym końcu (Log: …).
Aby otwierać panel pod adresem takim jak monitor.example.com i uzyskać darmowy SSL, domena musi wskazywać na serwer. W panelu zarządzania DNS (u rejestratora lub hostingodawcy) utwórz rekord A:
Po kilku minutach (czasem do godziny) sprawdź, czy domena wskazuje na serwer:
/var/www/monitor i skonfigurowała witrynę Apache (DocumentRoot na katalog główny panelu, PHP-FPM, AllowOverride dla .htaccess). W wyniku skryptu jest to wiersz vhost … → DocumentRoot …. Nie trzeba osobno tworzyć katalogu ani vhosta — wystarczy wgrać pliki i ustawić uprawnienia.
Gałąź „Serwer z panelem hostingowym” (w wyniku: Control panel detected (…)). Witrynami na takim serwerze zarządza panel, więc własnego vhosta skrypt celowo nie tworzy — zostałby nadpisany przy pierwszej przebudowie konfiguracji przez panel. Kolejność jest następująca:
public_html tej domeny: obok index.php, api/, assets/ muszą znaleźć się także służbowe config.php, includes/, data/, tmp/, logs/, keys/, cron/, database/. Niczego nie trzeba wynosić powyżej katalogu głównego witryny: katalogi służbowe zamyka plik .htaccess z dystrybucji, a pod Nginx — zakaz, który skrypt wpisał do konfiguracji domeny.config.php (krok 05). Ścieżki w poleceniach proszę zastąpić przez /home/konto/web/domena/public_html, a właściciela — użytkownikiem tej domeny zamiast www-data.Gałąź „Utworzyć vhost ręcznie” (w wyniku: No vhost created (no domain given)). Zdarza się to tylko przy profilu „Skonfigurowany serwer”, gdy domena nie została przekazana. Najprościej jest po prostu uruchomić ponownie polecenie z panelu, podając domenę:
Ponowne uruchomienie jest bezpieczne: to, co już zrobiono, nie zostanie zdublowane. Jeśli jednak vhost trzeba utworzyć ręcznie — oto ta sama konfiguracja, którą zapisuje instalator:
ServerName jest tutaj obowiązkowy. Vhost bez nazwy staje się domyślną witryną Apache i zaczyna odpowiadać za cudze domeny na tym samym serwerze. Z tego samego powodu proszę nie wyłączać 000-default.conf na skonfigurowanym serwerze: ta witryna mogła zostać przerobiona na czyjąś produkcyjną — na świeżym VPS instalator usuwa ją sam, tutaj nie trzeba tego robić.
! Nginx does not read .htaccess). Nginx wydaje pliki statyczne wprost z dysku i nie czyta .htaccess — katalogi służbowe będą otwarte na zewnątrz, choć Apache zamyka je poprawnie. Skrypt przygotował z wyprzedzeniem plik z zakazami; trzeba go dołączyć w bloku server{} Pana/Pani witryny i przeładować Nginx:
my.arciveo.com → „Pobrania”. Rozpakuj archiwum przed wgraniem na serwer.
Wgraj zawartość dystrybucji do /var/www/monitor (aby w środku znalazły się public/, assets/, config.php itd.) — przez SFTP/SCP (FileZilla / WinSCP) lub poleceniem scp z komputera lokalnego:
ServerName), przekazuje się ją do polecenia autokonfiguracji już w kroku 01: … | sudo bash -s -- monitor.example.com (lub podaje domenę w polu „Domena panelu” w panelu klienta). Jeśli domena nie została przekazana — panel odpowiada na dowolny host oraz po IP, a ServerName zapisze certbot przy wydawaniu SSL (krok 06); nie trzeba niczego przeinstalowywać.
root lub przez SFTP, należą one do root, a serwer WWW (www-data) nie będzie mógł ich odczytać — panel otworzy się pusty lub z błędem 403 (w logu: .htaccess unreadable / directory not executable). Poniższe polecenie to naprawia:
Proszę otworzyć sobie wgrywanie plików przez SFTP. Po powyższym poleceniu wszystkie pliki należą do www-data, a FileZilla / WinSCP łączą się na własnym użytkowniku — wgrywanie zakończy się wtedy błędem SSH_FX_PERMISSION_DENIED (Permission denied). Proszę wybrać jeden z dwóch wariantów.
Wariant A — ACL tylko dla własnego użytkownika (zalecany). Prawo zapisu otrzymuje wyłącznie użytkownik; serwer WWW nadal nie może nadpisać kodu panelu:
Wariant B — przez grupę www-data. Prostszy, ale prawo zapisu do plików panelu dostaje również serwer WWW: przy podatności w PHP kod dałoby się podmienić. Kolejność poleceń ma znaczenie — config.php i katalogi robocze zamyka się na końcu:
id deploy — na liście grup musi pojawić się www-data; ls -ld /var/www/monitor — uprawnienia drwxrwsr-x, litera s zamiast x oznacza, że setgid jest ustawiony.
Proszę utworzyć bazę i użytkownika, a następnie zaimportować schemat. Blok z bazą danych wkleja się do terminala w całości (sudo mysql loguje root przez gniazdo unix — hasło root nie jest potrzebne). monitor_db i monitor_user to nazwy przykładowe, można ustawić własne; proszę zapamiętać nazwę bazy, użytkownika i hasło — trzeba je będzie wpisać w config.php w następnym kroku:
admin przy pierwszym wejściu w przeglądarce (z database/db.sql), jeśli baza jest pusta.
Jeśli tabele nie powstały (panel pokazuje błąd połączenia z bazą lub pusty ekran zamiast formularza logowania) — proszę zaimportować schemat ręcznie. Polecenie wykonuje się w katalogu głównym panelu, wartości pochodzą z bloku powyżej:
$DBNAME / $DBUSER / $DBPASS zostały już „zapomniane” (nowa sesja terminala) — proszę wstawić wartości do polecenia ręcznie albo ustawić je ponownie tymi samymi trzema wierszami z bloku powyżej.
sudo rules NOT written — nie było na czym ustalić konta panelu (pliki nie były jeszcze wgrane) i reguły nie zostały utworzone. Bez nich sekcje takie jak zapora, Fail2ban czy CrowdSec pozostaną puste. Teraz, gdy pliki są na miejscu, proszę uruchomić polecenie z panelu jeszcze raz, wskazując konto wprost:
www-data proszę zastąpić użytkownikiem, na którym działa PHP Pana/Pani witryny (w panelu hostingowym jest to zwykle właściciel domeny). Można go sprawdzić tak:
/etc/sudoers.d/monitor istnieje i zawiera wiersze z Pana/Pani użytkownikiem.
config.php w katalogu głównym panelu (/var/www/monitor/config.php) to jedyny plik, który trzeba edytować ręcznie. Wszystkie ustawienia panelu są w nim zapisane jako stałe define(). Proszę otworzyć go w edytorze:
Proszę wstawić własne wartości w podświetlonych miejscach; resztę zostawić bez zmian:
Co zmienić:
DB_NAME, DB_USER, DB_PASS — dokładnie te same nazwa bazy, użytkownik i hasło, które ustawiono podczas tworzenia bazy w kroku 04 (jeśli pozostawiono przykłady — monitor_db / monitor_user). DB_HOST i DB_CHARSET proszę pozostawić.APP_URL — pełny adres panelu z https://, bez ukośnika na końcu i bez www. Musi być zgodny z domeną, na której aktywuje się licencję (krok 07), inaczej klucz zostanie odrzucony.TIMEZONE — Pana/Pani strefa czasowa (lista — timedatectl list-timezones). Wpływa tylko na to, jak panel wyświetla daty; na czas uruchamiania zadań cron nie wpływa (tam obowiązuje strefa systemowa).SESSION_LIFETIME — po ilu sekundach bezczynności panel poprosi o ponowne logowanie (domyślnie 8 godzin). Np. 3600 = 1 godzina, 86400 = doba.display_errors, log_errors, error_log) — proszę zostawić domyślnie.Proszę zapisać plik (Ctrl+O, Enter, następnie Ctrl+X) i zrestartować PHP-FPM — inaczej z powodu OPcache zmiany nie zostaną zastosowane:
640 (ustawione w kroku 03) i jawny zakaz w głównym .htaccess. Proszę nie publikować go w publicznych repozytoriach ani nie przesyłać do wsparcia z prawdziwym hasłem.
http:// nie uda się Panu zalogować.
Certbot skipped — issue SSL in …). Certyfikat wydaje się przełącznikiem Let's Encrypt na domenie WWW w samym panelu — dzięki temu panel zajmuje się też jego odnawianiem.
certbot oraz wtyczka dla Apache są już zainstalowane przez autokonfigurację. DNS domeny powinien już wskazywać na serwer (krok 02). Wystawienie jedną komendą:
Jeśli panel ma otwierać się także z przedrostkiem www. — proszę wymienić obie nazwy w jednym poleceniu, inaczej pod drugim adresem przeglądarka pokaże ostrzeżenie o certyfikacie:
Y.<VirtualHost *:443>, skonfiguruje przekierowanie http→https i automatyczne odnawianie. Na końcu — Successfully enabled HTTPS.
dig +short monitor.example.com zwraca IP serwera i czy porty 80/443 są otwarte (sudo ufw allow 80,443/tcp).
Po wystawieniu: https://monitor.example.com otwiera się z kłódką, a http:// przekierowuje na https://.
Proszę otworzyć https://monitor.example.com, zalogować się jako admin / useradmin i przejść przez listę kontrolną:
ARCIVEO-… z panelu klienta proszę aktywować na swoją domenę i wkleić klucz w „Ustawienia” → „Licencja”. Więcej.public/start_db.php, jeśli pozostał: pozwala on bez autoryzacji odtworzyć bazę. Dopóki plik znajduje się w katalogu głównym panelu lub w public/, panel ostrzega o nim czerwonym banerem.sudo /usr/local/bin/clamav-scan.sh) mocno obciąża dysk i procesor i może trwać godzinę lub dłużej — na działającym serwerze lepiej poczekać na nocne uruchomienie o 01:30. Sekcje „Dyski (SMART)”, „Wydajność” i „Aktualizacje zabezpieczeń” zapełniają się same: odpowiednio co 30 minut, co 5 minut i raz na godzinę.