Linux Server ฉบับสมบูรณ์
ตั้งแต่ติดตั้งระบบจนถึงเปิดใช้งาน Server จริง

Linux Server ฉบับสมบูรณ์: ตั้งแต่ติดตั้งระบบจนถึงเปิดใช้งาน Server จริง
บทความนี้จัดทำขึ้นเป็นคู่มือเรียนรู้ Linux Server ตั้งแต่ระดับพื้นฐานจนถึงการติดตั้งบริการต่าง ๆ ที่ใช้ในองค์กร เช่น Web Server, Database Server, Application Server, DNS Server, File Server, Mail Server, Proxy Server, Container Server และระบบ Monitoring
แนวทางเรื่องลิขสิทธิ์: เนื้อหาจะเรียบเรียงขึ้นใหม่ด้วยภาษาของเราเอง ใช้คำสั่งและตัวอย่างที่สร้างขึ้นเพื่อการเรียนรู้ และอ้างอิงเอกสารทางเทคนิคจากแหล่งต้นฉบับที่ตรวจสอบได้ โดยจะไม่คัดลอกบทความหรือคู่มือของบุคคลอื่นมาทั้งชุด ทั้งนี้ การเป็นเอกสารทางการไม่ได้หมายความว่าเนื้อหาทุกส่วนไม่มีลิขสิทธิ์ จึงควรแยกการอ้างอิงข้อมูลออกจากการนำข้อความ รูปภาพ และเครื่องหมายการค้าของผู้อื่นมาใช้
คู่มือนี้จะใช้ Ubuntu Server LTS และ Rocky Linux/RHEL-compatible Linux เป็นตัวอย่างหลัก โดยแยกคำสั่งของแต่ละตระกูลให้ชัดเจน เพราะคำสั่งติดตั้งแพ็กเกจ การตั้งค่า Firewall และตำแหน่งไฟล์บางส่วนแตกต่างกัน
สารบัญ
ส่วนที่ 1: พื้นฐานและการเตรียม Server
Linux, Distribution, Hardware, IP Address, SSH และการติดตั้ง OS
ส่วนที่ 2: Network และ Web Server
IP, DNS, Firewall, Nginx, Apache, TLS/HTTPS และ Reverse Proxy
ส่วนที่ 3: Database และ Application Server
PostgreSQL, MySQL/MariaDB, Java, Node.js, PHP และ Python
ส่วนที่ 4: Server สำหรับบริการอื่น
SFTP, File Server, Samba, DNS, DHCP, Mail, Proxy และ Docker
ส่วนที่ 5: ดูแลระบบระดับ Production
Security, Log, Monitoring, Backup, Restore, High Availability และ Troubleshooting
1. ทำความเข้าใจ Linux Server ก่อนเริ่มติดตั้ง
Linux Server คือระบบปฏิบัติการ Linux ที่นำมาให้บริการแก่เครื่องหรือโปรแกรมอื่นผ่านเครือข่าย ตัวอย่างเช่น เครื่องหนึ่งให้บริการเว็บไซต์ อีกเครื่องให้บริการฐานข้อมูล และอีกเครื่องเก็บไฟล์สำรองข้อมูล
Clients / Users
Browser · Mobile App · Java Application
Network Layer
IP · Routing · DNS · Firewall · TLS
Web Server
Nginx / Apache
Database
PostgreSQL / MariaDB
Application
Java / Node.js / PHP
Storage
Files / Backup / Logs
1.1 Linux Distribution ที่ควรรู้จัก
| Distribution | เหมาะกับงาน | ระบบติดตั้งแพ็กเกจ |
|---|---|---|
| Ubuntu Server LTS | Web, Database, Application, Cloud | apt |
| Debian | Server ทั่วไป เน้นระบบที่เรียบง่าย | apt |
| Rocky Linux | Enterprise Server และระบบที่ต้องการความเข้ากันได้กับ RHEL | dnf |
| AlmaLinux | Enterprise Server ที่เข้ากันได้กับ RHEL | dnf |
| Red Hat Enterprise Linux (RHEL) | ระบบองค์กรที่ต้องการการสนับสนุนจากผู้ผลิต | dnf |
| SUSE Linux Enterprise Server | ระบบองค์กรและงาน Data Center | zypper |
ไม่จำเป็นต้องติดตั้งทุก Distribution ในเครื่องเดียว ควรเลือกให้ตรงกับมาตรฐานองค์กร ซอฟต์แวร์ที่ต้องใช้ ระยะเวลาสนับสนุน และความสามารถของทีมผู้ดูแล
1.2 โครงสร้างระบบที่ใช้ในบทความนี้
เพื่อให้ตัวอย่างนำไปทดลองได้ง่าย จะกำหนดสภาพแวดล้อมสมมติดังนี้
| รายการ | ค่าตัวอย่าง |
|---|---|
| OS | Ubuntu Server LTS |
| Hostname | app01 |
| IP ภายใน | 192.168.10.10 |
| Web Server | Nginx |
| Application | Java |
| Database | PostgreSQL |
| SSH | TCP port 22 |
| HTTP | TCP port 80 |
| HTTPS | TCP port 443 |
IP Address และชื่อเครื่องข้างต้นเป็นเพียงตัวอย่าง ต้องเปลี่ยนให้ตรงกับเครือข่ายจริงก่อนนำไปใช้
สำหรับการเรียนรู้ แนะนำให้เริ่มจาก Virtual Machine หรือเครื่องทดสอบที่ไม่มีข้อมูลสำคัญก่อน แล้วจึงนำขั้นตอนที่ผ่านการทดสอบไปใช้กับ Production
2. ติดตั้ง Linux Server และเตรียมระบบ
2.1 ติดตั้ง Ubuntu Server
ดาวน์โหลด ISO จากเว็บไซต์ทางการของ Ubuntu Server และติดตั้งบนเครื่องจริงหรือ Virtual Machine
ลำดับการติดตั้งโดยทั่วไปมีดังนี้:
เลือกภาษาและรูปแบบคีย์บอร์ด
กำหนด Network หรือเลือก DHCP เพื่อรับ IP อัตโนมัติ
กำหนด Storage และพาร์ทิชัน
กำหนด Hostname เช่น app01
สร้างบัญชีผู้ดูแลระบบ
เลือกติดตั้ง OpenSSH Server เพื่อบริหารจากระยะไกล
ติดตั้งระบบให้เสร็จและ Reboot
เอกสารติดตั้งจาก Ubuntu มีภาพและรายละเอียดตามขั้นตอนจริง
Ubuntu Server documentation
+1
2.2 ตรวจสอบระบบหลังติดตั้ง
เข้าสู่ระบบ Terminal แล้วทดลองคำสั่งต่อไปนี้
# ตรวจสอบเวอร์ชัน OS
cat /etc/os-release
# ตรวจสอบ Kernel
uname -r
# ตรวจสอบ Hostname
hostnamectl
# ตรวจสอบ CPU
lscpu
# ตรวจสอบ RAM
free -h
# ตรวจสอบ Disk
lsblk
df -h
# ตรวจสอบ IP Address
ip addr
# ตรวจสอบ Routing Table
ip route
คำสั่งเหล่านี้เป็นเครื่องมือพื้นฐานที่ควรใช้ก่อนติดตั้งบริการใด ๆ เพราะช่วยให้ทราบว่าเครื่องใช้ OS เวอร์ชันใด มีทรัพยากรเท่าใด และเชื่อมต่อเครือข่ายอย่างไร
2.3 อัปเดตแพ็กเกจ
Ubuntu/Debian:
sudo apt update
sudo apt upgrade
Rocky Linux/RHEL:
sudo dnf check-update
sudo dnf upgrade
คำสั่งตรวจสอบการอัปเดตอาจคืน Exit Code ที่แตกต่างกันตามผลลัพธ์ อย่าตีความว่าทุก Exit Code ที่ไม่ใช่ศูนย์หมายถึงระบบเสีย
ใน Production ควรทดสอบแพ็กเกจใหม่ในสภาพแวดล้อมทดสอบก่อน และวางแผน Restart หากมีการอัปเดต Kernel หรือบริการสำคัญ
2.4 ตั้งค่าเวลาและ Hostname
sudo hostnamectl set-hostname app01
timedatectl
หากต้องการกำหนดเขตเวลาไทย:
sudo timedatectl set-timezone Asia/Bangkok
timedatectl
การตั้งเวลาให้ถูกต้องสำคัญต่อ Log, Certificate, การตรวจสอบเหตุการณ์ และการวิเคราะห์ปัญหาข้ามหลาย Server
ส่วนที่ 3: Network, SSH และ Firewall
3. ติดตั้ง SSH Server เพื่อ Remote จากเครื่องอื่น
SSH ช่วยให้ผู้ดูแลระบบเชื่อมต่อ Linux Server จากเครื่องคอมพิวเตอร์เครื่องอื่นได้อย่างเข้ารหัส รวมถึงใช้ส่งไฟล์ด้วย scp และ sftp
Ubuntu Server documentation
ติดตั้งบน Ubuntu:
sudo apt update
sudo apt install openssh-server
ตรวจสอบสถานะ:
sudo systemctl status ssh
sudo systemctl enable --now ssh
sudo ss -lntp | grep ':22'
เชื่อมต่อจากเครื่อง Client:
ssh [email protected]
เปลี่ยน youruser และ IP ให้ตรงกับเครื่องจริง
เพิ่มความปลอดภัยให้ SSH
ใช้บัญชีผู้ใช้ส่วนตัวและสิทธิ์ sudo
ใช้ SSH Key สำหรับการเข้าถึงจากเครื่องที่เชื่อถือได้
จำกัดการเข้าถึง TCP port 22 จากเครือข่ายผู้ดูแล
ตรวจสอบการตั้งค่า SSH ก่อน Reload หรือ Restart
อย่าปิดการเข้าสู่ระบบด้วยรหัสผ่านจนกว่าจะทดสอบ SSH Key จาก Session ใหม่สำเร็จ
ก่อนแก้ไขการตั้งค่า:
sudo sshd -t
คำสั่งนี้ตรวจสอบไวยากรณ์ของการตั้งค่า SSH หากต้องการเปลี่ยนการตั้งค่าการยืนยันตัวตน ให้สำรองไฟล์เดิมและทดสอบใน Session แยกก่อนเสมอ เพื่อป้องกันการล็อกตัวเองออกจากเครื่อง
4. ตั้งค่า Firewall
Firewall ควบคุมว่าเครือข่ายใดสามารถเชื่อมต่อเข้ามายัง Server ได้บ้าง
Ubuntu: ใช้ UFW
ตรวจสอบสถานะก่อน:
sudo ufw status verbose
หากเป็นเครื่องใหม่และยังไม่มี Firewall Policy ให้กำหนดนโยบายอย่างระมัดระวัง โดยอนุญาต SSH ก่อนเปิดใช้งาน Firewall:
sudo ufw allow OpenSSH
sudo ufw enable
sudo ufw status numbered
สำหรับเครื่อง Web Server ที่ต้องเปิดเว็บไซต์:
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
อย่าเปิดพอร์ตทุกพอร์ตโดยไม่จำเป็น และหาก SSH ใช้พอร์ตอื่นต้องปรับกฎให้ตรงกับค่าจริงก่อนเปิด Firewall
Rocky Linux/RHEL: ใช้ firewalld
sudo systemctl status firewalld
sudo firewall-cmd --get-active-zones
sudo firewall-cmd --list-all
ตัวอย่างเปิดบริการ HTTP และ HTTPS แบบถาวร:
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload
ต้องตรวจสอบ Zone ที่ผูกกับ Network Interface จริง และอย่าเปลี่ยน SSH หรือ Firewall จากระยะไกลโดยไม่มีช่องทางกู้คืน
พอร์ต Server ที่พบบ่อย
| Port | Protocol | หน้าที่ |
|---|---|---|
| 22 | TCP | SSH / SFTP |
| 53 | UDP/TCP | DNS |
| 67/68 | UDP | DHCPv4 |
| 80 | TCP | HTTP |
| 123 | UDP | NTP |
| 143 | TCP | IMAP |
| 443 | TCP | HTTPS |
| 445 | TCP | SMB / Samba |
| 465, 587 | TCP | SMTP Submission |
| 993 | TCP | IMAPS |
| 5432 | TCP | PostgreSQL ค่าเริ่มต้น |
| 3306 | TCP | MySQL/MariaDB ค่าเริ่มต้น |
| 6379 | TCP | Redis ค่าเริ่มต้น |
| 9100 | TCP | Node Exporter ค่าเริ่มต้น |
พอร์ตเหล่านี้เป็นค่าเริ่มต้นที่พบได้ทั่วไป ไม่ได้หมายความว่าทุกบริการควรเปิดให้เข้าถึงจากอินเทอร์เน็ต โดยเฉพาะ Database, Cache และ Monitoring ควรจำกัดให้อยู่ในเครือข่ายที่ได้รับอนุญาต
ส่วนที่ 4: ติดตั้ง Web Server
Web Server ใช้รับ HTTP Request จาก Browser หรือ Application แล้วส่งกลับเป็นหน้าเว็บ ไฟล์ หรือส่งต่อคำขอไปยังโปรแกรมอื่น
5. ติดตั้ง Nginx Server
Nginx สามารถให้บริการไฟล์เว็บไซต์ ทำ Reverse Proxy และส่งคำขอไปยัง Application Server ได้
5.1 ติดตั้ง Nginx บน Ubuntu
sudo apt update
sudo apt install nginx
sudo systemctl enable --now nginx
sudo systemctl status nginx
บน Rocky Linux/RHEL สามารถติดตั้งจาก Repository ที่เหมาะกับเวอร์ชันระบบได้ด้วย:
sudo dnf install nginx
sudo systemctl enable --now nginx
จากนั้นเปิด HTTP ใน Firewall ตามระบบที่ใช้
5.2 ทดสอบ Web Server
curl -I http://127.0.0.1/
หากบริการทำงานอยู่ อาจเห็น HTTP Status เช่น 200 OK หรือ Redirect Status ที่เหมาะสม
ไฟล์เว็บไซต์เริ่มต้นของ Ubuntu มักอยู่ที่:
/var/www/html/
สร้างหน้าเว็บตัวอย่าง:
echo '<h1>Linux Server is Running</h1>' \
| sudo tee /var/www/html/index.html
ทดสอบจากเครื่อง Client:
curl http://192.168.10.10/
หากเรียกจาก Browser ให้ใช้ http://192.168.10.10/ โดยต้องอยู่ในเครือข่ายที่เข้าถึง IP นี้ได้
5.3 ตรวจสอบ Log
บน Ubuntu ที่ติดตั้ง Nginx จากแพ็กเกจมาตรฐาน:
sudo tail -f /var/log/nginx/access.log
sudo tail -f /var/log/nginx/error.log
access.log แสดงคำขอที่เข้ามา
error.log แสดงปัญหาการทำงานและรายละเอียดข้อผิดพลาด
หากเปิดเว็บไซต์ไม่ได้ ควรตรวจสอบสถานะ Service, Log, IP Address, Routing และ Firewall ไม่ควรสรุปว่าเป็นปัญหาของ Nginx ทันที
6. ติดตั้ง Apache HTTP Server
Apache เป็น Web Server อีกตัวที่นิยมใช้ในระบบเว็บไซต์และแอปพลิเคชัน
Apache HTTP Server Version 2.4
+1
Ubuntu:
sudo apt update
sudo apt install apache2
sudo systemctl enable --now apache2
sudo systemctl status apache2
Rocky Linux/RHEL:
sudo dnf install httpd
sudo systemctl enable --now httpd
sudo systemctl status httpd
ตรวจสอบการตอบสนอง:
curl -I http://127.0.0.1/
บน Ubuntu ไฟล์การตั้งค่าหลักอยู่ที่ /etc/apache2/ ส่วน Rocky Linux/RHEL โดยทั่วไปอยู่ที่ /etc/httpd/
ควรเลือก Nginx หรือ Apache? ทั้งสองสามารถให้บริการเว็บไซต์ได้ ไม่จำเป็นต้องติดตั้งทั้งคู่ หากใช้พอร์ตเดียวกันบน IP เดียวกันจะเกิดการชนกันได้ เว้นแต่จะออกแบบให้แยกพอร์ตหรือใช้ร่วมกันเป็น Reverse Proxy อย่างตั้งใจ
7. ติดตั้ง HTTPS ด้วย TLS Certificate
HTTPS ช่วยเข้ารหัสการรับส่งข้อมูลระหว่าง Client กับ Server และช่วยตรวจสอบตัวตนของเว็บไซต์
ก่อนออกใบรับรองสำหรับเว็บไซต์จริง ควรมี Domain Name ที่ชี้มายัง Server ถูกต้อง และเตรียมพอร์ตที่จำเป็นตามวิธีการตรวจสอบ Certificate
สำหรับ Nginx สามารถใช้ Certbot ช่วยติดตั้งและจัดการ Certificate จาก Let's Encrypt ได้ โดยวิธีติดตั้งควรเลือกให้ตรงกับ OS และ Web Server
Certbot
+1
หลังติดตั้งตามคำแนะนำทางการของระบบแล้ว ตัวอย่างคำสั่งสำหรับ Nginx คือ:
sudo certbot --nginx -d example.com
เปลี่ยน example.com เป็น Domain ที่คุณควบคุมและตั้ง DNS ไว้ถูกต้อง คำสั่งนี้จะเหมาะเมื่อมี Certbot และ Plugin สำหรับ Nginx ติดตั้งแล้ว
ตรวจสอบการต่ออายุ Certificate ตามวิธีที่ติดตั้ง:
sudo certbot renew --dry-run
อย่าคัดลอก Certificate หรือ Private Key จากเว็บไซต์อื่นมาใช้ และอย่าเปิดเผย Private Key ต่อสาธารณะ
ส่วนที่ 5: ติดตั้ง Database Server
8. PostgreSQL Server
PostgreSQL เป็นฐานข้อมูลเชิงสัมพันธ์ที่ใช้ได้กับระบบธุรกิจ เว็บไซต์ และ Java Application
8.1 ติดตั้งบน Ubuntu
sudo apt update
sudo apt install postgresql
sudo systemctl enable --now postgresql
sudo systemctl status postgresql
ตรวจสอบเวอร์ชัน:
sudo -u postgres psql -c "SELECT version();"
สร้าง Database และ User สำหรับระบบทดลอง:
sudo -u postgres psql
จากนั้นรัน SQL:
CREATE USER appuser WITH PASSWORD 'ChangeThis_TestPassword';
CREATE DATABASE appdb OWNER appuser;
\l
\du
\q
รหัสผ่านในตัวอย่างเป็นค่าทดลองเท่านั้น ต้องเปลี่ยนเป็นรหัสผ่านที่ปลอดภัยก่อนใช้งานจริง และไม่ควรใส่รหัสผ่านจริงในไฟล์ Source Code หรือประวัติคำสั่งที่ผู้อื่นเข้าถึงได้
8.2 ตรวจสอบการทำงาน
sudo -u postgres psql -d appdb
ภายใน psql ทดลอง:
SELECT current_database();
SELECT current_user;
\dt
หากต้องการเชื่อมต่อจากเครื่องอื่น ต้องกำหนด Listen Address, pg_hba.conf, Network ACL และ Firewall อย่างเหมาะสม ไม่ควรเปิด PostgreSQL สู่ Internet โดยตรงหากไม่มีเหตุจำเป็นและมาตรการป้องกันที่เพียงพอ
9. MySQL หรือ MariaDB Server
MySQL และ MariaDB เป็นฐานข้อมูลเชิงสัมพันธ์ที่นิยมใช้กับเว็บแอปพลิเคชัน
9.1 ติดตั้ง MySQL บน Ubuntu
sudo apt update
sudo apt install mysql-server
sudo systemctl enable --now mysql
sudo systemctl status mysql
ตรวจสอบเวอร์ชัน:
sudo mysql -e "SELECT VERSION();"
สร้างฐานข้อมูลและบัญชีสำหรับแอปพลิเคชัน:
CREATE DATABASE appdb;
CREATE USER 'appuser'@'localhost'
IDENTIFIED BY 'ChangeThis_TestPassword';
GRANT SELECT, INSERT, UPDATE, DELETE
ON appdb.*
TO 'appuser'@'localhost';
คำสั่งเหล่านี้ต้องรันผ่าน Client ที่มีสิทธิ์ผู้ดูแลฐานข้อมูล และรหัสผ่านต้องเปลี่ยนก่อนใช้งานจริง
คู่มือ MySQL มีขั้นตอนติดตั้งหลายวิธี รวมถึงการติดตั้งจาก Repository ของระบบและ Repository ของผู้ผลิต จึงควรเลือกวิธีเดียวให้เหมาะกับเวอร์ชันที่ต้องการ
dev.mysql.com
+1
9.2 เลือก PostgreSQL, MySQL หรือ MariaDB
| ลักษณะงาน | แนวทางเลือก |
|---|---|
| ระบบที่ใช้ PostgreSQL อยู่แล้ว | ใช้ PostgreSQL เวอร์ชันที่รองรับ |
| แอปพลิเคชันที่ออกแบบมาสำหรับ MySQL | ใช้ MySQL ที่เข้ากันได้ |
| ระบบเดิมที่ใช้ MariaDB | ตรวจสอบ Compatibility ก่อนอัปเกรดหรือย้าย |
| ต้องการย้าย Database | ทดสอบ Schema, SQL, Data Type, Driver และแผนกู้คืน |
ไม่ควรติดตั้งฐานข้อมูลหลายชนิดเพียงเพราะคิดว่าต้องมีทุกตัวใน Server เดียวกัน ควรติดตั้งเฉพาะบริการที่แอปพลิเคชันต้องการ
ส่วนที่ 6: ติดตั้ง Application Server
10. Java Application Server
สำหรับระบบที่พัฒนาด้วย Java สามารถรันโปรแกรมเป็น Service บน Linux โดยใช้ systemd เพื่อให้เริ่มทำงานหลัง Boot และสามารถตรวจสอบสถานะได้
ติดตั้ง Java Runtime จาก Repository ของ OS:
Ubuntu:
sudo apt update
sudo apt install openjdk-21-jre-headless
java -version
ตัวอย่างนี้ใช้ Java 21 หากแอปพลิเคชันต้องการ Java 8, 11, 17 หรือเวอร์ชันอื่น ต้องเลือก Runtime ให้ตรงกับระบบงานและนโยบายสนับสนุน
สมมติว่ามีไฟล์ JAR อยู่ที่ /opt/myapp/app.jar และต้องการสร้าง Service
สร้างไฟล์:
sudo nano /etc/systemd/system/myapp.service
ใส่เนื้อหาตัวอย่าง:
[Unit]
Description=My Java Application
After=network.target
[Service]
Type=simple
User=myapp
WorkingDirectory=/opt/myapp
ExecStart=/usr/bin/java -jar /opt/myapp/app.jar
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
ก่อนเปิดใช้งาน ต้องสร้างบัญชี myapp และกำหนดสิทธิ์อ่านไฟล์ JAR และโฟลเดอร์ที่จำเป็นให้เรียบร้อย
sudo systemctl daemon-reload
sudo systemctl enable --now myapp
sudo systemctl status myapp
ตรวจสอบ Log:
sudo journalctl -u myapp -n 100 --no-pager
sudo journalctl -u myapp -f
แนวทางนี้ใช้ได้กับ Java Application แบบทั่วไปที่รันผ่าน java -jar แต่หากเป็น Tomcat, WildFly หรือ Application Server เฉพาะ ควรใช้วิธีติดตั้งและตั้งค่าตามรูปแบบของซอฟต์แวร์นั้น
11. Node.js Server
Node.js เหมาะกับแอปพลิเคชันที่พัฒนาด้วย JavaScript หรือ TypeScript ฝั่ง Server
ควรเลือก Node.js รุ่นที่ยังได้รับการสนับสนุนและเข้ากันได้กับโปรเจกต์ โดยติดตั้งจากแหล่งที่เชื่อถือได้และตรวจสอบเวอร์ชันก่อนนำไปใช้จริง
node --version
npm --version
หากมีโปรเจกต์ที่เตรียมไว้แล้ว:
cd /opt/nodeapp
npm ci
จากนั้นสามารถกำหนด Service ด้วย systemd ตามรูปแบบเดียวกับ Java โดยให้รันด้วยบัญชีผู้ใช้ที่ไม่มีสิทธิ์ผู้ดูแลระบบ และจัดเก็บค่าลับไว้ในระบบจัดการ Secret ที่เหมาะสม
12. PHP Application Server
เว็บไซต์ PHP มักใช้งานร่วมกับ Nginx หรือ Apache และ PHP-FPM
Ubuntu ตัวอย่าง:
sudo apt update
sudo apt install php-fpm php-cli php-pgsql
หากใช้ MySQL ให้พิจารณา Driver ที่ตรงกับแอปพลิเคชัน เช่น php-mysql แทนหรือเพิ่มเติมตามความจำเป็น
ตรวจสอบเวอร์ชัน:
php -v
การตั้งค่า PHP-FPM และการเชื่อมต่อกับ Nginx ต้องอ้างอิง Socket หรือ Port ของ PHP-FPM ที่ติดตั้งจริง เพราะชื่อ Socket แตกต่างกันได้ตามเวอร์ชันและแพ็กเกจ
ส่วนที่ 7: File Server และบริการเครือข่าย
13. SFTP สำหรับส่งไฟล์อย่างปลอดภัย
SFTP เป็นการโอนไฟล์ผ่าน SSH จึงไม่จำเป็นต้องติดตั้ง FTP Server เพิ่ม หากต้องการเพียงให้ผู้ใช้ส่งไฟล์เข้าออกอย่างปลอดภัย
ตรวจสอบว่า SSH Server ทำงานอยู่:
sudo systemctl status ssh
ส่งไฟล์จาก Client:
sftp [email protected]
ภายใน SFTP Client สามารถใช้คำสั่ง เช่น:
ls
pwd
put report.txt
get result.txt
bye
ควรกำหนดสิทธิ์โฟลเดอร์ให้เหมาะสม และหากต้องการให้ผู้ใช้เข้าถึงเฉพาะพื้นที่ของตน ควรออกแบบบัญชีและการตั้งค่า SSH ให้รองรับข้อกำหนดนั้นอย่างรอบคอบ
14. Samba File Server
Samba ช่วยให้ Linux แชร์ไฟล์ผ่าน SMB สำหรับเครื่อง Windows และ Client ที่รองรับ
ติดตั้งบน Ubuntu:
sudo apt update
sudo apt install samba
sudo systemctl enable --now smbd
สร้างโฟลเดอร์ทดลอง:
sudo mkdir -p /srv/share
sudo chown root:root /srv/share
sudo chmod 2770 /srv/share
ตัวอย่างนี้ยังไม่ใช่การตั้งค่าสิทธิ์แชร์ที่สมบูรณ์ ต้องสร้างกลุ่มผู้ใช้ กำหนด ACL และปรับ Samba Configuration ก่อนเปิดใช้งาน
ไฟล์ตั้งค่าทั่วไปคือ:
/etc/samba/smb.conf
ควรจำกัดการเข้าถึง SMB ไว้ในเครือข่ายภายใน และไม่ควรเปิดพอร์ต 445 สู่ Internet โดยตรง
15. DNS Server
DNS Server ทำหน้าที่แปลงชื่อ Domain เป็น IP Address และอาจให้บริการ Reverse Lookup หรือการจัดการ Zone ตามรูปแบบที่ออกแบบไว้
ตัวอย่างซอฟต์แวร์ ได้แก่ BIND และ Unbound โดยมีหน้าที่หลักต่างกัน: BIND สามารถให้บริการ Authoritative DNS และ Recursive DNS ตามการตั้งค่า ส่วน Unbound มักใช้เป็น Recursive Resolver
ก่อนติดตั้ง DNS สำหรับองค์กร ควรออกแบบ:
Forward Zone และ Reverse Zone
Authoritative DNS กับ Recursive Resolver
การกำหนดสิทธิ์ Zone Transfer
การเปิด UDP/TCP port 53 ตามบทบาท
การสำรองไฟล์ Zone และ Configuration
ห้ามเปิด Recursive Resolver ให้บุคคลทั่วไปใช้งานโดยไม่มีการควบคุม เพราะอาจถูกนำไปใช้โจมตีระบบอื่นได้
16. DHCP Server
DHCP Server ใช้แจกจ่าย IP Address, Gateway, DNS และค่าการตั้งค่าเครือข่ายให้ Client
ตัวอย่างซอฟต์แวร์มีหลายชนิด เช่น Kea DHCP และบริการ DHCP ที่มากับอุปกรณ์เครือข่าย
ก่อนติดตั้ง ต้องตรวจสอบว่ามี DHCP Server ตัวอื่นในเครือข่ายอยู่แล้วหรือไม่ การเปิด DHCP Server ซ้ำในเครือข่ายเดียวกันโดยไม่ได้ออกแบบอาจทำให้เครื่อง Client ได้รับ IP หรือ Gateway ที่ไม่ถูกต้อง
สำหรับเครือข่ายองค์กร ควรทำงานร่วมกับผู้ดูแล Network เพื่อกำหนด Subnet, DHCP Range, Reservation และการป้องกัน DHCP Server ที่ไม่ได้รับอนุญาต
17. Mail Server
Mail Server ประกอบด้วยหลายส่วน ไม่ได้มีเพียงโปรแกรมรับส่งอีเมลตัวเดียว
SMTP: รับและส่งข้อความอีเมล
IMAP: ให้ Client เข้าถึงกล่องจดหมาย
Mail Delivery Agent: จัดเก็บหรือส่งต่อข้อความไปยังกล่องจดหมาย
Spam และ Malware Filtering: ช่วยกรองข้อความไม่พึงประสงค์
TLS: ปกป้องการรับส่งข้อมูล
DNS Records: MX, SPF, DKIM และ DMARC ช่วยกำหนดการส่งและตรวจสอบอีเมล
ตัวอย่างซอฟต์แวร์ ได้แก่ Postfix สำหรับ SMTP และ Dovecot สำหรับบริการ Mailbox/IMAP
Mail Server ที่เปิดให้ใช้งานจริงต้องมี Domain ที่ถูกต้อง การจัดการ Certificate การตรวจสอบการส่งอีเมล และการป้องกัน Open Relay หากต้องการเพียงส่งแจ้งเตือนจากระบบภายใน การใช้ SMTP Relay ขององค์กรอาจง่ายและปลอดภัยกว่าการดูแล Mail Server เอง
ส่วนที่ 8: Container Server และระบบ Deployment
18. Docker Server
Docker ใช้รันแอปพลิเคชันใน Container เพื่อแยกสภาพแวดล้อมของโปรแกรมออกจากกัน ช่วยให้การติดตั้งและการย้ายระบบทำได้เป็นมาตรฐานมากขึ้น
เอกสารติดตั้ง Docker Engine บน Linux มีขั้นตอนแยกตาม Distribution โดยตรง
18.1 ติดตั้ง Docker Engine
บน Ubuntu ให้ใช้วิธีติดตั้งจาก Repository ทางการของ Docker ตามเวอร์ชัน OS ที่รองรับ ขั้นตอนโดยทั่วไปประกอบด้วย:
เตรียม Repository และ GPG Key ตามเอกสารทางการ
ติดตั้ง Docker Engine และ Plugin ที่ต้องใช้
เปิดใช้งาน Service
ตรวจสอบการทำงาน
ตรวจสอบ Firewall และนโยบายเครือข่ายของ Container
หลังติดตั้ง:
sudo systemctl enable --now docker
sudo systemctl status docker
sudo docker version
ทดสอบด้วย Container ขนาดเล็ก:
sudo docker run --rm hello-world
คำสั่งนี้จะดาวน์โหลด Image หากยังไม่มีอยู่ในเครื่อง แล้วรันเพื่อแสดงข้อความทดสอบ
18.2 ตรวจสอบ Container
sudo docker ps
sudo docker ps -a
sudo docker images
sudo docker logs --tail 100 CONTAINER_NAME
เปลี่ยน CONTAINER_NAME เป็นชื่อ Container ที่มีอยู่จริง
18.3 รัน Web Server ใน Container
ตัวอย่าง:
sudo docker run -d \
--name web-test \
-p 127.0.0.1:8080:80 \
nginx
จากนั้นทดสอบบนเครื่อง Server:
curl -I http://127.0.0.1:8080/
ตัวอย่างนี้ผูกพอร์ตไว้ที่ Loopback Address ของ Server เท่านั้น ทำให้เครื่องอื่นในเครือข่ายไม่สามารถเชื่อมต่อผ่านพอร์ตนี้โดยตรงได้ตามปกติ เหมาะสำหรับการทดลองหรือให้ Reverse Proxy ภายในเครื่องเรียกใช้งาน
ข้อควรระวังสำคัญ: การเผยแพร่พอร์ตของ Container อาจมีผลต่อกฎ Firewall ที่ตั้งไว้ จึงต้องตรวจสอบนโยบาย Packet Filtering ของ Docker และระบบ Firewall ก่อนนำไปใช้จริง
18.4 Docker Compose
เมื่อแอปพลิเคชันมีหลายบริการ เช่น Web และ Database สามารถใช้ Compose เพื่อกำหนดโครงสร้างระบบไว้ในไฟล์เดียวได้
ตัวอย่างไฟล์ compose.yaml สำหรับทดลอง Web Server:
services:
web:
image: nginx:stable
ports:
- "127.0.0.1:8080:80"
restart: unless-stopped
เริ่มบริการ:
sudo docker compose up -d
sudo docker compose ps
sudo docker compose logs
ก่อนใช้ใน Production ควรกำหนด Image Version ที่ผ่านการทดสอบ จัดการ Persistent Storage สำรองข้อมูลที่จำเป็น และกำหนดวิธีอัปเดตและย้อนกลับเวอร์ชัน
ส่วนที่ 9: Monitoring, Logging และการดูแลระบบ
19. ตรวจสอบสถานะ Service ด้วย systemd
Linux Server ส่วนใหญ่ที่ใช้ Ubuntu หรือ Rocky Linux รุ่นปัจจุบันใช้ systemd ในการจัดการบริการ
คำสั่งพื้นฐาน:
# ตรวจสอบสถานะ
sudo systemctl status nginx
# เริ่มบริการ
sudo systemctl start nginx
# หยุดบริการ
sudo systemctl stop nginx
# Restart บริการ
sudo systemctl restart nginx
# โหลด Configuration ใหม่
sudo systemctl reload nginx
# ตั้งให้เริ่มทำงานหลัง Boot
sudo systemctl enable nginx
# ตรวจสอบว่าตั้งให้เริ่มอัตโนมัติหรือไม่
sudo systemctl is-enabled nginx
อย่าใช้ restart แทน reload โดยอัตโนมัติทุกครั้ง เพราะการ Restart อาจทำให้การเชื่อมต่อที่กำลังใช้งานอยู่ได้รับผลกระทบ ขึ้นอยู่กับบริการนั้น ๆ
20. ตรวจสอบ CPU, Memory, Disk และ Network
CPU
uptime
top
ดู Load Average และ Process ที่ใช้ CPU สูง
Memory
free -h
vmstat 1 5
ตรวจสอบ RAM, Swap และแนวโน้มการใช้ทรัพยากร
Disk
df -h
df -i
lsblk
ตรวจสอบพื้นที่ว่าง Inode และอุปกรณ์จัดเก็บข้อมูล
Network
ip -s link
ss -lntup
ตรวจสอบสถิติ Interface และ Port ที่กำลังเปิดรับการเชื่อมต่อ
คำสั่งเหล่านี้เป็นจุดเริ่มต้น ไม่ใช่เครื่องมือ Monitoring ที่ครบถ้วนสำหรับระบบขนาดใหญ่ หากต้องการกราฟย้อนหลังและการแจ้งเตือน ควรติดตั้งระบบ Monitoring เพิ่มเติม
21. ติดตั้งระบบ Monitoring
ตัวเลือกที่นิยมใช้ ได้แก่:
Prometheus
เก็บ Metrics จากระบบต่าง ๆ และรองรับการ Query ข้อมูลเพื่อสร้าง Alert
Grafana
สร้าง Dashboard สำหรับ CPU, Memory, Disk, Database และ Application
Zabbix
ใช้ตรวจสอบ Server, Network, Service และกำหนด Trigger สำหรับแจ้งเตือน
ระบบ Monitoring ที่ดีควรติดตามอย่างน้อย:
CPU และ Load Average
Memory และ Swap
Disk Space และ Inode
Network Throughput และ Packet Errors
สถานะ Service และ Health Check
จำนวน Database Connections
Query Latency และ Error Rate
อายุ Backup ล่าสุดและผลการทดสอบ Restore
ควรกำหนด Alert ให้สะท้อนความเสี่ยงทางธุรกิจ ไม่ใช่แจ้งเตือนทุกครั้งที่ทรัพยากรเพิ่มขึ้นชั่วคราว และควรแยก Monitoring Server ออกจากระบบที่กำลังตรวจสอบเมื่อเป็นไปได้
22. ตรวจสอบ Log
สำหรับระบบที่ใช้ systemd:
# Log ของ Nginx
sudo journalctl -u nginx -n 100 --no-pager
# Log ของ PostgreSQL
sudo journalctl -u postgresql -n 100 --no-pager
# Log ของระบบในช่วง Boot ปัจจุบัน
sudo journalctl -b -p warning
# ดู Log แบบต่อเนื่อง
sudo journalctl -f
ตำแหน่ง Log จริงอาจขึ้นอยู่กับการตั้งค่า Service และ Distribution จึงควรตรวจสอบไฟล์ Configuration ของบริการนั้น ๆ ด้วย
แนวทางจัดการ Log ที่ดี:
กำหนดอายุการเก็บ Log ให้เหมาะสม
ใช้ Log Rotation เพื่อควบคุมขนาดไฟล์
ป้องกัน Log เต็มจนกระทบพื้นที่ระบบ
จำกัดสิทธิ์การอ่าน Log ที่มีข้อมูลสำคัญ
ซิงโครไนซ์เวลาระหว่าง Server เพื่อให้นำ Log มาเทียบเหตุการณ์กันได้
ส่วนที่ 10: Backup, Security และ Disaster Recovery
23. วางแผน Backup Server
การสำรองข้อมูลต้องครอบคลุมมากกว่า Database เพราะระบบจริงยังมี Configuration, Application, Certificate, ไฟล์ผู้ใช้ และข้อมูลที่ใช้กู้คืนบริการ
| สิ่งที่ต้องสำรอง | ตัวอย่าง |
|---|---|
| Database | PostgreSQL, MySQL/MariaDB |
| Application | JAR, Source Release, Deployment Artifact |
| Configuration | Nginx, SSH, Firewall, systemd |
| User Data | ไฟล์เอกสาร รูปภาพ และไฟล์ที่ระบบสร้าง |
| Container | Compose Files, Image Version, Persistent Volumes |
| Security Configuration | รายการบัญชี สิทธิ์ และนโยบายระบบ |
| Recovery Documentation | ขั้นตอน Restore และลำดับเปิดบริการ |
ตัวอย่างสำรอง Configuration ที่ต้องการเก็บ:
sudo tar -czf /backup/server-config-$(date +%F).tar.gz \
/etc/nginx \
/etc/ssh \
/etc/systemd/system
ตัวอย่างนี้สมมติว่ามี /backup อยู่แล้ว และต้องตรวจสอบก่อนว่า Configuration ที่เก็บมีข้อมูลลับหรือไม่ ควรจำกัดสิทธิ์ไฟล์สำรองและเข้ารหัสตามความเหมาะสม
การสำรองไฟล์ Configuration เพียงอย่างเดียวไม่เพียงพอสำหรับกู้คืนระบบทั้งหมด ต้องมีแผนสำรองข้อมูลจริงและตรวจสอบว่าไฟล์สำรองสมบูรณ์
หลักการสำรองข้อมูลที่แนะนำ
มีสำเนาอย่างน้อยหนึ่งชุดแยกจาก Server ต้นทาง
ป้องกันไม่ให้ผู้ดูแลระบบที่ถูกยึดบัญชีลบ Backup ได้ทั้งหมด
เข้ารหัสข้อมูลสำรองที่มีข้อมูลสำคัญ
กำหนด Retention Policy
ทดสอบ Restore ในระบบแยก
บันทึกเวลาที่ใช้กู้คืนจริงเพื่อประเมิน RTO และ RPO
PostgreSQL มีวิธีสำรองหลายแบบ เช่น SQL Dump, File-System Backup และ Continuous Archiving ซึ่งเหมาะกับความต้องการกู้คืนต่างกัน
24. Security Hardening สำหรับ Linux Server
Security Hardening คือการลดจุดเสี่ยงของระบบให้เหลือเท่าที่จำเป็นต่อการใช้งาน
รายการตรวจสอบเบื้องต้น:
Security Checklist
0/10
อัปเดต OS และแพ็กเกจตามรอบที่กำหนด
ใช้บัญชีแยกตามหน้าที่และให้สิทธิ์เท่าที่จำเป็น
ตรวจสอบ SSH Key และการเข้าถึงจากระยะไกล
เปิดเฉพาะ Port ที่บริการต้องใช้
ไม่เปิด Database ให้เข้าถึงจาก Internet โดยไม่จำเป็น
ตรวจสอบ Permission ของไฟล์และโฟลเดอร์
กำหนด Log Rotation และตรวจสอบพื้นที่ดิสก์
สำรองข้อมูลและทดสอบ Restore
ตรวจสอบ Certificate และการต่ออายุ
กำหนดแผน Incident Response และ Recovery
คัดลอก Checklist
SELinux และ AppArmor
Linux บาง Distribution มีระบบ Mandatory Access Control เพื่อจำกัดสิ่งที่ Process สามารถเข้าถึงได้
Rocky Linux/RHEL ใช้ SELinux ในการควบคุมการเข้าถึงตาม Policy
Ubuntu ใช้ AppArmor ในการกำหนดข้อจำกัดให้โปรแกรมที่มี Profile
เมื่อ Application เปิดไฟล์ไม่ได้หรือ Bind Port ไม่สำเร็จ อย่ารีบปิดระบบความปลอดภัยทั้งหมด ควรตรวจสอบ Audit Log, Permission, Security Context และ Policy ที่เกี่ยวข้องก่อนแก้ไข
ส่วนที่ 11: แผนผังติดตั้ง Server สำหรับใช้งานจริง
ตัวอย่างต่อไปนี้เป็นโครงสร้างสำหรับองค์กรขนาดเล็กถึงกลาง ไม่จำเป็นต้องติดตั้งทุกบริการไว้บนเครื่องเดียว
Users / Mobile Applications
Reverse Proxy / Web Tier
Nginx · HTTPS · Access Control
Application Tier
Java · Node.js · PHP · Background Workers
Database Tier
PostgreSQL หรือ MySQL/MariaDB
Monitoring
Metrics · Logs · Alerts
Backup
Off-server · Restore Test
หลักการสำคัญของโครงสร้างนี้คือ Database ไม่ควรรับการเชื่อมต่อจากผู้ใช้อินเทอร์เน็ตโดยตรง แต่ควรรับจาก Application Server ที่ได้รับอนุญาตเท่านั้น
สำหรับระบบขนาดเล็ก สามารถรวม Web และ Application ไว้เครื่องเดียวกันได้ ส่วนระบบที่ต้องการความพร้อมใช้งานสูงควรพิจารณาแยกชั้นระบบ มี Load Balancer, Replica, Backup และขั้นตอน Failover ที่ทดสอบแล้ว
ส่วนที่ 12: Troubleshooting — เมื่อ Server ใช้งานไม่ได้
25. ตารางแก้ไขปัญหาเบื้องต้น
| อาการ | สิ่งที่ควรตรวจสอบ |
|---|---|
| SSH เข้าไม่ได้ | IP, Route, Firewall, sshd, Authentication |
| เว็บไซต์เข้าไม่ได้ | Nginx/Apache Status, DNS, Port, Access/Error Log |
| Application หยุด | systemctl status, journalctl, Runtime และ Configuration |
| Database Connection Failed | Service, Credentials, ACL, Network, Connection Limit |
| Disk เต็ม | df -h, df -i, Log, Backup, Database Storage |
| CPU สูง | top, uptime, Process และ Application Log |
| RAM ไม่พอ | free -h, vmstat, Process Memory และ Swap |
| HTTPS Certificate Error | Domain, Certificate Chain, เวลาเครื่อง และวันหมดอายุ |
| Container เข้าไม่ได้ | Container Status, Port Mapping, Network และ Firewall |
| DNS Resolve ไม่ได้ | DNS Records, Resolver, Routing และ Port 53 |
ตัวอย่างการตรวจสอบเมื่อ Web Server ใช้งานไม่ได้
เริ่มจากตรวจสถานะ:
sudo systemctl status nginx
ตรวจ Configuration:
sudo nginx -t
ตรวจพอร์ต:
sudo ss -lntp
ทดสอบจากเครื่อง Server:
curl -v http://127.0.0.1/
ตรวจ Error Log:
sudo journalctl -u nginx -n 100 --no-pager
sudo tail -n 100 /var/log/nginx/error.log
จากนั้นจึงตรวจ Firewall, DNS และเส้นทางเครือข่ายจาก Client หาก Local Request สำเร็จแต่ Client เชื่อมต่อไม่ได้ ปัญหาอาจอยู่ใน Firewall, Routing, DNS หรือ Network ACL แทนตัว Web Server เอง
ส่วนที่ 13: ลำดับการฝึกปฏิบัติ
หากต้องการเรียนรู้จนสามารถติดตั้งและดูแล Linux Server ได้จริง แนะนำให้ทำ Lab ตามลำดับนี้
Linux Server Lab Checklist
0/10
Lab 1 — Linux Foundation
ติดตั้ง Ubuntu Server, สร้างผู้ใช้, ตรวจ CPU/RAM/Disk และจัดการ Service
Lab 2 — Remote Administration
ติดตั้ง SSH, ทดสอบจาก Client และกำหนด Firewall
Lab 3 — Web Server
ติดตั้ง Nginx, สร้างเว็บไซต์ และตรวจ Access/Error Log
Lab 4 — Database Server
ติดตั้ง PostgreSQL หรือ MySQL สร้าง User/Database และทดลอง CRUD
Lab 5 — Application Server
รัน Java Application ผ่าน systemd และตรวจ Log
Lab 6 — HTTPS
ตั้ง Domain, DNS และ TLS Certificate บนเครื่องทดสอบ
Lab 7 — File Server
สร้างพื้นที่ SFTP หรือ Samba และทดสอบสิทธิ์ผู้ใช้
Lab 8 — Container
ติดตั้ง Docker และทดลอง Deploy Web Container
Lab 9 — Monitoring
ติดตาม CPU, RAM, Disk, Service และตั้ง Alert
Lab 10 — Backup & Recovery
สำรอง Database และ Configuration แล้วทดสอบ Restore บนเครื่องแยก
แหล่งอ้างอิงและการนำเนื้อหาไปใช้โดยไม่ละเมิดลิขสิทธิ์
คู่มือนี้ใช้แนวทางเรียบเรียงเนื้อหาใหม่ โดยอ้างอิงเอกสารทางเทคนิคจากผู้พัฒนาระบบและโครงการโดยตรง แหล่งต่อไปนี้เหมาะสำหรับตรวจสอบรายละเอียดเวอร์ชันและขั้นตอนล่าสุด
Ubuntu Server Documentation
การติดตั้ง OS, Network, SSH, Firewall, DNS, DHCP และ File Sharing
เอกสารทางการของ Ubuntu Server
Nginx Documentation
การติดตั้งและตั้งค่า Web Server, Static Content และ Reverse Proxy
เอกสารทางการของ Nginx
Apache HTTP Server Documentation
การติดตั้ง Virtual Hosts, Modules และการตั้งค่าเว็บไซต์
เอกสารทางการของ Apache
PostgreSQL Documentation
SQL, Database Administration, Backup, Restore และ Recovery
เอกสารทางการของ PostgreSQL
MySQL Documentation
การติดตั้ง การดูแลฐานข้อมูล และการจัดการ Service
เอกสารทางการของ MySQL
Docker Engine Documentation
การติดตั้ง Container Engine และการจัดการ Container บน Linux
เอกสารทางการของ Docker
Certbot / Electronic Frontier Foundation
วิธีออกและต่ออายุ Certificate สำหรับ HTTPS
คู่มือ Certbot