Workshop นี้รวบรวมขั้นตอนการตั้งค่า VPS Server ใหม่ตั้งแต่ต้นจนพร้อมใช้งาน Production ครอบคลุมตั้งแต่การ Login ครั้งแรก, ตั้งค่า User และ SSH ที่ปลอดภัย, ติดตั้ง Firewall, ปรับแต่ง System, จนถึงติดตั้ง Web Server พร้อม SSL ทำให้สามารถนำไปใช้งานได้จริงโดยไม่ต้องค้นหาจากหลายแหล่ง
บทความนี้เหมาะสำหรับผู้ที่เพิ่งได้รับ VPS Server ใหม่และต้องการ Checklist ครบจบในที่เดียว แต่ละขั้นตอนมีคำอธิบายว่าทำไมต้องทำและสิ่งที่ควรตรวจสอบ
ขั้นตอนที่ 1 — Login ครั้งแรกและตรวจสอบ Server
# Login ด้วย root (ครั้งแรก)
ssh root@YOUR_SERVER_IP
# ตรวจสอบ OS และ Kernel
cat /etc/os-release
uname -r
# ตรวจสอบ Resources ที่มี
nproc # จำนวน CPU cores
free -h # RAM ทั้งหมด
df -h # Disk space
ip addr show # IP Address
# ตรวจสอบ Uptime และ Load
uptime
top -bn1 | head -5
ขั้นตอนที่ 2 — อัพเดต System และติดตั้ง Package พื้นฐาน
# Ubuntu/Debian
apt update && apt upgrade -y
# ติดตั้ง Package พื้นฐานที่ใช้บ่อย
apt install -y \
curl wget git vim htop \
net-tools dnsutils \
unzip tar gzip \
fail2ban ufw \
chrony \
build-essential
# RHEL/Rocky/AlmaLinux
dnf update -y
dnf install -y \
curl wget git vim htop \
net-tools bind-utils \
unzip tar \
fail2ban firewalld \
chrony \
gcc make
# ตั้งค่า Timezone
timedatectl set-timezone Asia/Bangkok
timedatectl status
# เริ่ม Chrony (NTP Sync)
systemctl enable --now chrony
chronyc tracking
# ตั้งค่า Hostname
hostnamectl set-hostname web-prod-01
echo "127.0.1.1 web-prod-01" >> /etc/hosts
ขั้นตอนที่ 3 — สร้าง User และตั้งค่า Sudo
การใช้งาน root โดยตรงตลอดเวลาเป็นความเสี่ยง ควรสร้าง User ทั่วไปที่มีสิทธิ์ sudo และปิด root login
# สร้าง User ใหม่
useradd -m -s /bin/bash -G sudo deploy
# หรือบน RHEL: useradd -m -s /bin/bash -G wheel deploy
# ตั้ง Password
passwd deploy
# ตรวจสอบ sudo ทำงานได้
su - deploy
sudo whoami # ควรได้ root
exit
ขั้นตอนที่ 4 — ตั้งค่า SSH Key Authentication
# บนเครื่อง Local (ไม่ใช่ Server) — สร้าง SSH Key ถ้ายังไม่มี
ssh-keygen -t ed25519 -C "deploy@web-prod-01"
# Copy Public Key ไปยัง Server
ssh-copy-id -i ~/.ssh/id_ed25519.pub deploy@YOUR_SERVER_IP
# ทดสอบ Login ด้วย Key
ssh deploy@YOUR_SERVER_IP
# บน Server — แก้ไข SSH Config เพื่อความปลอดภัย
vim /etc/ssh/sshd_config
# ค่าที่ต้องเปลี่ยน:
# Port 2222 # เปลี่ยน Port (ไม่ใช่ 22)
# PermitRootLogin no # ปิด root login
# PasswordAuthentication no # ปิด password login
# PubkeyAuthentication yes # เปิดเฉพาะ Key
# MaxAuthTries 3
# LoginGraceTime 30
# รีสตาร์ท SSH (อย่าปิด session เดิมก่อนทดสอบ!)
systemctl restart sshd
# เปิด Terminal ใหม่ ทดสอบ Login ด้วย User และ Port ใหม่
# ssh -p 2222 deploy@YOUR_SERVER_IP
ขั้นตอนที่ 5 — ตั้งค่า Firewall
# Ubuntu — ใช้ UFW
# อนุญาต SSH Port ใหม่ก่อน (อย่าลืม!)
ufw allow 2222/tcp comment "SSH"
ufw allow 80/tcp comment "HTTP"
ufw allow 443/tcp comment "HTTPS"
# เปิด Firewall
ufw enable
ufw status verbose
# ตรวจสอบว่ายังเชื่อมต่อ SSH ได้
# RHEL/Rocky — ใช้ firewalld
systemctl enable --now firewalld
# เปลี่ยน SSH Port
firewall-cmd --permanent --add-port=2222/tcp
firewall-cmd --permanent --remove-service=ssh # ลบ Port 22
# เพิ่ม HTTP/HTTPS
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
firewall-cmd --reload
firewall-cmd --list-all
ขั้นตอนที่ 6 — ตั้งค่า Fail2ban
# สร้าง jail.local (อย่าแก้ jail.conf)
cat > /etc/fail2ban/jail.local <<'EOF'
[DEFAULT]
bantime = 1h
findtime = 10m
maxretry = 5
banaction = iptables-multiport
[sshd]
enabled = true
port = 2222
filter = sshd
maxretry = 3
bantime = 24h
EOF
systemctl enable --now fail2ban
fail2ban-client status
ขั้นตอนที่ 7 — ปรับแต่ง System Parameters (sysctl)
cat > /etc/sysctl.d/99-server-tuning.conf <<'EOF'
# Network Security
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.icmp_echo_ignore_broadcasts = 1
net.ipv4.tcp_syncookies = 1
# Network Performance
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.ip_local_port_range = 1024 65535
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 300
# File System
fs.file-max = 2097152
vm.swappiness = 10
EOF
sysctl -p /etc/sysctl.d/99-server-tuning.conf
ขั้นตอนที่ 8 — เพิ่ม Swap (ถ้า RAM น้อย)
# ตรวจสอบ RAM ถ้าน้อยกว่า 2GB ควรเพิ่ม Swap
free -h
# สร้าง Swap File 2GB
fallocate -l 2G /swapfile
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
# ให้ Mount อัตโนมัติเมื่อ Boot
echo "/swapfile none swap sw 0 0" >> /etc/fstab
# ตรวจสอบ
swapon --show
free -h
ขั้นตอนที่ 9 — ติดตั้ง Nginx และ PHP-FPM
# Ubuntu
apt install -y nginx
systemctl enable --now nginx
# ติดตั้ง PHP 8.2 (ถ้าต้องการ)
add-apt-repository ppa:ondrej/php -y
apt install -y php8.2-fpm php8.2-mysql php8.2-xml \
php8.2-mbstring php8.2-curl php8.2-zip php8.2-gd
systemctl enable --now php8.2-fpm
# ทดสอบ Nginx
curl -I http://localhost
# สร้าง Virtual Host พื้นฐาน
cat > /etc/nginx/sites-available/example.com <<'NGINXEOF'
server {
listen 80;
server_name example.com www.example.com;
root /var/www/example.com;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
}
location ~ /\.ht {
deny all;
}
}
NGINXEOF
ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
mkdir -p /var/www/example.com
chown -R www-data:www-data /var/www/example.com
nginx -t && systemctl reload nginx
ขั้นตอนที่ 10 — ติดตั้ง SSL ด้วย Let’s Encrypt
# ติดตั้ง Certbot
apt install -y certbot python3-certbot-nginx
# ขอ SSL Certificate (ต้อง DNS ชี้มาที่ Server แล้ว)
certbot --nginx -d example.com -d www.example.com \
--email [email protected] \
--agree-tos \
--non-interactive
# ตรวจสอบ Auto-renew
systemctl list-timers | grep certbot
# หรือทดสอบ: certbot renew --dry-run
ขั้นตอนที่ 11 — ติดตั้ง MariaDB
# ติดตั้ง MariaDB
apt install -y mariadb-server mariadb-client
systemctl enable --now mariadb
# Secure Installation (ตอบ Y ทุกข้อ)
mysql_secure_installation
# สร้าง Database และ User สำหรับ Application
mysql -u root -p <<'SQL'
CREATE DATABASE appdb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'appuser'@'localhost' IDENTIFIED BY 'StrongPassword123!';
GRANT ALL PRIVILEGES ON appdb.* TO 'appuser'@'localhost';
FLUSH PRIVILEGES;
SQL
# ทดสอบ Login
mysql -u appuser -p appdb -e "SELECT 1;"
ขั้นตอนที่ 12 — ตั้งค่า Automated Backup
cat > /usr/local/bin/daily-backup.sh <<'EOF'
#!/bin/bash
BACKUP_DIR="/backup/$(date +%Y%m%d)"
mkdir -p "$BACKUP_DIR"
# Backup Web Files
tar czf "${BACKUP_DIR}/webfiles.tar.gz" /var/www/
# Backup Database
mysqldump --all-databases \
--single-transaction \
--quick | gzip > "${BACKUP_DIR}/all_db.sql.gz"
# ลบ Backup เก่ากว่า 7 วัน
find /backup -maxdepth 1 -type d -mtime +7 -exec rm -rf {} \;
echo "Backup completed: ${BACKUP_DIR}"
EOF
chmod +x /usr/local/bin/daily-backup.sh
# ตั้ง Cron — Backup ทุกวัน 02:00
echo "0 2 * * * root /usr/local/bin/daily-backup.sh >> /var/log/backup.log 2>&1" \
> /etc/cron.d/daily-backup
ขั้นตอนที่ 13 — ตรวจสอบความพร้อมก่อนใช้งาน
cat > /usr/local/bin/server-health-check.sh <<'EOF'
#!/bin/bash
echo "=== Server Health Check ==="
HOSTNAME=$(hostname)
echo "Host: $HOSTNAME | $(date)"
echo ""
echo "--- Resources ---"
echo "CPU cores: $(nproc)"
free -h | grep Mem
df -h / | tail -1
echo ""
echo "--- Services ---"
for svc in nginx php8.2-fpm mariadb fail2ban; do
STATUS=$(systemctl is-active "$svc" 2>/dev/null)
if [ "$STATUS" = "active" ]; then
echo "OK: $svc running"
else
echo "FAIL: $svc $STATUS"
fi
done
echo ""
echo "--- Firewall ---"
if ufw status | grep -q "Status: active"; then
echo "OK: UFW active"
else
echo "FAIL: UFW inactive"
fi
echo ""
echo "--- SSL ---"
certbot certificates 2>/dev/null | grep -E "Domains|VALID|EXPIRED" || echo "No certificates"
echo ""
echo "--- Backup ---"
LAST_BACKUP=$(ls -t /backup/ 2>/dev/null | head -1)
if [ -n "$LAST_BACKUP" ]; then
echo "OK: Last backup $LAST_BACKUP"
else
echo "FAIL: No backup found"
fi
echo ""
echo "=== Check Complete ==="
EOF
chmod +x /usr/local/bin/server-health-check.sh
/usr/local/bin/server-health-check.sh
สรุป Checklist ทั้งหมด
Workshop นี้ครอบคลุม 13 ขั้นตอนหลักในการ Setup VPS Server ใหม่ ได้แก่ Login และตรวจสอบ Server, อัพเดตระบบ, สร้าง User ที่ปลอดภัย, ตั้งค่า SSH Key, Firewall, Fail2ban, ปรับแต่ง sysctl, Swap, Nginx + PHP, SSL, MariaDB, Backup อัตโนมัติ และการตรวจสอบความพร้อม ลำดับขั้นตอนสำคัญมาก — ควรตั้งค่า SSH และ Firewall ก่อน แล้วค่อยติดตั้ง Service เพื่อป้องกันช่องโหว่ระหว่างการตั้งค่า
แนะนำบริการ DE
Workshop นี้ใช้งานได้กับ Cloud VPS ของ DE ที่ให้ Root Access เต็มรูปแบบ สามารถทำตามทุกขั้นตอนตั้งแต่ต้นจนถึงระบบที่พร้อม Production ได้โดยตรง รองรับทั้ง Ubuntu และ Rocky Linux ตามที่ต้องการ
สำหรับผู้ที่ต้องการโฮสต์เว็บไซต์โดยไม่ต้องตั้งค่าเองทั้งหมด Cloud Hosting ของ DE มีสภาพแวดล้อมที่พร้อมใช้งานตั้งแต่ต้น รองรับ PHP, SSL, และ Database โดยไม่ต้องผ่านขั้นตอน Setup ด้วยตัวเอง

