วิธีตั้งค่า 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

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

วิธีสร้าง Personal Knowledge Base ปลอดภัยด้วย Obsidian และการซิงค์บนคลาวด์Growth
18 กรกฎาคม 2569 เวลา 18:00

วิธีสร้าง Personal Knowledge Base ปลอดภัยด้วย Obsidian และการซิงค์บนคลาวด์

การสร้าง Personal Knowledge Base (PKB) ที่ปลอดภัยช่วยให้คุณเก็บความรู้ส่วนบุคคลได้อย่างเป็นระบบและเข้าถึงได้จากทุกที่ บทความนี้จะอธิบายวิธีใช้ Obsidian เป็นศูนย์กลางจัดการข้อมูล พร้อมเทคนิคการซิงค์บนค…

ต้นฉบับ TTN · ร่างด้วย AI ตรวจโดยบรรณาธิการ6 นาที
วิธีตั้งค่าและใช้ GitHub Copilot ใน Visual Studio Code เพื่อเพิ่มประสิทธิภาพการเขียนโค้ดอย่างมืออาชีพGrowth
18 กรกฎาคม 2569 เวลา 12:00

วิธีตั้งค่าและใช้ GitHub Copilot ใน Visual Studio Code เพื่อเพิ่มประสิทธิภาพการเขียนโค้ดอย่างมืออาชีพ

GitHub Copilot เป็น AI‑assist ที่ช่วยสร้างโค้ดอัตโนมัติใน Visual Studio Code (VS Code) ทำให้คุณเขียนโปรแกรมได้เร็วขึ้นและลดข้อผิดพลาดพื้นฐาน การตั้งค่าเพียงไม่กี่ขั้นตอนก็ทำให้เครื่องมือพร้อมใช้งาน

ต้นฉบับ TTN · ร่างด้วย AI ตรวจโดยบรรณาธิการ5 นาที
วิธีตั้งค่า SSH Agent Forwarding บน macOS เพื่อเชื่อมต่อหลายเซิร์ฟเวอร์อย่างปลอดภัยGrowth
17 กรกฎาคม 2569 เวลา 19:30

วิธีตั้งค่า SSH Agent Forwarding บน macOS เพื่อเชื่อมต่อหลายเซิร์ฟเวอร์อย่างปลอดภัย

การเปิดใช้งาน **SSH Agent Forwarding** บน macOS ช่วยให้คุณสามารถใช้คีย์ส่วนตัวเดียวในการเชื่อมต่อหลายเซิร์ฟเวอร์โดยไม่ต้องคัดลอกคีย์ไปยังเครื่องแต่ละเครื่อง วิธีนี้ทำให้ขั้นตอนการจัดการคีย์ง่ายขึ้นและ…

ต้นฉบับ TTN · ร่างด้วย AI ตรวจโดยบรรณาธิการ6 นาที
วิธี Deploy แอป Serverless บน Cloudflare Workers ด้วย WranglerGrowth
17 กรกฎาคม 2569 เวลา 12:00

วิธี Deploy แอป Serverless บน Cloudflare Workers ด้วย Wrangler

การ Deploy แอป Serverless บน Cloudflare Workers ไม่ต้องจัดสรรเซิร์ฟเวอร์เต็มรูปแบบ เพียงเขียนโค้ด JavaScript/TypeScript แล้วส่งไปที่ Edge Network ของ Cloudflare ได้ทันที บทความนี้จะอธิบายขั้นตอนโดยใช้…

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