Instalasi otomatis

Cara otomatis: satu skrip dari akun menyiapkan seluruh server (web-stack Apache + PHP, basis data, alat keamanan, cron). Selanjutnya — pasang panel, terbitkan SSL, dan masukkan lisensi. Berjalan di Ubuntu/Debian: pada VPS baru mengatur semuanya dari nol, pada server yang sudah dikonfigurasi — hanya secara aditif (profil “Server terkonfigurasi”, langkah 01). Semua perintah di bawah sudah urut, cukup gulir dari atas ke bawah. Pada VPS baru setiap langkah berlaku berurutan; jika server sudah dikonfigurasi atau sudah ada panel hosting di dalamnya, sebagian pekerjaan sengaja ditinggalkan skrip untuk Anda — apa saja itu, ia tuliskan di akhir kerjanya (pembahasan keluarannya ada di langkah 01).

Nilai contoh dalam perintah ganti dengan milik Anda: monitor.example.com — domain Anda; 203.0.113.10 — IP server sebenarnya; /var/www/monitor — root panel (tempat public/, assets/, config.php berada); buat sendiri kata sandi basis data Anda.
Paket lengkap (“Perlindungan penuh”) ditujukan untuk VPS baru. Pada Ubuntu/Debian bersih ia mengatur sistem keamanan dari nol — Fail2ban (jail.local), root-crontab, aturan UFW, konfigurasi Apache. Jika server sudah dikonfigurasi (panel berjalan, situs, email, jail buatan Anda sendiri) — pilih profil “Server terkonfigurasi”: ia hanya membuat perubahan aditif dan tidak mengutak-atik firewall, Fail2ban, email, SSH, serta sysctl Anda. Saat mendeteksi panel hosting, skrip beralih ke mode ini sendiri. Sebelum menjalankan pertama kali, Anda bisa mengaktifkan uji coba kering (centang di akun) — ia akan menunjukkan apa yang akan dilakukan tanpa mengubah apa pun. Pada server yang sedang berjalan, buatlah snapshot untuk berjaga-jaga.

01. Perintah konfigurasi otomatis dari akun

Perintah diambil di akun Anda my.arciveo.com → bagian “Konfigurasi server” (tersedia setelah berlangganan Arcivéo Security Monitor). Perintah terikat ke akun Anda dan berisi token pribadi.

Skrip menyiapkan seluruh server: web-stack (Apache + PHP), basis data, alat untuk SSL, rangkaian lengkap alat proteksi dan tugas cron (Lynis, SMART, debsums, Logwatch, laporan harian, pembaruan ipsum).

1) Pilih tingkat proteksi (di akun, sebelum menyalin perintah):

  • Proteksi penuh (disarankan) — UFW (firewall), Fail2ban, CrowdSec + bouncer, ipsum (daftar blokir IP), Suricata (IDS/IPS), Falco, ModSecurity + OWASP CRS (WAF), PSAD, mod_evasive (anti-DoS), AIDE (integritas file), debsums, ClamAV + maldet (antivirus), Auditd, AppArmor, Monit, Lynis (audit), Logwatch, pembaruan keamanan otomatis.
  • Ringan — untuk VPS dengan RAM kecil: rangkaian dasar tanpa komponen berat.
  • Server terkonfigurasi (panel hosting) — untuk server yang sudah berjalan dengan panel (HestiaCP dsb.), situs, dan email: hanya perubahan aditif (pemasangan alat tambahan, cron, aturan sudo), sedangkan firewall, Fail2ban, email, SSH, dan sysctl tetap apa adanya. Pada server berpanel, skrip memilih mode ini sendiri.
Uji coba kering. Di akun, Anda dapat mencentang “Uji coba kering” — maka perintah hanya menampilkan apa yang akan dipasang dan diubah skrip, lalu berhenti tanpa menyentuh apa pun. Berguna pada server yang sudah dikonfigurasi: uji coba dulu, lalu jalankan sungguhan tanpa centang.

2) Jalankan di server sebagai root perintah dari akun — tampilannya seperti ini:

curl -fsSL "https://my.arciveo.com/install.php?token=YOUR_TOKEN" | sudo bash
Rahasiakan perintah ini — perintah terikat ke akun Anda. Tautan memiliki masa berlaku terbatas; jika sudah kedaluwarsa, klik “Dapatkan tautan baru” di akun.
Setelah konfigurasi otomatis, web-server adalah Apache + PHP-FPM, dan alat keamanan serta tugas cron sudah terpasang dan berjalan “out of the box”.

3) Bacalah keluaran di bagian akhir — di sana tertulis apa yang tersisa untuk Anda. Skrip mengakhiri kerjanya dengan blok pemeriksaan dan daftar “Selanjutnya — pemasangan panel”. Sebagian langkah sengaja tidak dikerjakannya: apa saja itu bergantung pada profil yang dipilih dan pada apa yang ditemukannya di server. Cocokkan dengan daftar di bawah — yang perlu dikerjakan hanya butir-butir yang barisnya muncul pada keluaran Anda.

  • Control panel detected (…) — situs dibuat lewat panel hosting itu sendiri, skrip tidak membuat vhost. Langkah 03, cabang “Server dengan panel hosting”.
  • No vhost created (no domain given) — profil “Server terkonfigurasi” tanpa domain: vhost tanpa nama akan menjadi situs bawaan dan mencegat situs-situs Anda sendiri, karena itu ia tidak dibuat. Langkah 03, cabang “Membuat vhost secara manual”.
  • sudo rules NOT written — skrip tidak dapat menentukan akun mana yang menjalankan panel. Ini situasi biasa: file panel diunggah justru setelah konfigurasi otomatis, sehingga belum ada dasar untuk menentukannya. Tanpa aturan tersebut, modul tidak akan melihat data sistem. Langkah 04, blok “sudo untuk server web”.
  • ! Nginx does not read .htaccess — di depan Apache ada Nginx, dan menuliskan larangan ke konfigurasinya secara otomatis tidak berhasil. Kerjakan ini, wajib: jika tidak, data/, keys/, database/, dan config.php terekspos ke luar melewati .htaccess. Langkah 03, blok “Jika di depan Apache ada Nginx”.
  • UFW installed but inactive — firewall terpasang, tetapi mati: pada server yang sudah dikonfigurasi skrip tidak menyalakannya sendiri agar tidak memutus akses Anda. Nyalakan sendiri, dan pastikan mengizinkan port SSH Anda:
    sudo ufw allow OpenSSH # port SSH non-standar: sudo ufw allow 2222/tcp sudo ufw allow 80,443/tcp sudo ufw enable
  • Fail2ban installed but not running — jalankan: sudo systemctl enable --now fail2ban.
  • Database server present … but not running — jalankan DBMS sebelum langkah 04: sudo systemctl enable --now mariadb (atau mysql — tergantung yang terpasang).
  • Certbot skipped — issue SSL in … — sertifikat diterbitkan lewat sakelar Let's Encrypt di panel hosting; langkah 06 tidak Anda perlukan.
Jika pada blok pemeriksaan semuanya beres, baris terakhirnya adalah All checks passed. Butir dengan ! perlu perhatian; rinciannya ditulis ke log, jalurnya dicetak skrip di bagian paling akhir (Log: …).

02. Domain dan DNS

Agar dashboard bisa dibuka di alamat seperti monitor.example.com dan mendapatkan SSL gratis, domain harus mengarah ke server. Di panel pengelolaan DNS (di registrar atau penyedia hosting), buat A-record:

Tipe: A Nama: monitor (subdomain → monitor.example.com) atau @ (root domain → example.com) Nilai: 203.0.113.10 ← IP server Anda TTL: 3600

Setelah beberapa menit (kadang hingga satu jam), pastikan domain sudah mengarah ke server:

dig +short monitor.example.com # harus mengembalikan IP Anda # atau, jika dig tidak ada: getent hosts monitor.example.com
Sertifikat SSL (langkah 06) hanya diterbitkan untuk domain — karena itu DNS harus mengarah ke server sebelum sertifikat diterbitkan.

03. Unggah file panel

Kasus biasa (VPS baru). Konfigurasi otomatis sudah membuat direktori panel /var/www/monitor dan menyiapkan situs Apache (DocumentRoot ke akar panel, PHP-FPM, AllowOverride untuk .htaccess). Pada keluaran skrip ini adalah baris vhost … → DocumentRoot …. Anda tidak perlu membuat direktori dan vhost sendiri — cukup unggah file dan atur izinnya.
Dua kasus ketika vhost TIDAK dibuat — skrip menyampaikannya secara terbuka di akhir kerjanya. Bila demikian, kerjakan dulu cabang yang sesuai di bawah, baru setelah itu unggah file.

Cabang “Server dengan panel hosting” (pada keluaran: Control panel detected (…)). Situs di server seperti itu dikelola oleh panel, dan skrip sengaja tidak membuat vhost sendiri — vhost itu akan tertimpa pada penyusunan ulang konfigurasi yang pertama oleh panel. Urutannya begini:

  1. Buat web-domain di panel hosting (HestiaCP dsb.) — DocumentRoot-nya tetap apa adanya.
  2. Unggah distribusi secara utuh ke public_html domain tersebut: bersama index.php, api/, assets/ harus ada pula berkas layanan config.php, includes/, data/, tmp/, logs/, keys/, cron/, database/. Tidak perlu memindahkan apa pun ke atas web-root: folder layanan ditutup oleh berkas .htaccess dari distribusi, dan di bawah Nginx — oleh larangan yang dituliskan skrip ke konfigurasi domain.
  3. SSL diterbitkan lewat sakelar Let's Encrypt di panel itu sendiri — lewati langkah 06.
  4. Selanjutnya — izin (di bawah pada langkah ini), basis data (langkah 04), dan config.php (langkah 05). Ganti jalur pada perintah menjadi /home/akun/web/domain/public_html, dan pemiliknya — menjadi pengguna domain tersebut, bukan www-data.

Cabang “Membuat vhost secara manual” (pada keluaran: No vhost created (no domain given)). Ini hanya terjadi pada profil “Server terkonfigurasi”, ketika domain tidak diteruskan. Cara termudah — jalankan ulang perintah dari akun dengan menyertakan domain:

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

Menjalankan ulang itu aman: yang sudah dikerjakan tidak digandakan. Namun jika vhost memang perlu dibuat dengan tangan — inilah konfigurasi yang sama seperti yang ditulis penginstal:

sudo mkdir -p /var/www/monitor # Socket PHP-FPM ditentukan otomatis — versi PHP di tiap server berbeda-beda. 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 di sini wajib. Vhost tanpa nama menjadi situs bawaan Apache dan mulai merespons domain milik orang lain di server yang sama. Karena alasan yang sama, jangan menonaktifkan 000-default.conf pada server yang sudah dikonfigurasi: situs itu bisa saja telah diubah menjadi situs kerja seseorang — pada VPS baru penginstal menyingkirkannya sendiri, di sini hal itu tidak perlu dilakukan.
Jika di depan Apache ada Nginx (pada keluaran: ! Nginx does not read .htaccess). Nginx menyajikan berkas statis langsung dari disk dan tidak membaca .htaccess — folder layanan akan terbuka ke luar, meskipun Apache menutupnya dengan benar. Skrip sudah menyiapkan berkas berisi larangan sebelumnya; berkas itu perlu disertakan pada blok server{} situs Anda, lalu muat ulang Nginx:
include /etc/nginx/snippets/arciveo-deny.conf;
sudo nginx -t && sudo systemctl reload nginx # Pemeriksaan: harus mengembalikan 403, bukan isi berkas curl -sI https://monitor.example.com/config.php | head -1
File panel (arsip distribusi) diunduh setelah pembelian di akun my.arciveo.com → “Unduhan”. Ekstrak arsip sebelum diunggah ke server.

Unggah isi distribusi ke /var/www/monitor (agar di dalamnya terdapat public/, assets/, config.php, dan lain-lain) — melalui SFTP/SCP (FileZilla / WinSCP) atau dengan perintah scp dari komputer lokal:

scp -r ./monitor/* deploy@203.0.113.10:/var/www/monitor/
Agar domain Anda langsung tercatat di vhost (ServerName), teruskan ke perintah konfigurasi otomatis pada langkah 01: … | sudo bash -s -- monitor.example.com (atau isikan domain di kolom “Domain panel” di akun). Jika domain tidak diteruskan — panel merespons host apa pun dan lewat IP, sedangkan ServerName akan dicatat oleh certbot saat menerbitkan SSL (langkah 06); tidak perlu menginstal ulang apa pun.
Atur izin file — ini langkah wajib. Jika mengunggah sebagai root atau lewat SFTP, file dimiliki root, dan server web (www-data) tidak dapat membacanya — panel akan terbuka kosong atau dengan galat 403 (di log: .htaccess unreadable / directory not executable). Perintah di bawah memperbaikinya:
# Normalisasi izin seluruh webroot: direktori yang dibuat root tidak dapat diakses # server web (www-data) — tanpa ini panel menampilkan halaman kosong atau 403. cd /var/www/monitor # Buat folder kerja SEBELUM chown — jika tidak, direktori baru tetap root:root # dan saat chmod 750 server web (www-data) tidak dapat menulis ke dalamnya. 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

Buka akses unggah file lewat SFTP untuk diri Anda. Setelah perintah di atas semua file dimiliki www-data, sedangkan FileZilla / WinSCP terhubung sebagai pengguna Anda sendiri — unggahan lalu gagal dengan SSH_FX_PERMISSION_DENIED (Permission denied). Pilih salah satu dari dua opsi.

Opsi A — ACL hanya untuk pengguna Anda (disarankan). Hak tulis hanya Anda yang dapat; server web tetap tidak bisa menimpa kode panel:

sudo apt install -y acl # Hak tulis untuk pengguna Anda pada seluruh direktori panel: sudo setfacl -R -m u:deploy:rwX /var/www/monitor # Aturan yang sama sebagai bawaan — untuk file dan folder yang dibuat kemudian: sudo setfacl -R -d -m u:deploy:rwX /var/www/monitor

Opsi B — lewat grup www-data. Lebih sederhana, tetapi hak tulis ke file panel juga didapat server web: bila ada celah di PHP, kode bisa diganti. Urutan perintah penting — config.php dan folder kerja ditutup paling akhir:

sudo usermod -aG www-data deploy # Hak tulis untuk grup + setgid (bit 2): file yang diunggah lewat SFTP tetap # berada di grup www-data — jika tidak, panel tak bisa menimpanya. 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
Setelah opsi B, sambungkan ulang di FileZilla (Server → Putuskan sambungan, lalu masuk lagi) — grup baru hanya berlaku pada login baru, sebelum itu izin tetap belum ada. Pemeriksaan: id deploy — pada daftar grup harus muncul www-data; ls -ld /var/www/monitor — izin drwxrwsr-x, huruf s menggantikan x berarti setgid sudah aktif.

04. Basis data

Buat basis data dan pengguna, lalu impor skemanya. Blok BD ditempel ke terminal secara utuh (sudo mysql masuk sebagai root melalui unix-socket — kata sandi root tidak diperlukan). monitor_db dan monitor_user hanyalah nama contoh, Anda bisa menentukan nama sendiri; ingat nama basis data, pengguna, dan kata sandi — masukkan ke config.php pada langkah berikutnya:

# 1. Basis data. Nama basis data, pengguna, dan kata sandi diatur SEKALI di bawah dan disisipkan ke semua baris. # Blok ditempel ke terminal SECARA UTUH; sudo mysql masuk sebagai root via unix-socket # (kata sandi root tidak diperlukan). JANGAN gunakan `sudo mysql -u root -p` interaktif # dengan tempel — saat menempel, baris SQL akan masuk ke prompt kata sandi dan hilang. DBNAME='monitor_db' # ← nama basis data, boleh dibiarkan DBUSER='monitor_user' # ← pengguna basis data, boleh dibiarkan DBPASS='CHOOSE_A_PASSWORD' # ← kata sandi, tentukan sendiri 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 # Pemeriksaan (harus menampilkan $DBNAME): mysql -u "$DBUSER" -p"$DBPASS" -e "SHOW DATABASES;" # Masukkan ketiga nilai yang sama ke config.php → DB_NAME, DB_USER, DB_PASS.
Biasanya skema tidak perlu diimpor — panel membuat tabel dan akun admin sendiri saat pertama kali dibuka di browser (dari database/db.sql), jika BD kosong.

Jika tabel tidak terbuat (panel menampilkan galat koneksi ke BD atau layar kosong alih-alih formulir login) — impor skemanya secara manual. Perintah dijalankan di root panel, nilainya diambil dari blok di atas:

# Impor skema: cd /var/www/monitor && mysql -u "$DBUSER" -p"$DBPASS" "$DBNAME" < database/db.sql # Pemeriksaan — daftar tabel harus muncul: mysql -u "$DBUSER" -p"$DBPASS" "$DBNAME" -e "SHOW TABLES;"
Jika variabel $DBNAME / $DBUSER / $DBPASS sudah “terlupakan” (sesi terminal baru) — masukkan nilainya ke perintah dengan tangan atau tetapkan lagi dengan tiga baris yang sama dari blok di atas.
sudo untuk server web. Biasanya aturannya sudah dituliskan oleh konfigurasi otomatis, dan modul langsung melihat data sistem. Namun jika pada keluaran skrip ada baris sudo rules NOT written — belum ada dasar untuk menentukan akun panel (file belum diunggah), sehingga aturan tidak dibuat. Tanpa aturan itu bagian seperti firewall, Fail2ban, dan CrowdSec akan tetap kosong. Sekarang, setelah file berada di tempatnya, jalankan lagi perintah dari akun dengan menyebut akunnya secara eksplisit:
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 ganti dengan pengguna yang menjalankan PHP situs Anda (pada panel hosting biasanya pemilik domain). Cara melihatnya:
ps -o user= -C php-fpm8.3 | sort -u # ganti versinya dengan milik Anda # atau: ps aux | grep -m3 '[p]hp-fpm'
Pemeriksaan setelah menjalankan ulang: berkas /etc/sudoers.d/monitor ada dan di dalamnya terdapat baris dengan pengguna Anda.

05. Konfigurasi config.php

config.php di root panel (/var/www/monitor/config.php) adalah satu-satunya berkas yang perlu diedit secara manual. Semua pengaturan panel didefinisikan di dalamnya sebagai konstanta define(). Buka di editor:

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

Masukkan nilai Anda pada bagian yang disorot; sisanya biarkan apa adanya:

// --- Basis data (dari langkah 04) --- define('DB_HOST', 'localhost'); // biarkan define('DB_NAME', 'db_name'); // yang dibuat di langkah 04 define('DB_USER', 'user'); // yang dibuat di langkah 04 define('DB_PASS', 'db_password'); // yang ditetapkan di langkah 04 define('DB_CHARSET', 'utf8mb4'); // biarkan // --- Aplikasi --- define('APP_URL', 'https://monitor.example.com'); // alamat panel, tanpa garis miring di akhir define('TIMEZONE', 'Asia/Jakarta'); // zona waktu Anda // --- Waktu sesi --- define('SESSION_LIFETIME', 28800); // idle sebelum login ulang, detik (28800 = 8 jam)

Yang perlu diubah:

  • DB_NAME, DB_USER, DB_PASS — persis nama basis data, pengguna, dan kata sandi yang Anda tetapkan saat membuat DB di langkah 04 (jika contoh dibiarkan — monitor_db / monitor_user). DB_HOST dan DB_CHARSET jangan diubah.
  • APP_URL — alamat lengkap panel dengan https://, tanpa garis miring di akhir dan tanpa www. Harus cocok dengan domain tempat lisensi diaktifkan (langkah 07), jika tidak, kunci akan ditolak.
  • TIMEZONE — zona waktu Anda (daftar — timedatectl list-timezones). Hanya memengaruhi cara panel menampilkan tanggal; waktu menjalankan tugas cron tidak terpengaruh (di sana berlaku zona waktu sistem).
  • SESSION_LIFETIME — setelah berapa detik tanpa aktivitas panel meminta login ulang (bawaan 8 jam). Mis. 3600 = 1 jam, 86400 = sehari.
  • Blok pencatatan galat (display_errors, log_errors, error_log) — biarkan bawaan.

Simpan berkas (Ctrl+O, Enter, lalu Ctrl+X) dan mulai ulang PHP-FPM — jika tidak, karena OPcache perubahan tidak akan diterapkan:

sudo systemctl restart php*-fpm
config.php — berkas rahasia (berisi kata sandi DB). Berkas ini berada di root panel, yang juga merupakan web-root, tetapi tertutup: hak akses 640 (diatur di langkah 03) dan larangan eksplisit di .htaccess root. Jangan unggah ke repositori publik dan jangan kirim ke dukungan dengan kata sandi asli.
Uraian lengkap semua parameter — di FAQ: “Berkas config.php — semua pengaturan panel”.

06. Terbitkan SSL (HTTPS)

Dashboard hanya berjalan lewat HTTPS. Sesi login memakai cookie aman, dan WebAuthn (2FA) secara standar hanya bekerja di HTTPS. Lewat http:// Anda tidak akan bisa masuk.
Pada server dengan panel hosting langkah ini tidak diperlukan (pada keluaran skrip: Certbot skipped — issue SSL in …). Sertifikat diterbitkan lewat sakelar Let's Encrypt pada web-domain di panel itu sendiri — dengan begitu perpanjangannya pun diurus oleh panel.

certbot dan plugin untuk Apache sudah dipasang oleh konfigurasi otomatis. DNS domain sudah harus mengarah ke server (langkah 02). Penerbitan cukup satu perintah:

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

Jika panel juga harus bisa dibuka dengan www. — sebutkan kedua nama dalam satu perintah, jika tidak, pada alamat kedua peramban akan menampilkan peringatan sertifikat:

sudo certbot --apache -d monitor.example.com -d www.monitor.example.com
Tambahkan nama kedua hanya jika untuknya juga ada A-record yang mengarah ke server ini (langkah 02). Jika tidak, Let's Encrypt tak dapat memverifikasinya dan tidak akan menerbitkan sertifikat sama sekali — termasuk untuk domain utama.
Yang akan ditanyakan certbot:
  1. Enter email address — e-mail Anda (ke situlah notifikasi kedaluwarsa sertifikat dikirim).
  2. Terms of Service … (Y)es/(N)o — Y.
  3. Share email with the EFF … (Y)es/(N)o — terserah Anda.
Selanjutnya certbot akan menerbitkan sertifikat sendiri, menuliskan <VirtualHost *:443>, mengatur redirect http→https dan perpanjangan otomatis. Di akhir — Successfully enabled HTTPS.
Jika penerbitan gagal — pastikan dig +short monitor.example.com mengembalikan IP server dan port 80/443 terbuka (sudo ufw allow 80,443/tcp).

Setelah diterbitkan: https://monitor.example.com terbuka dengan ikon gembok, http:// mengalihkan ke https://.

07. Login dan pengaturan awal

Buka https://monitor.example.com, masuk dengan admin / useradmin lalu ikuti daftar periksa:

  1. Ganti kata sandi admin — bagian “Pengguna” di menu.
  2. Aktifkan WebAuthn (2FA) — “Kunci WebAuthn” → daftarkan kunci/passkey (memerlukan HTTPS). Daftarkan dua sekaligus: jika satu-satunya kunci hilang, login dengannya tidak akan mungkin. Selengkapnya.
  3. Batasi akses berdasarkan IP — “Pengaturan” → “Pembatasan akses berdasarkan IP” (masukkan IP Anda sebelum mengaktifkan, jika tidak Anda akan mengunci akses sendiri).
  4. Masukkan lisensi — aktifkan kode aktivasi ARCIVEO-… dari akun ke domain Anda lalu tempel kunci ke “Pengaturan” → “Lisensi”. Selengkapnya.
  5. Atur notifikasi — Telegram dan/atau Email di “Pengaturan”. Selengkapnya.
  6. Hapus penginstal public/start_db.php jika masih ada: file ini memungkinkan pembuatan ulang basis data tanpa otorisasi. Selama file berada di root panel atau di public/, panel akan memperingatkannya dengan banner merah.
  7. Jalankan pemeriksaan pertama secara manual — jika tidak, sebagian bagian akan kosong sampai malam nanti (lihat blok di bawah).
Mengapa “Audit Lynis” dan “Logwatch” langsung kosong. Konfigurasi otomatis memasang alat-alatnya dan membuat tugas cron, tetapi tidak menjalankan pemeriksaannya sendiri — pemeriksaan itu berjalan sesuai jadwal: Lynis pukul 03:00, Logwatch pukul 06:00, debsums pukul 04:30, ClamAV pukul 01:30. Sampai saat itu, bagian-bagian tersebut memang jujur menampilkan bahwa laporannya belum ada. Agar tidak menunggu sehari penuh, jalankan sekali dengan tangan:
# Audit Lynis — laporan pertama (beberapa menit): sudo /usr/local/bin/lynis-scan.sh # Laporan Logwatch untuk sehari: sudo /usr/local/bin/logwatch_daily.sh # Integritas paket (debsums) — pada server besar berjalan lama: sudo /usr/local/bin/debsums-scan.sh
Lynis juga bisa dijalankan langsung dari panel — tombol “Jalankan audit” di halaman “Audit Lynis”: tombol itu menjalankan skrip yang sama di latar belakang dan memperbarui laporannya sendiri. Selanjutnya semuanya berjalan sesuai jadwal, tidak perlu dijalankan manual lagi.
Pemindaian antivirus pertama (sudo /usr/local/bin/clamav-scan.sh) sangat membebani disk dan prosesor serta bisa berjalan satu jam atau lebih — pada server yang sedang berjalan lebih baik menunggu jadwal malam pukul 01:30. Bagian “Disk (SMART)”, “Kinerja”, dan “Pembaruan keamanan” terisi sendiri: masing-masing setiap 30 menit, 5 menit, dan sekali sejam.
Selesai. Panduan setiap alat ada di FAQ.
Jika di server ini diperlukan satu situs lagi dengan domain sendiri — lihat FAQ: “Situs kedua di server ini (satu domain lagi)”.