วิธีตั้งค่า PostgreSQL บน Docker Compose พร้อมระบบสำรองข้อมูลอัตโนมัติข้ามแพลตฟอร์ม

ที่มาภาพ: 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

Related

บทความที่เกี่ยวข้อง

วิธีตั้งค่าและใช้ SQLite Encryption Extension บน macOS อย่างปลอดภัยGrowth
30 กรกฎาคม 2569 เวลา 20:30

วิธีตั้งค่าและใช้ SQLite Encryption Extension บน macOS อย่างปลอดภัย

**SQLite Encryption Extension (SEE) คือส่วนขยายที่ให้ SQLite รองรับการเข้ารหัสข้อมูลโดยอัตโนมัติบนไฟล์ฐานข้อมูล การใช้งาน SEE บน macOS ต้องทำตามขั้นตอนตั้งค่าและคอมไพล์อย่างระมัดระวัง เพื่อป้องกันข้อม…

ต้นฉบับ TTN · ร่างด้วย AI ตรวจโดยบรรณาธิการ8 นาที
วิธีสร้าง Local Development Environment แบบ Isolated ด้วย VS Code Dev Containers บน macOS อย่างปลอดภัยGrowth
30 กรกฎาคม 2569 เวลา 19:00

วิธีสร้าง Local Development Environment แบบ Isolated ด้วย VS Code Dev Containers บน macOS อย่างปลอดภัย

การพัฒนาแบบ **Isolated** ช่วยให้โค้ดทำงานในสภาพแวดล้อมเดียวกันทุกเครื่องโดยไม่ต้องกังวลเรื่อง Dependency ที่แตกต่างกัน บน macOS เราสามารถใช้ **VS Code Dev Containers** ร่วมกับ Docker เพื่อสร้าง sandbo…

ต้นฉบับ TTN · ร่างด้วย AI ตรวจโดยบรรณาธิการ7 นาที
วิธีสร้าง Progressive Web App (PWA) ด้วย Vue.js ให้ทำงานออฟไลน์อย่างปลอดภัยGrowth
30 กรกฎาคม 2569 เวลา 11:30

วิธีสร้าง Progressive Web App (PWA) ด้วย Vue.js ให้ทำงานออฟไลน์อย่างปลอดภัย

**บทความนี้จะอธิบายวิธีสร้าง Progressive Web App (PWA) ด้วย Vue.js ให้ทำงานแบบออฟไลน์อย่างปลอดภัย**

ต้นฉบับ TTN · ร่างด้วย AI ตรวจโดยบรรณาธิการ7 นาที
วิธีตั้งค่า Passwordless Authentication ด้วย WebAuthn บนเว็บไซต์ของคุณอย่างปลอดภัยGrowth
29 กรกฎาคม 2569 เวลา 20:30

วิธีตั้งค่า Passwordless Authentication ด้วย WebAuthn บนเว็บไซต์ของคุณอย่างปลอดภัย

การยืนยันตัวตนแบบ **Passwordless** ด้วย WebAuthn ช่วยลดความเสี่ยงจากรหัสผ่านที่อาจถูกขโมยหรือคาดเดาได้  โดยใช้ข้อมูลชีวมิติหรืออุปกรณ์ฮาร์ดแวร์เป็นกุญแจหลัก  บทความนี้จะสรุปวิธีตั้งค่าให้เว็บของคุณรอง…

ต้นฉบับ TTN · ร่างด้วย AI ตรวจโดยบรรณาธิการ7 นาที
คัดลอกลิงก์แล้ว!