−25%

Windows รายปี ถึง 31 ต.ค. ดูแพ็กเกจ

EQVPS

วิธีติดตั้ง PostgreSQL บน VPS และเชื่อมต่ออย่างปลอดภัย

ติดตั้ง PostgreSQL 16 บน Ubuntu สร้างฐานข้อมูลและผู้ใช้ แล้วเชื่อมต่อจากระยะไกลโดยไม่เปิดพอร์ต 5432 สู่อินเทอร์เน็ต: ผ่านอุโมงค์ SSH หรือรายการอนุญาต

PostgreSQL ติดตั้งได้ด้วยคำสั่งเดียว จุดที่คนมักพลาดคือการเข้าถึงจากระยะไกล: เปิดพอร์ต 5432 ให้ทั้งโลก ตั้งรหัสผ่าน แล้วสงสัยว่าทำไมบันทึกเต็มไปด้วยความพยายามล็อกอิน คู่มือนี้ติดตั้ง Postgres บน Ubuntu 24.04 สร้างฐานข้อมูล และแสดงสองวิธีที่ปลอดภัยในการเชื่อมต่อจากภายนอก

1. การติดตั้ง

apt update && apt install -y postgresql
systemctl status postgresql --no-pager

บน Ubuntu 24.04 จะได้ PostgreSQL 16 โดยค่าเริ่มต้นมันรับฟังเฉพาะ localhost ให้คงไว้แบบนั้นเว้นแต่คุณมีเหตุผล

2. สร้างผู้ใช้และฐานข้อมูล

sudo -u postgres psql <<'SQL'
CREATE USER app WITH PASSWORD 'use-a-long-random-password';
CREATE DATABASE appdb OWNER app;
SQL

แอปบนเซิร์ฟเวอร์เดียวกันเชื่อมต่อด้วย postgresql://app:PASSWORD@localhost:5432/appdb

3. เชื่อมต่อจากแล็ปท็อป: อุโมงค์ SSH (แนะนำ)

ไม่ต้องเปิดอะไร ไม่ต้องตั้งค่าอะไรบนเซิร์ฟเวอร์ อุโมงค์จะส่งต่อพอร์ตภายในผ่าน SSH:

ssh -N -L 5433:localhost:5432 root@203.0.113.10

บน แพ็กเกจ NAT ให้เพิ่มพอร์ต SSH ส่วนตัวจากแผงควบคุม:

ssh -N -p 20123 -L 5433:localhost:5432 root@your-nat-host

ขณะที่อุโมงค์เปิดอยู่ ให้ชี้ไคลเอนต์ฐานข้อมูลไปที่ localhost:5433 SSH เข้ารหัสทุกอย่าง และพอร์ต 5432 ยังปิดต่ออินเทอร์เน็ต เครื่องมือกราฟิกอย่าง DBeaver และ pgAdmin มีแท็บ “อุโมงค์ SSH” ที่ทำสิ่งเดียวกัน

4. การเข้าถึงโดยตรงสำหรับเซิร์ฟเวอร์อื่น (รายการอนุญาต)

หากเซิร์ฟเวอร์แอปที่อื่นต้องเชื่อมต่อโดยตรง ให้อนุญาต เฉพาะ IP ของมัน ในกรณีนี้เซิร์ฟเวอร์ฐานข้อมูลต้องอยู่บนแพ็กเกจที่มี IP เฉพาะ เพราะแพ็กเกจ NAT ไม่รับการเชื่อมต่อขาเข้านอกจาก SSH

ใน /etc/postgresql/16/main/postgresql.conf:

listen_addresses = '*'

ท้ายไฟล์ /etc/postgresql/16/main/pg_hba.conf:

hostssl  appdb  app  198.51.100.20/32  scram-sha-256

เปิดไฟร์วอลล์ให้ที่อยู่นั้นที่เดียวแล้วรีสตาร์ต:

ufw allow from 198.51.100.20 to any port 5432 proto tcp
systemctl restart postgresql

hostssl บังคับให้การเชื่อมต่อเข้ารหัส แพ็กเกจของ Ubuntu มาพร้อมใบรับรองแบบ self-signed ไคลเอนต์จึงควรเชื่อมต่อด้วย sslmode=require

5. การตั้งค่าเริ่มต้นที่สมเหตุสมผล

สำหรับเซิร์ฟเวอร์ RAM 2 GB ใน postgresql.conf:

shared_buffers = 512MB
effective_cache_size = 1536MB
work_mem = 8MB

รีสตาร์ตหลังเปลี่ยนค่า เท่านี้ก็พอสำหรับแอปเล็กส่วนใหญ่ ค่อยปรับเพิ่มเมื่อเห็นคิวรีจริง

6. การสำรองข้อมูล

dump ทุกคืนและเก็บไว้หนึ่งสัปดาห์:

mkdir -p /var/backups/pg && chown postgres /var/backups/pg
cat > /etc/cron.d/pg-backup <<'EOF'
30 3 * * * postgres pg_dump -Fc appdb > /var/backups/pg/appdb-$(date +\%u).dump
EOF

-Fc สร้างไฟล์ dump แบบบีบอัดที่กู้คืนด้วย pg_restore คัดลอก dump ไปเก็บนอกเซิร์ฟเวอร์ด้วย Managed Backups เพิ่มจุดกู้คืนรายวันของทั้งเครื่อง

ที่เกี่ยวข้อง

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

ควรเปิดพอร์ต 5432 สู่อินเทอร์เน็ตไหม?

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

ใช้ PostgreSQL บนแพ็กเกจ NAT ได้ไหม?

ได้ แอปบนเซิร์ฟเวอร์เดียวกันเชื่อมต่อภายใน และคุณเข้าถึงฐานข้อมูลจากแล็ปท็อปผ่านอุโมงค์ SSH บนพอร์ต SSH ส่วนตัว สิ่งที่แพ็กเกจ NAT ทำไม่ได้คือรับการเชื่อมต่อขาเข้าโดยตรงไปยังพอร์ต 5432 จากเซิร์ฟเวอร์อื่น

PostgreSQL ต้องใช้ RAM เท่าไร?

มันทำงานได้ด้วยหน่วยความจำไม่กี่ร้อยเมกะไบต์และใช้ทุกอย่างที่คุณให้เป็นแคช จุดเริ่มต้นที่นิยมคือ shared_buffers ราว 25% ของ RAM สำหรับฐานข้อมูลของแอปเล็ก RAM 2 GB บนเซิร์ฟเวอร์ก็เหลือเฟือ

จะสำรองฐานข้อมูลอย่างไร?

ใช้ pg_dump ในรูปแบบ custom ('pg_dump -Fc') และรันผ่าน cron เก็บสำเนาไว้นอกเซิร์ฟเวอร์ด้วย Managed Backups เพิ่มจุดกู้คืนรายวันของทั้งเซิร์ฟเวอร์

จะได้ PostgreSQL เวอร์ชันไหน?

Ubuntu 24.04 มาพร้อม PostgreSQL 16 และ Debian 12 มาพร้อมเวอร์ชัน 15 หากต้องการเวอร์ชันหลักที่ใหม่กว่า ให้เพิ่มที่เก็บ apt อย่างเป็นทางการของ PostgreSQL (apt.postgresql.org)

ความคิดเห็น

ยังไม่มีความคิดเห็น เป็นคนแรกสิ

แสดงความคิดเห็น

ความคิดเห็นจะถูกตรวจสอบก่อนแสดง