ข้ามไปเนื้อหาหลัก

~20 นาทีCloud VPS · ใช้ได้กับไกด์ฝั่ง VPS ทุกเกม

พื้นฐาน VPS ที่ใช้ซ้ำได้ทุกเกม

ห้าเรื่องนี้วนซ้ำอยู่ในไกด์ฝั่ง VPS ทุกตัว — อ่านรอบเดียวแล้วข้ามได้ตลอดไป

  1. 01SSH เข้าเครื่องครั้งแรก และตั้งค่าที่ควรทำทันที
  2. 02SteamCMD — ตัวโหลดเซิร์ฟเกมเกือบทุกเกม
  3. 03เปิดพอร์ตด้วย ufw ให้ถูกทั้ง TCP และ UDP
  4. 04systemd — ทำให้เซิร์ฟรัน 24/7 และเด้งกลับเองเมื่อล่ม
  5. 05ดู log และแก้ปัญหาเบื้องต้น
  6. 06ตั้ง backup อัตโนมัติด้วย cron

ไกด์ฝั่ง VPS ทุกตัวของเราเริ่มด้วยขั้นตอนคล้าย ๆ กัน — SSH เข้าเครื่อง ลง SteamCMD เปิดพอร์ต ทำ systemd หน้านี้อธิบายให้ครบทีเดียวพร้อมเหตุผลว่าแต่ละอย่างทำไปทำไมอ่านรอบเดียวแล้วไปตามไกด์รายเกมได้เลย

ถ้าอ่านแล้วรู้สึกว่าไม่อยากยุ่งกับส่วนนี้ นั่นก็เป็นคำตอบที่ดี —ฝั่ง Game Panel จัดการทั้งหมดนี้ให้แทน

เครื่องเปล่าหนึ่งเครื่อง ต้องตั้งอะไรบ้างคุณเครื่องที่บ้านผู้เล่นเพื่อนในเกมSSH · พอร์ต 22พอร์ตของเกมVPS · Ubuntu · สิทธิ์ rootufwเปิดพอร์ตให้ผู้เล่นเข้าsystemdรัน 24 ชม. ล่มแล้วขึ้นเองไฟล์เซิร์ฟ + เซฟ + ม็อดอยู่ในเครื่องนี้ทั้งหมด — สำรองเองด้วย cron
สามอย่างที่ต้องตั้งบนเครื่องเปล่า ก่อนเพื่อนจะเข้าเซิร์ฟได้
01

SSH เข้าเครื่องครั้งแรก

SSH คือการต่อเข้าไปสั่งงานเครื่องจากระยะไกล — Windows 10/11 และ macOS มีมาให้ในตัวแล้ว เปิด Terminal หรือ PowerShell แล้วพิมพ์ได้เลย:

$ ssh root@IP-ของคุณ
# ครั้งแรกจะถามว่าเชื่อถือเครื่องนี้ไหม พิมพ์ yes
root@bkk:~$ apt update && apt upgrade -y # อัปเดตระบบก่อนเสมอ

สองอย่างที่ควรทำทันทีหลังเข้าครั้งแรก ก่อนติดตั้งอะไร:

root@bkk:~$ passwd # เปลี่ยนรหัส root เป็นของตัวเอง
root@bkk:~$ timedatectl set-timezone Asia/Bangkok # ให้เวลาใน log ตรงกับเวลาไทย

เรื่อง timezone ดูเล็กแต่มีผลจริง — เวลาไล่ log หาว่าเซิร์ฟล่มตอนไหน หรือตั้งรีสตาร์ทรายวัน คุณอยากให้เวลาตรงกับเวลาที่กลุ่มเล่นจริง ไม่ใช่ UTC

02

SteamCMD — ตัวโหลดเซิร์ฟเกมเกือบทุกเกม

เกมบน Steam เกือบทุกตัวแจกไฟล์เซิร์ฟผ่านเครื่องมือชื่อ SteamCMD — Valheim, CS2, GMod, L4D2, DayZ, 7 Days to Die, Unturned, SCP:SL ใช้ตัวนี้ทั้งหมด ตัวมันเป็นแพ็กเกจ 32-bit จึงต้องเปิด multiverse กับสถาปัตยกรรม i386 ก่อน:

root@bkk:~$ add-apt-repository multiverse && dpkg --add-architecture i386
root@bkk:~$ apt update && apt install -y steamcmd lib32gcc-s1
# ระหว่างติดตั้งจะมีหน้าให้กดยอมรับ license ของ Steam

รูปแบบคำสั่งโหลดเซิร์ฟจะหน้าตาเหมือนกันหมด ต่างแค่เลข App ID ของแต่ละเกม:

root@bkk:~$ /usr/games/steamcmd +force_install_dir /opt/ชื่อเกม \
+login anonymous +app_update เลข-app-id validate +quit
# Valheim 896660 · GMod 4020 · CS2 730 · L4D2 222860
# 7DTD 294420 · Unturned 1110390 · SCP:SL 996560

คำสั่งเดียวกันนี้ใช้อัปเดตเซิร์ฟด้วย — เวลาเกมออกแพตช์แล้วผู้เล่นเข้าไม่ได้ ให้รันซ้ำแล้ว restart ส่วน DayZ ต้องล็อกอินด้วยบัญชี Steam จริง ไม่ใช่ anonymous เพราะไฟล์เซิร์ฟไม่ได้แจกสาธารณะ

03

เปิดพอร์ตด้วย ufw ให้ถูกทั้ง TCP และ UDP

พอร์ตคือช่องทางที่ผู้เล่นต่อเข้ามา ถ้าไฟร์วอลล์ปิดอยู่ เซิร์ฟจะรันปกติแต่ไม่มีใครเข้าได้ และมักไม่มีข้อความบอกอะไรนอกจาก timeout:

root@bkk:~$ ufw allow 22/tcp # SSH — เปิดก่อนเสมอ ไม่งั้นล็อกตัวเองออก
root@bkk:~$ ufw allow 2456:2457/udp # ตัวอย่าง: Valheim
root@bkk:~$ ufw enable
root@bkk:~$ ufw status # เช็กว่าเปิดครบ

เปิดพอร์ต 22 ก่อนสั่ง ufw enable เสมอ — ไม่งั้นคุณจะโดนไฟร์วอลล์ตัดขาดจากเครื่องตัวเอง ซึ่งเป็นความผิดพลาดคลาสสิกที่ต้องเข้าคอนโซลกู้

เลขพอร์ตของเกมในไกด์เรา: Valheim 2456–2457/udp · L4D2 & CS2 27015 · FiveM/RedM 30120 · 7DTD 26900–26902 · Unturned 27015–27017 · SCP:SL 7777/udp · DayZ 2302–2305/udp + 27016

04

systemd — ให้เซิร์ฟรัน 24/7 และเด้งกลับเองเมื่อล่ม

ถ้าสตาร์ทเซิร์ฟด้วยการพิมพ์คำสั่งเฉย ๆ พอปิดหน้าต่าง SSH เซิร์ฟจะดับตาม — systemd แก้ทั้งเรื่องนี้และเรื่องเซิร์ฟล่มกลางดึก โครงไฟล์เหมือนกันหมดทุกเกม เปลี่ยนแค่สองบรรทัด:

[Unit]
Description=Game Server
After=network.target
[Service]
WorkingDirectory=/opt/ชื่อเกม # ← เปลี่ยนตรงนี้
ExecStart=/opt/ชื่อเกม/คำสั่งสตาร์ท # ← และตรงนี้
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
root@bkk:~$ systemctl daemon-reload
root@bkk:~$ systemctl enable --now ชื่อเกม # enable = เปิดเองตอนบูต
root@bkk:~$ systemctl status ชื่อเกม
active (running)

Restart=always คือหัวใจ — เซิร์ฟล่มตอนตีสามก็กลับมาเองใน 10 วินาที และถ้าเกมต้องใช้ฐานข้อมูล (FiveM, RedM) ให้เติม mariadb.service ต่อท้ายบรรทัดAfter= ด้วย ไม่งั้นตอนเครื่องรีบูตเซิร์ฟจะขึ้นก่อนฐานข้อมูลแล้วต่อไม่ติด

05

ดู log และแก้ปัญหาเบื้องต้น

เวลามีอะไรผิดปกติ log คือที่แรกที่ต้องดู ไม่ใช่การเดา:

root@bkk:~$ journalctl -u ชื่อเกม -f # ดู log สด กด Ctrl+C ออก
root@bkk:~$ journalctl -u ชื่อเกม -n 100 # ดูย้อนหลัง 100 บรรทัด
root@bkk:~$ free -h # RAM เหลือเท่าไหร่
root@bkk:~$ df -h # ดิสก์เต็มหรือยัง
root@bkk:~$ ss -tulpn | grep ชื่อเกม # เซิร์ฟฟังพอร์ตอยู่จริงไหม

สามอาการที่เจอบ่อยและอ่านจาก log ได้: ดิสก์เต็ม (เซฟเขียนไม่ได้ เซิร์ฟดับเงียบ ๆ),RAM หมด (โดนระบบฆ่าโปรเซส เห็นคำว่า Killed ใน log) และพอร์ตชนกัน (สองเซิร์ฟใช้พอร์ตเดียวกัน ตัวที่สองสตาร์ทไม่ขึ้น)

06

ตั้ง backup อัตโนมัติด้วย cron

บน VPS ไม่มีใคร backup ให้คุณ ต่างจากฝั่ง Game Panel ที่เราทำให้อัตโนมัติ — ตั้งครั้งเดียวแล้วนอนหลับสบายกว่ามาก:

root@bkk:~$ mkdir -p /opt/backups
root@bkk:~$ crontab -e
# เพิ่มบรรทัดนี้ — สำรองทุกวันตีสี่ และลบไฟล์เก่าเกิน 14 วัน
0 4 * * * tar czf /opt/backups/save-$(date +\%F).tar.gz /opt/ชื่อเกม/โฟลเดอร์เซฟ
30 4 * * * find /opt/backups -name "save-*" -mtime +14 -delete

ที่สำคัญกว่าการมี backup คือการเคยลองกู้จริง — ลองแตกไฟล์สำรองดูสักครั้งว่าข้อมูลครบ หลายคนรู้ว่า backup ใช้ไม่ได้ตอนที่ต้องใช้จริงแล้ว ซึ่งสายเกินไป และถ้าเป็นเซิร์ฟที่มีฐานข้อมูล อย่าลืม dump ฐานข้อมูลด้วย ไม่ใช่แค่ไฟล์เกม

คำถามที่เจอบ่อย

ต้องรู้ Linux มาก่อนไหม

ไม่ต้องรู้ลึก แค่ก๊อปวางคำสั่งเป็นก็พอสำหรับไกด์ทั้งหมดของเรา — แต่ต้องยอมรับว่าเวลามีอะไรพัง คุณคือคนที่ต้องแก้เอง ถ้าไม่อยากยุ่งกับส่วนนี้เลย ฝั่ง Game Panel เหมาะกว่า เพราะเราติดตั้งและดูแลระบบให้

ทำไมต้องเปิดพอร์ตทั้ง TCP และ UDP

เกมส่วนใหญ่ใช้ UDP ส่งข้อมูลการเล่นเพราะเร็วกว่า แต่ใช้ TCP สำหรับบางอย่างเช่นการเชื่อมต่อครั้งแรกหรือ query — เปิดไม่ครบจะเจออาการแปลก ๆ อย่างเซิร์ฟขึ้นในลิสต์แต่เข้าไม่ได้ หรือเข้าได้แต่ค้างตอนโหลด

systemd จำเป็นแค่ไหน

จำเป็นมากถ้าอยากให้เซิร์ฟอยู่ยาว — ถ้าไม่มี พอเครื่องรีบูตหรือเซิร์ฟล่มกลางดึก มันจะดับค้างไว้จนกว่าคุณจะมาเปิดเอง ซึ่งอาจเป็นวันถัดไป ตั้งครั้งเดียวใช้ได้ตลอด

ควรรัน SteamCMD และเซิร์ฟด้วย root ไหม

ในทางปฏิบัติหลายไกด์ทำแบบนั้นเพราะง่ายกว่า และบนเครื่องที่รันแค่เซิร์ฟเกมของตัวเองก็พอรับได้ — แต่ทางที่ปลอดภัยกว่าคือสร้างผู้ใช้แยกสำหรับเซิร์ฟเกม (บางเกมอย่าง DayZ ผ่าน LinuxGSM บังคับด้วยซ้ำ) ถ้าเครื่องมีอย่างอื่นรันอยู่ด้วย ควรแยกผู้ใช้

เครื่องเดียวรันหลายเซิร์ฟได้ไหม

ได้ และเป็นเหตุผลหลักที่หลายคนย้ายจากแพ็กสำเร็จรูปมาใช้ VPS — แค่ให้แต่ละเซิร์ฟใช้คนละพอร์ตและคนละ systemd service ข้อควรระวังคือ RAM ต้องพอสำหรับทุกตัวรวมกัน อย่าลืมเผื่อให้ระบบปฏิบัติการด้วย

หรือกลับไปดูไกด์ทั้งหมด 34 หน้า

เซิร์ฟแลค = ย้ายเครื่องแรงกว่าให้ฟรีเริ่ม 150฿/เดือน · ดาต้าเซ็นเตอร์กรุงเทพ ping 5–20 ms

เปิดเซิร์ฟเลย