คู่มือใช้งาน / เผยแพร่เว็บแรก

ตั้งค่า VPS Ubuntu สำหรับเว็บไซต์ HTTPS แรก

ตั้งค่า VPS Ubuntu 24.04 LTS เครื่องใหม่เพื่อเผยแพร่เว็บไซต์สแตติกผ่าน Nginx และ HTTPS เริ่มจาก SSH key และบัญชีผู้ดูแลแยก จากนั้นตรวจ DNS ใบรับรอง และการกลับมาทำงานหลังรีบูต ขั้นตอนนี้ไม่ติดตั้งฐานข้อมูลหรือ runtime ของแอป

· อัปเดต · อ่านประมาณ 6 นาที

เนื้อหาในคู่มือนี้

เตรียมเครื่องใหม่ โดเมน และ console

ใช้ VPS ใหม่ที่ยังไม่มีเว็บสำคัญ มี public IPv4, SSH พอร์ต 22 และบัญชีเริ่มต้นที่ใช้ sudo ได้ พร้อมโดเมนที่คุณควบคุม สร้างคีย์ในหัวข้อถัดไปก่อนสร้างเครื่อง คำสั่งฝั่งคอมพิวเตอร์ใช้ Bash บน Linux, macOS หรือ WSL ส่วนคำสั่งเซิร์ฟเวอร์รันภายใน SSH

แทน 203.0.113.10 ด้วย IP จริง และ app.example.com ด้วย hostname ของคุณ ตัวอย่างใช้บัญชีเริ่มต้น ubuntu หากผู้ให้บริการใช้ชื่ออื่นต้องเปลี่ยน เปิด recovery console ก่อนแก้การเข้าถึง และหยุดหาก path ตัวอย่างเป็นของงานเดิม อิมเมจ Oracle Ubuntu ต้องข้ามชุด UFW ตามคำอธิบายด้านล่าง

สร้างคีย์ก่อนสร้าง VPS

บนคอมพิวเตอร์ เลือก passphrase และใช้ชื่อไฟล์ใหม่หากมี ubuntu_vps อยู่แล้ว เปลี่ยนชื่อให้ตรงกันตลอดทุกขั้นตอน

mkdir -p ~/.ssh
ssh-keygen -t ed25519 -f ~/.ssh/ubuntu_vps
cat ~/.ssh/ubuntu_vps.pub

สร้าง Ubuntu 24.04 VPS โดยใส่ public key จากไฟล์ .pub ในช่อง SSH key ของผู้ให้บริการ เก็บ private key ไว้บนคอมพิวเตอร์ คู่มือนี้ใช้เส้นทางเครื่องใหม่ หากมีเครื่องเดิมและไม่มีสิทธิ์เข้า ให้ใช้ recovery ของผู้ให้บริการก่อน

ใน recovery console ที่เชื่อถือได้ ตรวจ fingerprint ของ host key ชนิดเดียวกับที่ SSH แจ้ง เช่น Ed25519

sudo ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pub

บนคอมพิวเตอร์ เชื่อมต่อใหม่และเปรียบเทียบ fingerprint ก่อนตอบรับ

ssh -i ~/.ssh/ubuntu_vps ubuntu@203.0.113.10

จากอีกเทอร์มินัลบนคอมพิวเตอร์ ส่ง public key สำหรับผู้ดูแลที่กำลังจะสร้าง

scp -i ~/.ssh/ubuntu_vps ~/.ssh/ubuntu_vps.pub ubuntu@203.0.113.10:ubuntu-vps-admin.pub

สร้างผู้ดูแลและทดสอบบัญชีแยก

บนเซิร์ฟเวอร์ ตรวจ getent passwd deploy ก่อน ถ้ามีบัญชีนี้แล้ว ให้ใช้ชื่อที่ยังไม่ถูกใช้และเปลี่ยนชื่อ path และกลุ่มทุกจุด เพื่อไม่เขียนทับคีย์ของคนอื่น ตรวจระบบ ทบทวนอัปเดต และตั้งรหัสผ่านที่แข็งแรงสำหรับ sudo ของบัญชีใหม่

cat /etc/os-release
free -h
df -h /
sudo apt update
sudo apt upgrade
sudo adduser deploy
sudo usermod -aG sudo deploy
sudo install -d -m 700 -o deploy -g deploy /home/deploy/.ssh
sudo install -m 600 -o deploy -g deploy ~/ubuntu-vps-admin.pub /home/deploy/.ssh/authorized_keys

จากเทอร์มินัลใหม่บนคอมพิวเตอร์ เชื่อมต่อเป็นผู้ดูแล

ssh -i ~/.ssh/ubuntu_vps deploy@203.0.113.10

ภายใน session ใหม่นี้ ทดสอบ sudo ควรแสดง root เมื่อใส่รหัสผ่านของ deploy ถูกต้อง เก็บช่องทางเข้าเดิมไว้ และทำขั้นตอนต่อไปใน session ผู้ดูแลนี้

sudo whoami

ติดตั้ง Nginx และเลือกวิธีไฟร์วอลล์ให้ตรงอิมเมจ

บนเซิร์ฟเวอร์ ติดตั้งและเปิด Nginx โดยรักษา session SSH และ recovery console ไว้

sudo apt install nginx
sudo systemctl enable --now nginx

ในไฟร์วอลล์ของผู้ให้บริการ อนุญาต TCP 22 จากตำแหน่งดูแลระบบ และ TCP 80/443 สำหรับผู้ชมเว็บ ถ้าใช้ SSH พอร์ตอื่นต้องรักษากฎพอร์ตนั้นไว้ กฎเครือข่ายไม่ได้เปิดพอร์ตที่ guest firewall ยังบล็อกอยู่

สำหรับ Oracle Cloud Ubuntu: ข้ามคำสั่ง UFW ทั้งชุดด้านล่าง รักษากฎ iptables เดิม โดยเฉพาะ iSCSI สำหรับ boot/block volume ใช้ OCI security lists หรือ NSG ร่วมกับ guest rules ตามเอกสารเพื่อเปิด HTTP/HTTPS อย่าล้างกฎหรือเปลี่ยนแพ็กเกจไฟร์วอลล์ของอิมเมจ

สำหรับ Ubuntu ใหม่ที่ผู้ให้บริการรองรับ UFW: ใช้ชุดนี้เฉพาะเมื่อไม่มีระบบไฟร์วอลล์ที่ต้องจัดการด้วยวิธีอื่น อนุญาตพอร์ต SSH จริงก่อน enable ตัวอย่างใช้พอร์ต 22

sudo apt install ufw
sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
sudo ufw status verbose

หลังปรับทั้งสองทาง ให้ทดสอบการเข้า SSH ใหม่ session เก่าที่ไม่หลุดยังไม่ใช่การทดสอบ ต้องผ่าน HTTP จากภายนอกในหัวข้อถัดไปก่อนขอใบรับรอง

สร้างเว็บแยกใน Nginx

คำสั่งบนเซิร์ฟเวอร์สร้าง document root และ config ใหม่ เปลี่ยน hostname ภายในบล็อก แต่คงเครื่องหมายคำพูดรอบ EOF เพื่อไม่ให้ shell ขยายตัวแปร Nginx เช่น $uri หน้า HTML ตัวอย่างคงข้อความภาษาอังกฤษไว้เพื่อเทียบผลกับต้นฉบับ

sudo install -d -m 755 /var/www/first-site
printf '%s\n' '<!doctype html><html lang="en"><title>First deployment</title><h1>Ubuntu VPS is serving this page</h1></html>' | sudo tee /var/www/first-site/index.html
sudo tee /etc/nginx/sites-available/first-site >/dev/null <<'EOF'
server {
    listen 80;
    listen [::]:80;
    server_name app.example.com;
    root /var/www/first-site;
    index index.html;
    location / {
        try_files $uri $uri/ =404;
    }
}
EOF
sudo ln -s /etc/nginx/sites-available/first-site /etc/nginx/sites-enabled/first-site
sudo nginx -t

reload เฉพาะเมื่อ nginx -t ผ่าน

sudo systemctl reload nginx

บนคอมพิวเตอร์ ตรวจ hostname ที่ IP นี้ก่อนแก้ DNS ผลควรเป็นหัวข้อ Ubuntu VPS is serving this page ไม่ใช่หน้าเริ่มต้น Nginx

curl --resolve app.example.com:80:203.0.113.10 http://app.example.com/

ตั้ง DNS และออกใบรับรอง HTTPS

สร้าง DNS A ชี้ hostname ไป IPv4 ของ VPS ใส่ AAAA เฉพาะเมื่อ IPv6 ใช้งานได้จริง เพราะค่าเก่าอาจส่งการตรวจใบรับรองไปผิดเครื่อง ตัวอย่างนี้ใช้ DNS ตรงไป VPS โดยไม่มี proxy

บนคอมพิวเตอร์ ขอ http://app.example.com/ โดยไม่ใช้ --resolve และรอจนได้หน้าเว็บของคุณ จากนั้นรันบนเซิร์ฟเวอร์ แพ็กเกจ Certbot ต้องใช้ Ubuntu Universe ถ้าหาแพ็กเกจไม่พบให้แก้ก่อนดำเนินต่อ

sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d app.example.com --redirect
sudo nginx -t
sudo certbot renew --dry-run
systemctl list-timers --all certbot.timer

ตอบอีเมลและเงื่อนไข Certbot จะปรับ config และเปลี่ยน HTTP ไป HTTPS ตรวจ timer ต่ออายุ หากไม่ทำงานให้เปิดด้วย sudo systemctl enable --now certbot.timer และคงพอร์ต 80 ให้เข้าถึงได้สำหรับการตรวจและต่ออายุ

ตรวจจากภายนอกและหลังรีบูต

บนคอมพิวเตอร์ ตรวจ redirect, certificate และเนื้อหา HTTP ควรส่งต่อไป HTTPS ส่วน HTTPS ต้องผ่านการตรวจใบรับรอง อย่าเติม -k เพราะจะซ่อนข้อผิดพลาด

curl -I http://app.example.com/
curl -I https://app.example.com/
curl -fsS https://app.example.com/

ขณะที่ยังเป็นเครื่องทดลอง รัน sudo reboot บนเซิร์ฟเวอร์ จากนั้นเข้าเป็น deploy ตรวจ systemctl is-active nginx และเรียก HTTPS ภายนอกซ้ำ การรีบูตตัด SSH ตามปกติ ถ้าเครื่องไม่กลับมาให้ใช้ console

แก้จุดที่ล้มเหลวและเตรียมกู้คืน

บนหน้าจอขนาดเล็ก เลื่อนตารางด้านข้างเพื่อดูทุกคอลัมน์

อาการตรวจอะไร
SSH timeoutIP, ไฟร์วอลล์ทั้งสองชั้น และ console
คีย์ถูกปฏิเสธชื่อบัญชี private key และสิทธิ์ authorized_keys
เห็นหน้า Nginx เริ่มต้นDNS, server_name และ enabled site
ใบรับรองไม่ผ่านA/AAAA สาธารณะและพอร์ต 80
Nginx ไม่ทำงานหลังแก้nginx -t และ journal ของ Nginx

ใช้การวิเคราะห์ข้อผิดพลาด SSHก่อนแก้การเข้าถึง เก็บไฟล์เว็บ config, DNS และวิธีสร้างเครื่องไว้นอก VPS แล้วฝึกกู้คืนไฟล์โดยไม่เขียนทับเว็บเดิม

การคืนบริการทั้งหมดต้องรวม assets, certificates และส่วนประกอบอื่นด้วย ตั้งแจ้งเตือนการเข้าถึงและวันหมดอายุใบรับรอง การตรวจผ่านครั้งเดียวไม่เฝ้าดูวันพรุ่งนี้ ฐานข้อมูลและ runtime ที่เพิ่มภายหลังต้องมี service config และวิธีสำรองเฉพาะ

คำถามที่พบบ่อย

ใช้กับเว็บไซต์ที่มีอยู่แล้วได้เลยไหม?

ควรใช้เครื่องทดลองแยกก่อน คำสั่งสร้างไฟล์ เปิดไฟร์วอลล์ และให้ Certbot แก้ Nginx ระบบที่ใช้งานจริงต้องตรวจไซต์ กฎ และการกู้คืนเดิม

คู่มือนี้ติดตั้ง WordPress หรือ Node.js ไหม?

ยังไม่ติดตั้ง ผลลัพธ์คือเว็บสแตติก HTTPS จากนั้นจึงเพิ่ม runtime และทดสอบ startup, health check และข้อมูล

สำหรับ Ubuntu 24.04 เครื่องใหม่, DNS ตรง และ SSH พอร์ต 22 เท่านั้น เลือกไฟร์วอลล์ที่ผู้ให้บริการรองรับ; Oracle Ubuntu ต้องข้าม UFW ขั้นตอนจากเอกสารไม่ได้ทดสอบครบทุกอิมเมจ

ขั้นตอนที่เกี่ยวข้อง

1 / คู่มือใช้งาน

เลือกอิมเมจ Ubuntu แล้วตรวจสอบระบบที่ได้รับ

เลือกอิมเมจ Ubuntu ให้ตรงกับแอปและสถาปัตยกรรม ตรวจสอบรุ่น ระบบ cloud-init และแพ็กเกจก่อนย้ายข้อมูลหรือตัดสินใจอัปเกรดระบบ

อ่านคู่มือ ↗
2 / คู่มือใช้งาน

แก้ปัญหา SSH โดยตรวจสอบสาเหตุทีละจุด

แก้ปัญหา SSH บน Ubuntu VPS เมื่อเชื่อมต่อหมดเวลา ถูกปฏิเสธ หรือใช้คีย์ไม่ได้ ตรวจสอบเครือข่าย บัญชี และตัวตนเครื่องโดยรักษาช่องทางเข้าเดิม

อ่านคู่มือ ↗
3 / คู่มือใช้งาน

สำรองข้อมูล VPS ให้กู้คืนไฟล์ได้จริง

ฝึกสำรองข้อมูล VPS ด้วย tar และ SSH ย้ายสำเนาไปอีกเครื่องแล้วตรวจสอบ SHA-256 ของไฟล์ที่กู้คืน โดยไม่แก้ไขเว็บไซต์ที่กำลังทำงาน

อ่านคู่มือ ↗