การติดตั้งอัตโนมัติ

วิธีอัตโนมัติ: สคริปต์เดียวจากบัญชีผู้ใช้จะเตรียมเซิร์ฟเวอร์ทั้งหมดให้พร้อม (เว็บสแตก Apache + PHP, ฐานข้อมูล, เครื่องมือความปลอดภัย, cron) จากนั้น — ติดตั้งแดชบอร์ด, ออก SSL และกรอกใบอนุญาต ใช้งานได้บน Ubuntu/Debian: บน VPS ใหม่จะตั้งค่าทุกอย่างตั้งแต่ต้น, บนเซิร์ฟเวอร์ที่ตั้งค่าไว้แล้ว — เพิ่มเติมเท่านั้น (โปรไฟล์ “เซิร์ฟเวอร์ที่ตั้งค่าแล้ว”, ขั้นตอน 01) คำสั่งทั้งหมดด้านล่างเรียงตามลำดับ เพียงเลื่อนจากบนลงล่าง

ค่าตัวอย่างในคำสั่ง ให้แทนที่ด้วยค่าของคุณ: monitor.example.com — โดเมนของคุณ; 203.0.113.10 — IP จริงของเซิร์ฟเวอร์; /var/www/monitor — รากของแดชบอร์ด (ที่เก็บ public/, assets/, config.php); รหัสผ่านฐานข้อมูลให้ตั้งเอง
ชุดเต็ม (“การป้องกันเต็มรูปแบบ”) ออกแบบมาสำหรับ VPS ใหม่ บน Ubuntu/Debian ที่สะอาดจะตั้งค่าระบบความปลอดภัยตั้งแต่ต้น — Fail2ban (jail.local), root-crontab, กฎ UFW, คอนฟิก Apache หากเซิร์ฟเวอร์ ตั้งค่าไว้แล้ว (แดชบอร์ดที่ใช้งานอยู่, เว็บไซต์, อีเมล, jail ของคุณเอง) — ให้เลือกโปรไฟล์ “เซิร์ฟเวอร์ที่ตั้งค่าแล้ว”: มันจะเปลี่ยนแปลงแบบเพิ่มเติมเท่านั้นและไม่แตะไฟร์วอลล์, Fail2ban, อีเมล, SSH และ sysctl ของคุณ เมื่อพบแผงควบคุมโฮสติ้ง สคริปต์จะสลับไปโหมดนี้เอง ก่อนรันครั้งแรกสามารถเปิด การรันแบบทดลอง (ติ๊กในบัญชีผู้ใช้) — มันจะแสดงสิ่งที่จะทำโดยไม่เปลี่ยนแปลงอะไร บนเซิร์ฟเวอร์ที่ใช้งานอยู่ควรทำสแนปช็อต (snapshot) ไว้เผื่อไว้

01. คำสั่งตั้งค่าอัตโนมัติจากบัญชีผู้ใช้

คุณรับคำสั่งได้ในบัญชีผู้ใช้ของคุณ my.arciveo.com → หัวข้อ “ตั้งค่าเซิร์ฟเวอร์” (ใช้งานได้หลังสมัคร Arcivéo Monitor) คำสั่งนี้ผูกกับบัญชีของคุณและมีโทเคนส่วนตัว

สคริปต์จะเตรียมเซิร์ฟเวอร์ทั้งหมด: เว็บสแตก (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 (ป้องกัน DoS), AIDE (ความสมบูรณ์ของไฟล์), debsums, ClamAV + maldet (แอนติไวรัส), Auditd, AppArmor, Monit, Lynis (ตรวจสอบ), Logwatch, อัปเดตความปลอดภัยอัตโนมัติ
  • แบบเบา — สำหรับ VPS ที่มี RAM น้อย: ชุดพื้นฐานโดยไม่มีคอมโพเนนต์ที่หนัก
  • เซิร์ฟเวอร์ที่ตั้งค่าแล้ว (แผงควบคุมโฮสติ้ง) — สำหรับเซิร์ฟเวอร์ที่ทำงานอยู่แล้วพร้อมแผงควบคุม (HestiaCP ฯลฯ), เว็บไซต์และอีเมล: เปลี่ยนแปลงแบบเพิ่มเติมเท่านั้น (ติดตั้งเครื่องมือเพิ่ม, cron, กฎ sudo) ส่วนไฟร์วอลล์, Fail2ban, อีเมล, SSH และ sysctl คงไว้ตามเดิม บนเซิร์ฟเวอร์ที่มีแผงควบคุม สคริปต์จะเลือกโหมดนี้เอง
การรันแบบทดสอบ ในบัญชีผู้ใช้ คุณสามารถติ๊ก “การรันแบบทดสอบ” ได้ — จากนั้นคำสั่งจะแสดงเพียงว่าสคริปต์จะติดตั้งและเปลี่ยนแปลงอะไรบ้าง แล้วจบการทำงานโดยไม่แตะต้องอะไรเลย มีประโยชน์บนเซิร์ฟเวอร์ที่ตั้งค่าแล้ว: รันทดสอบก่อน แล้วค่อยรันจริงโดยไม่ต้องติ๊ก

2) รันบนเซิร์ฟเวอร์ในสิทธิ์ root ด้วยคำสั่งจากบัญชีผู้ใช้ — มีลักษณะดังนี้:

curl -fsSL "https://my.arciveo.com/install.php?token=YOUR_TOKEN" | sudo bash
เก็บคำสั่งไว้เป็นความลับ — เพราะผูกกับบัญชีของคุณ ลิงก์มีอายุการใช้งานจำกัด หากหมดอายุ ให้กด “ขอลิงก์ใหม่” ในบัญชีผู้ใช้
หลังตั้งค่าอัตโนมัติ เว็บเซิร์ฟเวอร์คือ Apache + PHP-FPM ส่วนเครื่องมือความปลอดภัยและงาน cron ติดตั้งและทำงานได้ทันที — ไม่ต้องตั้งค่าเพิ่มเติมใด ๆ

02. โดเมนและ DNS

เพื่อเปิดแดชบอร์ดที่แอดเดรสอย่าง monitor.example.com และรับ SSL ฟรี โดเมนต้องชี้มาที่เซิร์ฟเวอร์ ในแดชบอร์ดจัดการ DNS (ที่ผู้รับจดทะเบียนหรือผู้ให้บริการโฮสต์) ให้สร้าง A-record:

ชนิด: A ชื่อ: monitor (ซับโดเมน → monitor.example.com) หรือ @ (รูทของโดเมน → example.com) ค่า: 203.0.113.10 ← IP ของเซิร์ฟเวอร์คุณ TTL: 3600

หลังจากผ่านไปไม่กี่นาที (บางครั้งอาจถึงหนึ่งชั่วโมง) ให้ตรวจสอบว่าโดเมนชี้มาที่เซิร์ฟเวอร์แล้ว:

dig +short monitor.example.com # ควรคืนค่า IP ของคุณ # หรือถ้าไม่มี dig: getent hosts monitor.example.com
ใบรับรอง SSL (ขั้นตอน 06) ออกให้เฉพาะโดเมนเท่านั้น ดังนั้น DNS ต้องชี้มาที่เซิร์ฟเวอร์ ก่อน การออกใบรับรอง

03. อัปโหลดไฟล์แผงควบคุม

การตั้งค่าอัตโนมัติได้สร้างไดเรกทอรีแผงควบคุม /var/www/monitor และตั้งค่าเว็บไซต์ Apache ไว้แล้ว (DocumentRoot ชี้ไปที่รากของแผงควบคุม, PHP-FPM, AllowOverride สำหรับ .htaccess) ไม่ต้องสร้างไดเรกทอรีและ vhost แยกต่างหาก — เพียงอัปโหลดไฟล์และตั้งสิทธิ์
ไฟล์แผงควบคุม (ไฟล์บีบอัดของชุดติดตั้ง) ดาวน์โหลดได้หลังการซื้อในบัญชีผู้ใช้ที่ 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 (หรือระบุโดเมนในช่อง “โดเมนแผงควบคุม” ในบัญชีผู้ใช้) หากไม่ได้ส่งโดเมน — แผงควบคุมจะตอบสนองทุกโฮสต์และผ่าน IP ส่วน ServerName นั้น certbot จะกำหนดให้ตอนออก SSL (ขั้นตอน 06) ไม่ต้องติดตั้งใหม่แต่อย่างใด
ตั้งสิทธิ์ให้ไฟล์ — เป็นขั้นตอนบังคับ หากอัปโหลดในนาม root หรือผ่าน SFTP ไฟล์จะเป็นของ root และเว็บเซิร์ฟเวอร์ (www-data) จะอ่านไม่ได้ — แผงควบคุมจะเปิดขึ้นมาว่างเปล่าหรือแสดงข้อผิดพลาด 403 (ในบันทึก: .htaccess unreadable / directory not executable) คำสั่งด้านล่างแก้ปัญหานี้ได้:
# ปรับสิทธิ์ของ webroot ทั้งหมดให้เป็นมาตรฐาน: ไดเรกทอรีที่ root สร้างไว้ # เว็บเซิร์ฟเวอร์ (www-data) เข้าไม่ได้ — หากไม่ทำ แผงควบคุมจะแสดงหน้าว่างหรือ 403 cd /var/www/monitor # สร้างโฟลเดอร์ทำงานก่อน chown — ไม่เช่นนั้นไดเรกทอรีใหม่จะยังเป็น root:root # และเมื่อ chmod 750 เว็บเซิร์ฟเวอร์ (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 เฉพาะผู้ใช้ของคุณ (แนะนำ) สิทธิ์เขียนมีเฉพาะคุณคนเดียว เว็บเซิร์ฟเวอร์ยังคงเขียนทับโค้ดของแผงควบคุมไม่ได้:

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 ง่ายกว่า แต่เว็บเซิร์ฟเวอร์ก็ได้สิทธิ์เขียนไฟล์ของแผงควบคุมด้วย หากมีช่องโหว่ใน PHP โค้ดอาจถูกสับเปลี่ยนได้ ลำดับคำสั่งมีความสำคัญ — config.php และโฟลเดอร์ทำงานจะถูกปิดเป็นลำดับสุดท้าย:

sudo usermod -aG www-data deploy # สิทธิ์เขียนของกลุ่ม + setgid (บิต 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. ฐานข้อมูล กำหนดรหัสผ่านเพียงครั้งเดียวใน DBPASS แล้วนำไปแทนในทุกบรรทัด # วางบล็อกลงในเทอร์มินัลทั้งหมด; sudo mysql เข้าเป็น root ผ่าน unix-socket # (ไม่ต้องใช้รหัสผ่าน root) อย่าใช้ `sudo mysql -u root -p` แบบโต้ตอบ # ด้วยการคัดลอกวาง — เพราะบรรทัด SQL จะถูกส่งเข้าไปเป็นรหัสผ่านและหายไป DBPASS='CHOOSE_A_PASSWORD' # ← เปลี่ยนเฉพาะบรรทัดนี้ 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 # ตรวจสอบ (ควรแสดง monitor_db): mysql -u monitor_user -p"$DBPASS" -e "SHOW DATABASES;" # นำรหัสผ่านเดียวกันนี้ไปกรอกใน config.php → DB_PASS.
ไม่ต้องนำเข้าสคีมา — แดชบอร์ดจะสร้างตารางและบัญชี admin ให้เองเมื่อเปิดในเบราว์เซอร์ครั้งแรก (จาก database/db.sql) หากฐานข้อมูลว่างเปล่า
sudo สำหรับเว็บเซิร์ฟเวอร์ การตั้งค่าอัตโนมัติได้กำหนดไว้แล้ว — โมดูลจะเห็นข้อมูลระบบทันที ต้องตั้งค่า sudo แยกต่างหากเฉพาะเมื่อ PHP ทำงานภายใต้ผู้ใช้ที่ไม่ใช่มาตรฐาน (ไม่ใช่ www-data) เท่านั้น

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', 'Asia/Bangkok'); // เขตเวลาของคุณ // --- เวลาเซสชัน --- 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 — เป็นไฟล์ลับ (มีรหัสผ่านฐานข้อมูลอยู่ในนั้น) ไฟล์นี้อยู่ที่รากของแดชบอร์ดซึ่งเป็นเว็บรูท แต่ถูกปิดกั้นไว้: สิทธิ์ 640 (ตั้งไว้ในขั้นตอน 03) และการห้ามอย่างชัดเจนใน .htaccess ที่ราก อย่านำไปวางในรีโพซิทอรีสาธารณะและอย่าส่งให้ฝ่ายสนับสนุนพร้อมรหัสผ่านจริง
รายละเอียดของพารามิเตอร์ทั้งหมด — ดูใน FAQ: “ไฟล์ config.php — การตั้งค่าทั้งหมดของแดชบอร์ด”

06. ออกใบรับรอง SSL (HTTPS)

แดชบอร์ดทำงานผ่าน HTTPS เท่านั้น เซสชันการเข้าสู่ระบบใช้คุกกี้แบบปลอดภัย และ WebAuthn (2FA) ตามมาตรฐานจะทำงานเฉพาะบน HTTPS เท่านั้น คุณจะไม่สามารถเข้าสู่ระบบผ่าน http:// ได้

certbot และปลั๊กอินสำหรับ Apache ถูกติดตั้งไว้แล้วโดยการตั้งค่าอัตโนมัติ DNS ของโดเมนควรชี้มาที่เซิร์ฟเวอร์แล้ว (ขั้นตอน 02) ออกใบรับรองในคำสั่งเดียว:

sudo certbot --apache -d monitor.example.com
สิ่งที่ certbot จะถาม:
  1. Enter email address — อีเมลของคุณ (การแจ้งเตือนใบรับรองหมดอายุจะส่งไปที่นี่)
  2. Terms of Service … (Y)es/(N)oY
  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-… จากบัญชีผู้ใช้ไปเปิดใช้กับโดเมนของคุณ แล้ววางคีย์ใน “การตั้งค่า” → “ลิขสิทธิ์” รายละเอียด
  5. ตั้งค่าการแจ้งเตือน — Telegram และ/หรือ Email ใน “การตั้งค่า” รายละเอียด
  6. ลบตัวติดตั้ง public/start_db.php หากยังเหลืออยู่: มันให้สร้างฐานข้อมูลใหม่ได้โดยไม่ต้องล็อกอิน ตราบใดที่ไฟล์ยังอยู่ในรูทของแดชบอร์ดหรือใน public/ แดชบอร์ดจะเตือนด้วยแบนเนอร์สีแดง
เสร็จแล้ว เครื่องมือความปลอดภัยทำงานอยู่แล้ว — แดชบอร์ดจะแสดงสถานะและคะแนนความปลอดภัยของเครื่องมือทันที คู่มือของแต่ละเครื่องมืออยู่ใน FAQ
Arcivéo - Security Monitor © 2026