Cài đặt tự động

Cách tự động: một script từ tài khoản cá nhân sẽ chuẩn bị toàn bộ máy chủ (web-stack Apache + PHP, cơ sở dữ liệu, công cụ bảo mật, cron). Tiếp theo — triển khai dashboard, cấp SSL và nhập license. Hoạt động trên Ubuntu/Debian: trên VPS mới, script thiết lập mọi thứ từ đầu; trên máy chủ đã cấu hình — chỉ bổ sung thêm (hồ sơ “Máy chủ đã cấu hình”, bước 01). Tất cả lệnh bên dưới theo thứ tự, chỉ cần cuộn từ trên xuống dưới.

Các giá trị mẫu trong lệnh hãy thay bằng giá trị của bạn: monitor.example.com — domain của bạn; 203.0.113.10 — IP thật của máy chủ; /var/www/monitor — thư mục gốc của dashboard (nơi chứa public/, assets/, config.php); mật khẩu DB hãy tự đặt.
Bộ đầy đủ (“Bảo vệ toàn diện”) dành cho VPS mới. Trên Ubuntu/Debian sạch, script thiết lập hệ thống bảo mật từ đầu — Fail2ban (jail.local), root-crontab, quy tắc UFW, cấu hình Apache. Nếu máy chủ đã được cấu hình (dashboard đang chạy, các trang web, email, các jail riêng) — hãy chọn hồ sơ “Máy chủ đã cấu hình”: nó chỉ thực hiện các thay đổi bổ sung và không đụng đến firewall, Fail2ban, email, SSH và sysctl của bạn. Khi phát hiện có hosting-panel, script tự chuyển sang chế độ này. Trước lần chạy đầu tiên, bạn có thể bật chạy thử (đánh dấu trong tài khoản) — nó sẽ cho thấy những gì sẽ được làm mà không thay đổi gì. Trên máy chủ đang hoạt động, để chắc chắn hãy tạo một snapshot.

01. Lệnh tự động cấu hình từ tài khoản

Lệnh được lấy trong tài khoản cá nhân của bạn my.arciveo.com → mục “Cấu hình máy chủ” (khả dụng sau khi đăng ký Arcivéo Monitor). Lệnh gắn với tài khoản của bạn và chứa token cá nhân.

Tập lệnh chuẩn bị toàn bộ máy chủ: web-stack (Apache + PHP), cơ sở dữ liệu, công cụ cho SSL, bộ công cụ bảo vệ đầy đủ và các tác vụ cron (Lynis, SMART, debsums, Logwatch, báo cáo hằng ngày, cập nhật ipsum).

1) Chọn mức độ bảo vệ (trong tài khoản, trước khi sao chép lệnh):

  • Bảo vệ toàn diện (khuyến nghị) — UFW (tường lửa), Fail2ban, CrowdSec + bouncer, ipsum (danh sách chặn IP), Suricata (IDS/IPS), Falco, ModSecurity + OWASP CRS (WAF), PSAD, mod_evasive (chống DoS), AIDE (toàn vẹn tập tin), debsums, ClamAV + maldet (chống virus), Auditd, AppArmor, Monit, Lynis (kiểm toán), Logwatch, tự động cập nhật bảo mật.
  • Nhẹ — cho VPS ít RAM: bộ cơ bản không có các thành phần nặng.
  • Máy chủ đã cấu hình (bảng điều khiển hosting) — cho máy chủ đang chạy có bảng điều khiển (HestiaCP v.v.), các website và email: chỉ thay đổi bổ sung (cài thêm công cụ, cron, quy tắc sudo), còn tường lửa, Fail2ban, email, SSH và sysctl giữ nguyên. Trên máy chủ có bảng điều khiển, tập lệnh tự chọn chế độ này.
Chạy thử. Trong tài khoản có thể tích chọn “Chạy thử” — khi đó lệnh chỉ hiển thị những gì tập lệnh sẽ cài đặt và thay đổi rồi kết thúc mà không tác động gì. Hữu ích trên máy chủ đã cấu hình: chạy thử trước, sau đó chạy thật không tích chọn.

2) Chạy trên máy chủ dưới quyền root lệnh từ tài khoản — nó trông như sau:

curl -fsSL "https://my.arciveo.com/install.php?token=YOUR_TOKEN" | sudo bash
Giữ bí mật lệnh này — nó gắn với tài khoản của bạn. Liên kết có thời hạn giới hạn; nếu hết hạn, hãy nhấn “Lấy liên kết mới” trong tài khoản.
Sau khi tự động cấu hình, web-server là Apache + PHP-FPM, còn các công cụ bảo mật và tác vụ cron đã được cài đặt và hoạt động sẵn — không cần cấu hình gì thêm.

02. Tên miền và DNS

Để mở dashboard tại địa chỉ dạng monitor.example.com và nhận SSL miễn phí, tên miền phải trỏ về máy chủ. Trong bảng quản lý DNS (tại nhà đăng ký hoặc nhà cung cấp hosting), hãy tạo một bản ghi A:

Loại: A Tên: monitor (tên miền phụ → monitor.example.com) hoặc @ (tên miền gốc → example.com) Giá trị: 203.0.113.10 ← IP máy chủ của bạn TTL: 3600

Sau vài phút (đôi khi tới một giờ), hãy kiểm tra tên miền đã trỏ về máy chủ chưa:

dig +short monitor.example.com # phải trả về IP của bạn # hoặc, nếu không có dig: getent hosts monitor.example.com
Chứng chỉ SSL (bước 06) chỉ được cấp cho tên miền — nên DNS phải trỏ về máy chủ trước khi phát hành chứng chỉ.

03. Tải lên tệp của bảng điều khiển

Trình tự động cấu hình đã tạo sẵn thư mục bảng điều khiển /var/www/monitor và thiết lập trang Apache (DocumentRoot trỏ vào gốc bảng điều khiển, PHP-FPM, AllowOverride cho .htaccess). Không cần tạo riêng thư mục hay vhost — chỉ cần tải tệp lên và cấp quyền.
Tệp của bảng điều khiển (gói phân phối nén) được tải về sau khi mua trong tài khoản cá nhân my.arciveo.com“Tải xuống”. Hãy giải nén gói trước khi tải lên máy chủ.

Hãy tải nội dung gói phân phối vào /var/www/monitor (để bên trong có public/, assets/, config.php v.v.) — qua SFTP/SCP (FileZilla / WinSCP) hoặc bằng lệnh scp từ máy tính cục bộ:

scp -r ./monitor/* deploy@203.0.113.10:/var/www/monitor/
Để domain của bạn được ghi ngay vào vhost (ServerName), hãy truyền nó vào lệnh tự động cấu hình ngay ở bước 01: … | sudo bash -s -- monitor.example.com (hoặc nhập domain vào ô “Domain của bảng điều khiển” trong tài khoản cá nhân). Nếu không truyền domain — bảng điều khiển sẽ trả lời mọi host và theo IP, còn ServerName sẽ được certbot ghi khi cấp SSL (bước 06); không cần cài đặt lại gì cả.
Hãy cấp quyền cho tệp — đây là bước bắt buộc. Nếu bạn tải lên dưới quyền root hoặc qua SFTP, tệp thuộc về root, và máy chủ web (www-data) sẽ không đọc được chúng — bảng điều khiển sẽ mở ra trống trơn hoặc báo lỗi 403 (trong log: .htaccess unreadable / directory not executable). Lệnh dưới đây khắc phục điều này:
# Chuẩn hóa quyền cho toàn bộ webroot: thư mục do root tạo không truy cập được # đối với máy chủ web (www-data) — nếu không, bảng điều khiển trả về trang trống hoặc 403. cd /var/www/monitor # Tạo các thư mục làm việc TRƯỚC khi chown — nếu không, thư mục mới sẽ vẫn là root:root # và khi chmod 750, máy chủ web (www-data) sẽ không thể ghi vào đó. 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

Hãy mở quyền tải tệp lên qua SFTP cho chính bạn. Sau lệnh ở trên, mọi tệp đều thuộc về www-data, trong khi FileZilla / WinSCP kết nối bằng người dùng của bạn — khi đó việc tải lên sẽ thất bại với SSH_FX_PERMISSION_DENIED (Permission denied). Hãy chọn một trong hai phương án.

Phương án A — ACL chỉ dành cho người dùng của bạn (khuyến nghị). Chỉ mình bạn có quyền ghi; máy chủ web vẫn không thể ghi đè mã của bảng điều khiển:

sudo apt install -y acl # Quyền ghi cho người dùng của bạn trên toàn bộ thư mục bảng điều khiển: sudo setfacl -R -m u:deploy:rwX /var/www/monitor # Cũng quy tắc đó làm mặc định — cho tệp và thư mục tạo về sau: sudo setfacl -R -d -m u:deploy:rwX /var/www/monitor

Phương án B — qua nhóm www-data. Đơn giản hơn, nhưng máy chủ web cũng có quyền ghi vào tệp của bảng điều khiển: nếu PHP có lỗ hổng thì mã có thể bị thay thế. Thứ tự các lệnh rất quan trọng — config.php và các thư mục làm việc được đóng lại sau cùng:

sudo usermod -aG www-data deploy # Quyền ghi cho nhóm + setgid (bit 2): tệp tải lên qua SFTP vẫn nằm # trong nhóm www-data — nếu không, bảng điều khiển không ghi đè được. 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
Sau phương án B, hãy kết nối lại trong FileZilla (Máy chủ → Ngắt kết nối, rồi đăng nhập lại) — nhóm mới chỉ có hiệu lực khi đăng nhập mới, trước đó bạn vẫn chưa có quyền. Kiểm tra: id deploy — trong danh sách nhóm phải xuất hiện www-data; ls -ld /var/www/monitor — quyền drwxrwsr-x, chữ s thay cho x nghĩa là setgid đã được đặt.

04. Cơ sở dữ liệu

Tạo cơ sở dữ liệu và người dùng, sau đó nhập lược đồ. Khối cấu hình DB được dán vào terminal toàn bộ (sudo mysql đăng nhập root qua unix-socket — không cần mật khẩu root). monitor_dbmonitor_user chỉ là tên ví dụ, bạn có thể đặt tên tùy ý; hãy ghi nhớ tên cơ sở dữ liệu, người dùng và mật khẩu — bạn sẽ nhập chúng vào config.php ở bước tiếp theo:

# 1. Cơ sở dữ liệu. Mật khẩu được đặt MỘT lần trong DBPASS và chèn vào mọi dòng. # Khối này được dán vào terminal TOÀN BỘ; sudo mysql đăng nhập root qua unix-socket # (không cần mật khẩu root). ĐỪNG dùng `sudo mysql -u root -p` tương tác # kèm copy-paste — khi dán, các dòng SQL sẽ đi vào phần hỏi mật khẩu và mất. DBPASS='CHOOSE_A_PASSWORD' # ← chỉ thay đổi dòng này 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 # Kiểm tra (phải hiển thị monitor_db): mysql -u monitor_user -p"$DBPASS" -e "SHOW DATABASES;" # Nhập cùng mật khẩu này vào config.php → DB_PASS.
Không cần nhập lược đồ — dashboard tự tạo các bảng và tài khoản admin khi truy cập lần đầu trên trình duyệt (từ database/db.sql), nếu DB trống.
sudo cho máy chủ web đã được cấu hình tự động — các module thấy dữ liệu hệ thống ngay lập tức. Chỉ cần cấu hình sudo riêng nếu PHP chạy dưới người dùng không chuẩn (khác www-data).

05. Cấu hình config.php

config.php ở thư mục gốc của panel (/var/www/monitor/config.php) là tệp duy nhất bạn cần chỉnh sửa thủ công. Mọi thiết lập của panel được khai báo trong đó bằng các hằng define(). Mở tệp bằng trình soạn thảo:

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

Điền giá trị của bạn vào các chỗ được tô sáng; phần còn lại giữ nguyên:

// --- Cơ sở dữ liệu (từ bước 04) --- define('DB_HOST', 'localhost'); // giữ nguyên define('DB_NAME', 'db_name'); // đã tạo ở bước 04 define('DB_USER', 'user'); // đã tạo ở bước 04 define('DB_PASS', 'db_password'); // đã đặt ở bước 04 define('DB_CHARSET', 'utf8mb4'); // giữ nguyên // --- Ứng dụng --- define('APP_URL', 'https://monitor.example.com'); // địa chỉ panel, không có dấu gạch chéo ở cuối define('TIMEZONE', 'Asia/Ho_Chi_Minh'); // múi giờ của bạn // --- Thời gian phiên --- define('SESSION_LIFETIME', 28800); // thời gian rảnh trước khi phải đăng nhập lại, giây (28800 = 8 giờ)

Cần đổi những gì:

  • DB_NAME, DB_USER, DB_PASS — đúng tên cơ sở dữ liệu, người dùng và mật khẩu mà bạn đã đặt khi tạo cơ sở dữ liệu ở bước 04 (nếu giữ ví dụ — monitor_db / monitor_user). Đừng đụng vào DB_HOSTDB_CHARSET.
  • APP_URL — địa chỉ đầy đủ của panel kèm https://, không có dấu gạch chéo ở cuối và không có www. Phải trùng với domain mà bạn kích hoạt license (bước 07), nếu không key sẽ bị từ chối.
  • TIMEZONE — múi giờ của bạn (danh sách — timedatectl list-timezones). Chỉ ảnh hưởng đến cách panel hiển thị ngày tháng; không ảnh hưởng đến thời điểm chạy các tác vụ cron (chỗ đó dùng múi giờ hệ thống).
  • SESSION_LIFETIME — sau bao nhiêu giây không hoạt động thì panel yêu cầu đăng nhập lại (mặc định 8 giờ). Ví dụ 3600 = 1 giờ, 86400 = một ngày.
  • Khối ghi log lỗi (display_errors, log_errors, error_log) — giữ mặc định.

Lưu tệp (Ctrl+O, Enter, rồi Ctrl+X) và khởi động lại PHP-FPM — nếu không thì do OPcache mà các thay đổi sẽ không có hiệu lực:

sudo systemctl restart php*-fpm
config.php là tệp bí mật (trong đó có mật khẩu cơ sở dữ liệu). Nó nằm ở thư mục gốc của panel — cũng chính là web-root — nhưng đã được khóa: quyền 640 (đặt ở bước 03) và cấm rõ ràng trong .htaccess gốc. Đừng đưa nó lên các repository công khai và đừng gửi cho bộ phận hỗ trợ kèm mật khẩu thật.
Phân tích chi tiết tất cả tham số — xem trong FAQ: “Tệp config.php — toàn bộ thiết lập của panel”.

06. Cấp SSL (HTTPS)

Bảng điều khiển chỉ hoạt động qua HTTPS. Phiên đăng nhập dùng cookie bảo mật, còn WebAuthn (2FA) theo chuẩn chỉ chạy trên HTTPS. Qua http:// bạn sẽ không thể đăng nhập.

certbot và plugin cho Apache đã được cài sẵn bởi tự động cấu hình. DNS của tên miền phải trỏ về máy chủ từ trước (bước 02). Cấp chỉ với một lệnh:

sudo certbot --apache -d monitor.example.com
Những gì certbot sẽ hỏi:
  1. Enter email address — e-mail của bạn (thông báo hết hạn chứng chỉ sẽ gửi tới đó).
  2. Terms of Service … (Y)es/(N)oY.
  3. Share email with the EFF … (Y)es/(N)o — tùy bạn quyết định.
Tiếp theo certbot sẽ tự cấp chứng chỉ, ghi <VirtualHost *:443>, thiết lập chuyển hướng http→https và tự động gia hạn. Cuối cùng — Successfully enabled HTTPS.
Nếu việc cấp thất bại — hãy kiểm tra dig +short monitor.example.com có trả về IP máy chủ và các cổng 80/443 đã mở (sudo ufw allow 80,443/tcp).

Sau khi cấp: https://monitor.example.com mở ra kèm biểu tượng ổ khóa, còn http:// chuyển hướng sang https://.

07. Đăng nhập và thiết lập ban đầu

Mở https://monitor.example.com, đăng nhập admin / useradmin và làm theo danh sách kiểm tra:

  1. Đổi mật khẩu admin — mục “Người dùng” trong menu.
  2. Bật WebAuthn (2FA) — “Khóa WebAuthn” → đăng ký khóa/passkey (cần HTTPS). Hãy đăng ký ngay hai khóa: nếu mất khóa duy nhất bạn sẽ không thể đăng nhập bằng nó. Chi tiết.
  3. Giới hạn truy cập theo IP — “Cài đặt” → “Giới hạn truy cập theo IP” (hãy nhập IP của bạn trước khi bật, nếu không bạn sẽ tự khóa quyền truy cập của mình).
  4. Nhập giấy phép — kích hoạt mã ARCIVEO-… từ tài khoản cá nhân cho tên miền của bạn rồi dán khóa vào “Cài đặt” → “Giấy phép”. Chi tiết.
  5. Thiết lập thông báo — Telegram và/hoặc Email trong “Cài đặt”. Chi tiết.
  6. Xóa trình cài đặt public/start_db.php nếu vẫn còn: nó cho phép tạo lại cơ sở dữ liệu mà không cần xác thực. Khi tệp còn nằm trong thư mục gốc của dashboard hoặc trong public/, dashboard sẽ cảnh báo bằng biểu ngữ đỏ.
Xong. Các công cụ bảo mật đã hoạt động — dashboard sẽ hiển thị ngay trạng thái của chúng và Điểm bảo mật. Hướng dẫn cho từng công cụ có trong FAQ.
Arcivéo - Security Monitor © 2026