การตั้งค่าเริ่มต้นเซิร์ฟเวอร์ Ubuntu: 9 ขั้นตอนเริ่มต้นบนเซิร์ฟเวอร์ Ubuntu ที่เพิ่งติดตั้ง

สภาพแวดล้อมทดสอบตระกูล DebianUbuntu 24.04.5 LTSบัญชี root · ผู้ใช้ทั่วไป
ตรวจสอบงานตั้งค่าเริ่มต้นเซิร์ฟเวอร์ Ubuntu แล้ว

เมื่อได้เซิร์ฟเวอร์ใหม่ คุณจะทำการตั้งค่าเริ่มต้นเซิร์ฟเวอร์ Ubuntu หนึ่งครั้งก่อนนำบริการใดๆ ขึ้นไป บนเซิร์ฟเวอร์ Ubuntu 24.04 ที่สร้างใน DigitalOcean เราเชื่อมต่อด้วย root แล้วตั้งค่าตามลำดับตั้งแต่อัปเดตแพ็กเกจ ผู้ใช้ sudo การล็อกอินด้วยคีย์ ไฟร์วอลล์ เขตเวลา การอัปเดตความปลอดภัยอัตโนมัติ ไปจนถึง swap และตรวจสอบว่าการตั้งค่ายังคงอยู่หลังรีบูต

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

🎯 ประเด็นสำคัญ
อัปเดตแพ็กเกจและตรวจว่าต้องรีบูตหรือไม่
sudo เปิดให้ผู้ใช้ทั่วไป deploy
deploy (ตรวจการล็อกอินด้วยคีย์แล้ว) จากนั้น root (ปิดกั้นการล็อกอิน)
ufwอนุญาตเฉพาะ SSH, 80, 443
เปลี่ยนเขตเวลาและตรวจการอัปเดตความปลอดภัยอัตโนมัติ
ไฟล์ swap 2GB และการตั้งค่าที่ยังอยู่หลังรีบูต
ข้อกำหนดเบื้องต้น
อ่านก่อนssh-keygenssh คำสั่ง
การเชื่อมต่อroot: คีย์ SSH สำหรับเชื่อมต่อและเซิร์ฟเวอร์ Ubuntu 24.04

1️⃣ อัปเดตแพ็กเกจ Ubuntu

แม้แต่เซิร์ฟเวอร์ที่เพิ่งสร้างก็มีอัปเดตรอติดตั้งอยู่ หลังจากดาวน์โหลดรายการแพ็กเกจใหม่แล้ว ให้ตรวจดูก่อนว่าอะไรจะเปลี่ยนก่อนติดตั้งจริง

🔲 apt-get update

export DEBIAN_FRONTEND=noninteractive

คำสั่ง apt-get ด้านล่างรันหลังจากตั้งค่านี้ไว้ก่อน เมื่อตั้งค่านี้ไว้ ระหว่างติดตั้งแพ็กเกจจะไม่มีหน้าต่างถามการตั้งค่าขึ้นมา และจะใช้คำตอบเริ่มต้น

apt-get update
Hit:1 http://mirrors.digitalocean.com/ubuntu noble InRelease
Hit:2 http://mirrors.digitalocean.com/ubuntu noble-updates InRelease
Hit:3 http://mirrors.digitalocean.com/ubuntu noble-backports InRelease
Hit:4 https://repos-droplet.digitalocean.com/apt/droplet-agent main InRelease
Hit:5 http://security.ubuntu.com/ubuntu noble-security InRelease
Reading package lists...

🔲 apt-get -s upgrade

apt-get -s upgrade
Calculating upgrade...
The following upgrades have been deferred due to phasing:
  libsqlite3-0
The following packages will be upgraded:
  apt apt-transport-https apt-utils bind9-dnsutils bind9-host bind9-libs
  cloud-init distro-info-data gir1.2-glib-2.0 git git-man libapt-pkg6.0t64
  libbrotli1 libglib2.0-0t64 libglib2.0-bin libglib2.0-data liblzma5
  libmspack0t64 libpcre2-8-0 python3-jwt python3-twisted tmux
  ubuntu-pro-client ubuntu-pro-client-l10n xz-utils zlib1g
26 upgraded, 0 newly installed, 0 to remove and 1 not upgraded.

ตัวเลือก -s คือการจำลองที่คำนวณเฉพาะผลลัพธ์โดยไม่ติดตั้งอะไร บนเซิร์ฟเวอร์นี้มีแพ็กเกจที่จะอัปเกรด 26 รายการ และ libsqlite3-0 หนึ่งรายการถูกข้ามในการอัปเกรดครั้งนี้ด้วย [deferred due to phasing] จำนวนแพ็กเกจจะต่างกันในแต่ละเซิร์ฟเวอร์ตามช่วงเวลาที่สร้างเซิร์ฟเวอร์และอิมเมจที่ใช้

🔲 apt-get -y upgrade

apt-get -y upgrade
26 upgraded, 0 newly installed, 0 to remove and 1 not upgraded.
Need to get 15.4 MB of archives.
After this operation, 398 kB of additional disk space will be used.

เมื่อติดตั้งเสร็จ จะมีรายการบริการที่รีสตาร์ตตามมา

Running kernel seems to be up-to-date.

Restarting services...
 /etc/needrestart/restart.d/systemd-manager
 systemctl restart cron.service fwupd.service multipathd.service packagekit.service polkit.service ssh.service systemd-journald.service systemd-networkd.service systemd-resolved.service systemd-timesyncd.service systemd-udevd.service udisks2.service

Service restarts being deferred:
 systemctl restart ModemManager.service
 /etc/needrestart/restart.d/dbus.service
 systemctl restart systemd-logind.service
 systemctl restart unattended-upgrades.service

เมื่อมีการติดตั้งอัปเดตที่ต้องรีบูต จะมีไฟล์ /var/run/reboot-required เกิดขึ้น ครั้งนี้ขึ้น [Running kernel seems to be up-to-date.] และไม่มีไฟล์นั้นเกิดขึ้น จึงไปขั้นตอนถัดไปโดยไม่ต้องรีบูต

2️⃣ เพิ่มผู้ใช้ Ubuntu และสิทธิ์ sudo

งานประจำวันทำด้วยผู้ใช้ทั่วไป และรันเฉพาะคำสั่งดูแลระบบด้วย sudo เนื่องจาก sudo ยกระดับสิทธิ์ด้วยรหัสผ่านของคุณเองแทนรหัสผ่าน root จึงมีบันทึกว่าใครรันคำสั่งใด

🔲 adduser deploy

adduser deploy
info: Adding user `deploy' ...
info: Selecting UID/GID from range 1000 to 59999 ...
info: Adding new group `deploy' (1000) ...
info: Adding new user `deploy' (1000) with group `deploy (1000)' ...
info: Creating home directory `/home/deploy' ...
info: Copying files from `/etc/skel' ...
New password: 
Retype new password: 
passwd: password updated successfully
Changing the user information for deploy
Enter the new value, or press ENTER for the default
	Full Name []: 
	Room Number []: 
	Work Phone []: 
	Home Phone []: 
	Other []: 
Is the information correct? [Y/n] Y
info: Adding new user `deploy' to supplemental / extra groups `users' ...
info: Adding user `deploy' to group `users' ...

adduser เป็นเครื่องมือที่ครอบ useraddไว้ โดยจะสร้างโฟลเดอร์โฮมและกลุ่ม แล้วถามรหัสผ่านและข้อมูลผู้ใช้ตามลำดับ รหัสผ่านจะไม่แสดงบนหน้าจอขณะพิมพ์ และข้อมูลอย่างชื่อหรือหมายเลขโทรศัพท์สามารถเว้นว่างได้ด้วย Enter

🔲 usermod -aG sudo deploy

usermod -aG sudo deploy
groups deploy
deploy : deploy sudo users

🔲 su

ผู้ใช้ในกลุ่ม sudo สามารถรันคำสั่งดูแลระบบด้วย sudo ได้ สลับไปที่บัญชี deploy ด้วย su แล้วตรวจสอบสิทธิ์

su - deploy
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.
whoami
deploy
sudo whoami
[sudo] password for deploy: 
root
exit

เมื่อใส่ sudo จะมีการถามรหัสผ่านของ deploy และถ้าถูกต้อง คำสั่งจะรันด้วยสิทธิ์ root

3️⃣ ลงทะเบียนคีย์ SSH ของผู้ใช้ใหม่

ตอนแรกมีคีย์ SSH ลงทะเบียนไว้เฉพาะ root จึงล็อกอินด้วยคีย์ในชื่อ deploy ไม่ได้ ให้คัดลอก authorized_keys ของ root ไปยังโฟลเดอร์โฮมของ deploy

🔲 install -o deploy -g deploy

install -d -m 700 -o deploy -g deploy /home/deploy/.ssh
install -m 600 -o deploy -g deploy /root/.ssh/authorized_keys /home/deploy/.ssh/authorized_keys
ls -la /home/deploy/.ssh
total 12
drwx------ 2 deploy deploy 4096 Nov  5 11:48 .
drwxr-x--- 3 deploy deploy 4096 Nov  5 11:48 ..
-rw------- 1 deploy deploy  100 Nov  5 11:48 authorized_keys

install จัดการทั้งการสร้างโฟลเดอร์ การคัดลอก และการกำหนดเจ้าของกับสิทธิ์ในครั้งเดียว sshd จะตรวจสิทธิ์และเจ้าของไฟล์ของผู้ใช้ก่อนรับการล็อกอิน (StrictModes) จึงตั้งโฟลเดอร์ .ssh เป็น 700 และ authorized_keys เป็น 600

🔲 ssh deploy@203.0.113.10

อย่าปิดหน้าต่าง root ที่เปิดอยู่ ให้ตรวจในหน้าต่างเทอร์มินัลใหม่ก่อนว่าเชื่อมต่อในชื่อ deploy ได้หรือไม่

ssh deploy@203.0.113.10
whoami
deploy
🧭 ลำดับการตั้งค่าที่ไม่ทำให้การเชื่อมต่อถูกล็อก
แผนภาพอธิบาย
🧭 ขั้นตอน
🔑① คัดลอกคีย์คีย์ root ให้ deploy
➜
🪟② ตรวจในหน้าต่างใหม่เปิดหน้าต่าง root ค้างไว้
➜
⛔③ ปิดกั้นล็อกอิน rootPermitRootLogin no
➜
🪟④ ตรวจในหน้าต่างใหม่การเชื่อมต่อ deploy ยังใช้ได้
✅⑤ อนุญาต SSHufw allow OpenSSH
➜
🧱⑥ เปิด ufwเปิดเฉพาะพอร์ตที่อนุญาต
➜
🪟⑦ ตรวจในหน้าต่างใหม่การเชื่อมต่อยังใช้ได้
คัดลอก authorized_keys ของ root ไปยังโฟลเดอร์โฮมของ deploy
อย่าปิดหน้าต่าง root ที่เปิดอยู่ ให้ตรวจในหน้าต่างเทอร์มินัลใหม่ว่าล็อกอินด้วยคีย์ในชื่อ deploy ได้หรือไม่
ปิดกั้นการล็อกอิน root หลังจากยืนยันการเชื่อมต่อ deploy แล้วเท่านั้น หากเชื่อมต่อในหน้าต่างใหม่ไม่ได้ ให้ย้อนการเปลี่ยนแปลงในหน้าต่างที่เปิดค้างไว้
หลังจากโหลดการตั้งค่า SSH ใหม่ ให้ตรวจในหน้าต่างใหม่ว่าการเชื่อมต่อ deploy ยังใช้ได้อยู่
ก่อนเปิดไฟร์วอลล์ ให้เพิ่มกฎที่อนุญาต SSH ก่อน
ทันทีที่เปิด การเชื่อมต่อที่ไม่ได้รับอนุญาตจะถูกปิดกั้น จึงต้องมีกฎอนุญาต SSH อยู่ก่อน
หลังจากเปิดไฟร์วอลล์ ให้ตรวจในหน้าต่างใหม่ว่าเชื่อมต่อในชื่อ deploy ได้อีกครั้งหรือไม่

4️⃣ ปิดกั้นการล็อกอิน root ทาง SSH

ใน Ubuntu 24.04 บรรทัด Include ด้านบนสุดของ sshd_config จะโหลดไฟล์ในโฟลเดอร์ /etc/ssh/sshd_config.d/ ก่อน และสำหรับรายการเดียวกันจะใช้ค่าที่อ่านก่อน ดังนั้นก่อนเปลี่ยนการตั้งค่า ให้ตรวจค่าที่ใช้อยู่ตอนนี้และไฟล์ที่มีค่านั้นก่อน

/etc/ssh└─ sshd_config  ด้านบนสุด: Include /etc/ssh/sshd_config.d/*.conf   ├─ ① sshd_config.d/50-cloud-init.conf         PasswordAuthentication no   ├─ ② sshd_config.d/60-cloudimg-settings.conf  PasswordAuthentication no   └─ ③ sshd_config บรรทัด 42                    PermitRootLogin yes → no

🔲 sshd -T

sudo sshd -T | grep -E '^(permitrootlogin|passwordauthentication) '
permitrootlogin yes
passwordauthentication no
sudo grep -rn 'PasswordAuthentication' /etc/ssh/sshd_config.d/
/etc/ssh/sshd_config.d/60-cloudimg-settings.conf:1:PasswordAuthentication no
/etc/ssh/sshd_config.d/50-cloud-init.conf:1:PasswordAuthentication no

การล็อกอินด้วยรหัสผ่านถูกปิดไว้แล้วในสองไฟล์ภายใน sshd_config.d สิ่งที่ต้องเปลี่ยนมีเพียงบรรทัดล็อกอิน root หนึ่งบรรทัดในไฟล์หลัก

🔲 sed -i PermitRootLogin

sudo grep -n '^PermitRootLogin' /etc/ssh/sshd_config
42:PermitRootLogin yes
sudo sed -i 's/^PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_config
sudo grep -n '^PermitRootLogin' /etc/ssh/sshd_config
42:PermitRootLogin no

🔲 systemctl reload ssh

sudo sshd -t
sudo systemctl reload ssh
sudo sshd -T | grep -E '^(permitrootlogin|passwordauthentication) '
permitrootlogin no
passwordauthentication no

sshd -t ตรวจไวยากรณ์ของการตั้งค่า และถ้าไม่มีอะไรแสดงออกมาแสดงว่าไม่มีข้อผิดพลาด หลังจากโหลดใหม่ ให้ยืนยันในหน้าต่างใหม่ว่าการเชื่อมต่อ deploy ยังใช้ได้ แล้วลองเชื่อมต่อด้วย root เพื่อดูว่าถูกปฏิเสธ

ssh root@203.0.113.10
root@203.0.113.10: Permission denied (publickey).

แม้คีย์จะถูกต้องก็เข้าด้วย root ไม่ได้ งานดูแลระบบทำโดยเชื่อมต่อในชื่อ deploy แล้วใช้ sudo

5️⃣ ไฟร์วอลล์ Ubuntu ufw

ufw เป็นเครื่องมือไฟร์วอลล์พื้นฐานของ Ubuntu แต่ตอนแรกจะปิดอยู่ ทันทีที่เปิด การเชื่อมต่อที่ไม่ได้รับอนุญาตจะถูกปิดกั้น จึงเพิ่มกฎอนุญาต SSH ก่อนแล้วเปิดเป็นขั้นสุดท้าย

sudo ufw status verbose
Status: inactive

🔲 ufw allow OpenSSH

sudo ufw app list
Available applications:
  OpenSSH
sudo ufw allow OpenSSH
Rules updated
Rules updated (v6)
sudo ufw allow 80/tcp
Rules updated
Rules updated (v6)
sudo ufw allow 443/tcp
Rules updated
Rules updated (v6)
sudo ufw show added
Added user rules (see 'ufw status' for running firewall):
ufw allow OpenSSH
ufw allow 80/tcp
ufw allow 443/tcp

OpenSSH เป็นโปรไฟล์ที่เปิดพอร์ต 22 ส่วน 80 และ 443 เป็นพอร์ตที่เว็บเซิร์ฟเวอร์ใช้ กฎจะถูกเพิ่มทั้งใน IPv4 และ IPv6

🔲 ufw enable

sudo ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup
sudo ufw status verbose
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip

To                         Action      From
--                         ------      ----
22/tcp (OpenSSH)           ALLOW IN    Anywhere                  
80/tcp                     ALLOW IN    Anywhere                  
443/tcp                    ALLOW IN    Anywhere                  
22/tcp (OpenSSH (v6))      ALLOW IN    Anywhere (v6)             
80/tcp (v6)                ALLOW IN    Anywhere (v6)             
443/tcp (v6)               ALLOW IN    Anywhere (v6)             

การเชื่อมต่อขาเข้าจะถูกปิดกั้นโดยค่าเริ่มต้น เปิดเฉพาะสามพอร์ตที่อนุญาต และไฟร์วอลล์จะเปิดเองตอนบูตด้วย หลังจากเปิดแล้ว ให้เชื่อมต่อในชื่อ deploy อีกครั้งในหน้าต่างใหม่และตรวจหมายเลขกฎ

sudo ufw status numbered
Status: active

     To                         Action      From
     --                         ------      ----
[ 1] OpenSSH                    ALLOW IN    Anywhere                  
[ 2] 80/tcp                     ALLOW IN    Anywhere                  
[ 3] 443/tcp                    ALLOW IN    Anywhere                  
[ 4] OpenSSH (v6)               ALLOW IN    Anywhere (v6)             
[ 5] 80/tcp (v6)                ALLOW IN    Anywhere (v6)             
[ 6] 443/tcp (v6)               ALLOW IN    Anywhere (v6)             

6️⃣ ตั้งค่าเขตเวลา Ubuntu

เขตเวลาเริ่มต้นคือ Etc/UTC เพื่อให้เวลาในล็อกและงานที่ตั้งเวลาไว้ตรงกับภูมิภาคของเซิร์ฟเวอร์ เซิร์ฟเวอร์นี้ซึ่งสร้างในภูมิภาคสิงคโปร์จึงตั้งเป็น Asia/Singapore

timedatectl
               Local time: Thu 2026-11-05 12:00:31 UTC
           Universal time: Thu 2026-11-05 12:00:31 UTC
                 RTC time: Thu 2026-11-05 12:00:31
                Time zone: Etc/UTC (UTC, +0000)
System clock synchronized: yes
              NTP service: active
          RTC in local TZ: no

🔲 timedatectl list-timezones

timedatectl list-timezones | grep Singapore
Asia/Singapore

🔲 timedatectl set-timezone

sudo timedatectl set-timezone Asia/Singapore
timedatectl
               Local time: Thu 2026-11-05 20:00:32 +08
           Universal time: Thu 2026-11-05 12:00:32 UTC
                 RTC time: Thu 2026-11-05 12:00:32
                Time zone: Asia/Singapore (+08, +0800)
System clock synchronized: yes
              NTP service: active
          RTC in local TZ: no

สิ่งที่เปลี่ยนมีเพียงสองบรรทัด Local time และ Time zone ส่วนการซิงก์นาฬิกา (NTP) และเวลา UTC ยังคงเดิม

7️⃣ unattended upgrades อัปเดตความปลอดภัยอัตโนมัติ

Ubuntu ติดตั้งอัปเดตความปลอดภัยโดยอัตโนมัติด้วยแพ็กเกจ unattended-upgrades และแพ็กเกจนี้ติดตั้งและเปิดใช้งานไว้ตั้งแต่แรก ในขั้นตอนนี้จึงตรวจว่าเปิดใช้งานอยู่หรือไม่ และติดตั้งอะไรโดยอัตโนมัติ

🔲 dpkg-query -W

dpkg-query -W unattended-upgrades
unattended-upgrades	2.9.1+nmu4ubuntu1
systemctl is-enabled unattended-upgrades apt-daily.timer apt-daily-upgrade.timer
enabled
enabled
enabled

🔲 cat 20auto-upgrades

cat /etc/apt/apt.conf.d/20auto-upgrades
APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "1";

เลข 1 ในทั้งสองค่าหมายถึงวันละครั้ง และถ้าเปลี่ยนเป็น 0 การอัปเดตอัตโนมัติจะปิด สิ่งที่จะติดตั้งกำหนดโดยไฟล์ 50unattended-upgrades

grep -vE '^[[:space:]]*(//|$)' /etc/apt/apt.conf.d/50unattended-upgrades
Unattended-Upgrade::Allowed-Origins {
	"${distro_id}:${distro_codename}";
	"${distro_id}:${distro_codename}-security";
	"${distro_id}ESMApps:${distro_codename}-apps-security";
	"${distro_id}ESM:${distro_codename}-infra-security";
};
Unattended-Upgrade::Package-Blacklist {
};
Unattended-Upgrade::DevRelease "auto";

ในแหล่งที่อนุญาตมี -security แต่ไม่มี -updates อัปเดตทั่วไปจึงไม่ถูกติดตั้งอัตโนมัติ และติดตั้งเฉพาะอัปเดตความปลอดภัย หากต้องการรับอัปเดตทั่วไปอัตโนมัติด้วย ให้เอาเครื่องหมายคอมเมนต์ของบรรทัด -updates ในไฟล์นี้ออก

🔲 unattended-upgrade

sudo unattended-upgrade --dry-run --debug
Starting unattended upgrades script
Allowed origins are: o=Ubuntu,a=noble, o=Ubuntu,a=noble-security, o=UbuntuESMApps,a=noble-apps-security, o=UbuntuESM,a=noble-infra-security

นี่คือสองบรรทัดสุดท้ายของการรันครั้งเดียวกัน

No packages found that can be upgraded unattended and no pending auto-removals
The list of kept packages can't be calculated in dry-run mode.

--dry-run คำนวณเฉพาะสิ่งที่การอัปเดตอัตโนมัติจะทำโดยไม่ติดตั้งอะไร เนื่องจากอัปเดตแพ็กเกจเสร็จแล้ว จึงแสดงว่าไม่มีแพ็กเกจที่ต้องติดตั้งอัตโนมัติ บันทึกการรันจริงจะเก็บไว้ในโฟลเดอร์ /var/log/unattended-upgrades/

sudo ls -l /var/log/unattended-upgrades/
total 32
-rw-r--r-- 1 root root     0 Nov  5 20:00 unattended-upgrades-dpkg.log
-rw-r--r-- 1 root root     0 Nov  5 17:34 unattended-upgrades-shutdown.log
-rw-r--r-- 1 root root 29093 Nov  5 20:04 unattended-upgrades.log

8️⃣ ตั้งค่าหน่วยความจำ swap ของ Ubuntu

เซิร์ฟเวอร์นี้มีหน่วยความจำ 1GB และตอนแรกไม่มี swap ก่อนนำแอปขึ้น ให้สร้างไฟล์ swap 2GB และลงทะเบียนใน /etc/fstab เพื่อให้เปิดใช้งานหลังรีบูตด้วย

free -h
               total        used        free      shared  buff/cache   available
Mem:           961Mi       328Mi       161Mi       4.0Mi       631Mi       633Mi
Swap:             0B          0B          0B
df -h /
Filesystem      Size  Used Avail Use% Mounted on
/dev/vda1        24G  2.0G   22G   9% /

🔲 fallocate -l 2G /swapfile

sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
ls -lh /swapfile
-rw------- 1 root root 2.0G Nov  5 20:04 /swapfile

🔲 mkswap /swapfile

sudo mkswap /swapfile
Setting up swapspace version 1, size = 2 GiB (2147479552 bytes)
no label, UUID=0b43ccd8-5b4a-4048-9b84-eee12667b387

🔲 swapon /swapfile

sudo swapon /swapfile
swapon --show
NAME      TYPE SIZE USED PRIO
/swapfile file   2G   0B   -2
free -h
               total        used        free      shared  buff/cache   available
Mem:           961Mi       328Mi       160Mi       4.0Mi       632Mi       632Mi
Swap:          2.0Gi          0B       2.0Gi

🔲 tee -a /etc/fstab

swapon เปิดใช้งานได้เฉพาะตอนนี้ หากต้องการให้เปิดหลังรีบูตด้วย ให้เพิ่มหนึ่งบรรทัดใน fstab

echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
/swapfile none swap sw 0 0

9️⃣ ตรวจสอบการตั้งค่าเริ่มต้นเซิร์ฟเวอร์ Ubuntu

เมื่อตรวจแล้วว่าการตั้งค่ายังอยู่หลังรีบูต การตั้งค่าเริ่มต้น Ubuntu ก็เสร็จสมบูรณ์

🔲 systemctl reboot

sudo systemctl reboot

🔲 uptime -p

หลังรีบูต ให้เชื่อมต่อในชื่อ deploy อีกครั้ง

uptime -p
up 2 minutes
swapon --show
NAME      TYPE SIZE USED PRIO
/swapfile file   2G   0B   -2
sudo sshd -T | grep -E '^(permitrootlogin|passwordauthentication) '
permitrootlogin no
passwordauthentication no
sudo ufw status verbose
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip

To                         Action      From
--                         ------      ----
22/tcp (OpenSSH)           ALLOW IN    Anywhere                  
80/tcp                     ALLOW IN    Anywhere                  
443/tcp                    ALLOW IN    Anywhere                  
22/tcp (OpenSSH (v6))      ALLOW IN    Anywhere (v6)             
80/tcp (v6)                ALLOW IN    Anywhere (v6)             
443/tcp (v6)               ALLOW IN    Anywhere (v6)             
timedatectl | head -n 4
               Local time: Thu 2026-11-05 20:06:35 +08
           Universal time: Thu 2026-11-05 12:06:35 UTC
                 RTC time: Thu 2026-11-05 12:06:35
                Time zone: Asia/Singapore (+08, +0800)
systemctl is-active unattended-upgrades ssh.socket
active
active

swap การตั้งค่า SSH ไฟร์วอลล์ เขตเวลา และการอัปเดตอัตโนมัติทั้งหมดเหมือนก่อนรีบูต ต่อไปจะนำแอป Node.js ขึ้นเซิร์ฟเวอร์นี้ด้วย PM2 และ Nginx

🔢 FAQ & เนื้อหาแนะนำ

ปล่อยไว้ได้ แพ็กเกจที่ถูกข้ามด้วย [deferred due to phasing] คืออัปเดตที่อยู่ระหว่างการเผยแพร่แบบเป็นช่วง Ubuntu จะปล่อยอัปเดตบางรายการให้เซิร์ฟเวอร์เพียงบางส่วนก่อน และถ้าไม่มีปัญหาก็จะขยายไปยังเซิร์ฟเวอร์ทั้งหมด อัปเดตความปลอดภัยไม่ใช้การเผยแพร่แบบเป็นช่วง และแพ็กเกจที่ถูกข้ามจะถูกติดตั้งพร้อมกันในการอัปเกรดครั้งถัดไปเมื่อขอบเขตการเผยแพร่ขยายออก

งานอัปเดตอัตโนมัติทำวันละครั้ง โดยตัวจับเวลาสองตัว apt-daily.timer และ apt-daily-upgrade.timer จะเริ่มงานโดยหน่วงเวลาแบบสุ่มจากเวลาที่กำหนด บนเซิร์ฟเวอร์นี้ การรันครั้งถัดไปของ apt-daily-upgrade.timer ถูกตั้งไว้ที่ 06:27:59 (+08) ของวันถัดไป หากเซิร์ฟเวอร์ปิดอยู่และพลาดเวลานั้น งานอาจรันทันทีตอนบูตครั้งถัดไป งาน apt จึงอาจรอสักครู่หลังบูต

ในการตั้งค่าเริ่มต้นจะไม่รีบูต ค่าเริ่มต้นของ Automatic-Reboot ใน 50unattended-upgrades คือ false และในการตั้งค่าของเซิร์ฟเวอร์นี้ก็ไม่ได้เปิดบรรทัดนั้น เมื่อมีการติดตั้งอัปเดตที่ต้องรีบูต จะมีไฟล์ /var/run/reboot-required เกิดขึ้น จึงรีบูตเองเมื่อมีไฟล์นั้น

🔗 เนื้อหาแนะนำ
ไฟร์วอลล์ [Ubuntu] การตั้งค่าไฟร์วอลล์ UFW บน Ubuntu นอกจากสามพอร์ตที่เปิดในบทความนี้ ยังรวมวิธีจัดการกฎ ufw ทั้งชื่อบริการ การอนุญาต IP เฉพาะ และการลบกฎ อ่านบทความ → คำสั่ง ufw status บน Ubuntu

ℹ️ ประกาศเรื่องลิงก์แอฟฟิลิเอต
เนื้อหาของเว็บไซต์นี้มีลิงก์แอฟฟิลิเอต หากผู้เข้าชมซื้อสินค้าหรือบริการผ่านลิงก์เหล่านี้ เว็บไซต์นี้จะได้รับค่าคอมมิชชันจากผู้ขาย ในกระบวนการนี้ ราคาที่ผู้ซื้อจ่าย(ราคาจะลดลงเมื่อมีโปรโมชัน↓)จะไม่สูงขึ้นแต่อย่างใด ราคา ส่วนลด และข้อมูลสต็อกที่แสดงเป็นข้อมูล ณ เวลาที่เขียนและอาจต่างจากความเป็นจริง โปรดตรวจสอบกับผู้ขายอีกครั้งก่อนซื้อ การเลือกและการประเมินสินค้าเขียนตามเกณฑ์ของเราเอง และการได้รับค่าคอมมิชชันหรือไม่ไม่มีผลต่อลำดับการแนะนำหรือเนื้อหาการประเมิน

ใส่ความเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *

Prove your humanity: 6   +   3   =