
ที่มาภาพ: Unknown Source
วิธีตั้งค่า PostgreSQL บน Docker Compose พร้อมระบบสำรองข้อมูลอัตโนมัติข้ามแพลตฟอร์ม
⚡ สรุป 30 วิ
การใช้ PostgreSQL บน Docker Compose ช่วยให้เราจัดการฐานข้อมูลได้ง่ายและสม่ำเสมอ แต่หากไม่มีระบบสำรองข้อมูล ข้อมูลสำคัญจะสูญหายได้อย่างรวดเร็ว เรียนรู้วิธีตั้งค่า **PostgreSQL** พร้อม **Backup อัตโนมัต…
Overview — Overview
การใช้ PostgreSQL บน Docker Compose ช่วยให้เราจัดการฐานข้อมูลได้ง่ายและสม่ำเสมอ แต่หากไม่มีระบบสำรองข้อมูล ข้อมูลสำคัญจะสูญหายได้อย่างรวดเร็ว เรียนรู้วิธีตั้งค่า PostgreSQL พร้อม Backup อัตโนมัติข้ามแพลตฟอร์ม เพื่อให้ฐานข้อมูลของคุณปลอดภัยแม้ย้ายไปยังเซิร์ฟเวอร์อื่น
- ใช้ Docker Compose รวบรวมคอนเทนเนอร์ PostgreSQL และเครื่องมือสำรอง
- ตั้งค่า Backup ให้อัปโหลดไฟล์ dump ไปยังที่จัดเก็บคลาวด์ (S3, Google Drive ฯลฯ) หรือแชร์โฟลเดอร์ระหว่างแพลตฟอร์ม
- ทำงานอัตโนมัติด้วย cron ภายในคอนเทนเนอร์
ความต้องการเบื้องต้น — Prerequisites
ก่อนเริ่มเราต้องเตรียมสภาพแวดล้อมที่รองรับ Docker Compose และบริการจัดเก็บข้อมูลภายนอก
- Docker Engine ≥ 20.10, Docker‑Compose ≥ 2.0
- บัญชีผู้ใช้บนคลาวด์ (AWS S3, Google Cloud Storage หรือ Azure Blob) หรือโฟลเดอร์แชร์ NFS/SMB ที่เข้าถึงได้จากทุกเครื่อง
- ตัวแปรสิ่งแวดล้อมสำหรับ ACCESS KEY, SECRET KEY และ BUCKET NAME
**Tip: หากต้องการรองรับหลายแพลตฟอร์ม ควรเลือกใช้บริการ S3‑compatible (เช่น MinIO) ที่ทำงานบน Windows, Linux หรือ macOS อย่างเท่าเทียมกัน
ไฟล์ `docker-compose.yml` — Docker Compose File
ไฟล์นี้กำหนดคอนเทนเนอร์ PostgreSQL และคอนเทนเนอร์สำหรับทำ Backup
```yaml version: "3.9"
services: db: image: postgres:15-alpine container_name: pg_main environment:
- POSTGRES_USER=admin
- POSTGRES_PASSWORD=StrongP@ssw0rd
- POSTGRES_DB=appdb
volumes:
- pg_data:/var/lib/postgresql/data
ports:
- "5432:5432"
backup: image: alpine:latest container_name: pg_backup depends_on:
- db
environment:
- AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID}
- AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY}
- S3_BUCKET=${S3_BUCKET}
volumes:
- pg_data:/var/lib/postgresql/data:ro
- ./backup-scripts:/scripts
entrypoint: ["sh", "/scripts/cron.sh"] restart: unless-stopped
volumes: pg_data: ```
- คอนเทนเนอร์ `db` ให้บริการ PostgreSQL ปกติ
- คอนเทนเนอร์ `backup` ทำหน้าที่รันสคริปต์สำรองข้อมูลโดย อ่าน‑only จากโวลุมเดียวกัน
สคริปต์สำรองข้อมูล — Backup Script
สร้างโฟลเดอร์ `backup-scripts` แล้วใส่ไฟล์ `cron.sh` และ `pg_dump.sh`
`pg_dump.sh` — Database Dump
```sh #!/bin/sh DATE=$(date +%Y%m%d_%H%M%S) FILE="/tmp/pg_${DATE}.sql.gz" PGPASSWORD=${POSTGRES_PASSWORD} pg_dump -U ${POSTGRES_USER} -h db appdb | gzip > $FILE aws s3 cp $FILE s3://${S3_BUCKET}/backup/ rm -f $FILE ```
- ใช้ตัวแปรสิ่งแวดล้อมจาก `docker‑compose.yml`
- บีบอัดไฟล์เพื่อประหยัดพื้นที่และแบนด์วิธ
`cron.sh` — ตั้งค่า Cron
```sh #!/bin/sh echo "0 */6 * /scripts/pg_dump.sh >> /var/log/backup.log 2>&1" > /etc/crontabs/root crond -f ```
- `crond -f` ทำให้คอนเทนเนอร์อยู่รอและทำงานต่อเนื่อง
การซิงค์ข้ามแพลตฟอร์ม — Cross‑Platform Sync
หากต้องการสำรองข้อมูลไปยังหลายสถานที่ สามารถใช้วิธีต่อไปนี้ได้
| วิธี | ข้อดี | ข้อเสีย |
|---|---|---|
| AWS S3 / MinIO | รองรับทุก OS, มี SDK มากมาย | ค่าใช้งานตามปริมาณเก็บ |
| **Google Drive (rclone) | ฟรีสำหรับปริมาณเล็ก | ต้องตั้งค่า rclone เพิ่มเติม |
| NFS/SMB Share | ความเร็วสูงใน LAN | ต้องจัดการสิทธิ์บนเครือข่าย |
- ตัวอย่างการเพิ่ม `rclone` เข้าไปในคอนเทนเนอร์ `backup` เพื่อนำไฟล์อัปโหลดไปยัง Google Drive
```Dockerfile FROM alpine:latest RUN apk add --no-cache rclone bash COPY backup-scripts /scripts ENTRYPOINT ["sh","/scripts/cron.sh"] ```
Warning: อย่าลืมตั้งค่า `rclone config` ให้ใช้ “remote” แบบ service‑account** เพื่อความปลอดภัย
การตรวจสอบและกู้คืน — Verification & Restore
หลังจากตั้งค่าตอนแรก ควรทำการทดสอบว่าการสำรองทำงานอย่างถูกต้อง
- ตรวจสอบไฟล์ใน S3 หรือโฟลเดอร์แชร์ว่าเป็น `.sql.gz` และมีขนาดสมเหตุสมผล
- ใช้คำสั่ง `docker exec -i pg_main psql -U admin appdb < backup.sql` เพื่อกู้คืนจากไฟล์ที่ดาวน์โหลด
คำแนะนำพิเศษ — Tips & Common Issues
- ใช้ volume driver แบบ local‑named เพื่อให้ Docker จัดการข้อมูลได้ง่ายและย้ายไปยังเครื่องใหม่โดยเพียง `docker compose up -d`
- หากคอนเทนเนอร์ `backup` เริ่มทำงานก่อน `db` เสร็จ ควรกำหนด `depends_on` พร้อม condition: service_healthy (Docker Compose เวอร์ชัน 3.9+)
**Tip: เปิดใช้งาน healthcheck สำหรับ PostgreSQL
```yaml healthcheck: test: ["CMD-SHELL", "pg_isready -U admin"] interval: 10s timeout: 5s retries: 5 ```
- ควรตั้งค่า Lifecycle Policy บน S3 เพื่อลบไฟล์เก่าอัตโนมัติ (เช่น เก็บ 30 วัน) เพื่อลดต้นทุน
สรุป — Summary
การจัดตั้ง PostgreSQL บน Docker Compose พร้อมระบบสำรองข้อมูลอัตโนมัติทำให้ฐานข้อมูลของคุณปลอดภัยและยืดหยุ่นต่อการเปลี่ยนแปลงแพลตฟอร์ม
- กำหนดคอนเทนเนอร์ `db` และ `backup` ในไฟล์ `docker‑compose.yml`
- ใช้สคริปต์ `pg_dump.sh` บีบอัดและอัปโหลดไฟล์ dump ไปยังคลาวด์หรือแชร์โฟลเดอร์
- ตั้งค่า cron ภายในคอนเทนเนอร์เพื่อทำงานตามช่วงเวลาที่กำหนด
- เลือกวิธีซิงค์ที่เหมาะกับสภาพแวดล้อม (S3, rclone‑Google Drive หรือ NFS)
**จำไว้ว่า: การตรวจสอบ health ของ PostgreSQL และการตั้งค่า Lifecycle Policy บนคลาวด์เป็นสิ่งสำคัญที่สุดในการรักษาความต่อเนื่องและลดต้นทุนของระบบสำรองข้อมูล.
แชร์บทความนี้:
ชอบบทความแบบนี้?
สมัคร AI Automate Weekly Newsletter — รับเคล็ดลับ AI + how-to ใหม่
ทุกสัปดาห์ตรงถึง inbox ฟรี ไม่มีสแปม
แหล่งข่าวต้นฉบับ
- ชื่อต้นฉบับ
- วิธีตั้งค่า PostgreSQL บน Docker Compose พร้อมระบบสำรองข้อมูลอัตโนมัติข้ามแพลตฟอร์ม
- ผู้เขียน
- กองบรรณาธิการ Thai Tech News
- แหล่ง
- บทความต้นฉบับ Thai Tech News · ช่วยร่างด้วย AI, เรียบเรียง/ตรวจสอบโดยกองบรรณาธิการ
- วันที่เผยแพร่
- 18 กรกฎาคม 2569 เวลา 17:50



