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 เพิ่มจุดกู้คืนรายวันของทั้งเครื่อง
ความคิดเห็น
ยังไม่มีความคิดเห็น เป็นคนแรกสิ