🧚 Dengar! Beekeeper Studio adalah GUI database yang cepat, modern, dan open source Unduh
21 September 2024 Oleh Matthew Rathbone

Jika Anda membangun aplikasi yang memakai PostgreSQL di production untuk menyimpan data, cepat atau lambat Anda mungkin perlu menjalankan PostgreSQL untuk development di mesin lokal Anda.

Kadang Anda bisa memakai sesuatu seperti SQLite di development dan Postgres di production, tetapi begitu aplikasi Anda mulai serius, Anda pasti ingin semua environment-nya sama.

Contoh Postgres Docker untuk Development Lokal

Saya lebih suka memakai docker-compose daripada docker cli, tetapi pilihannya terserah Anda. Saya sajikan keduanya di sini.

Saya sarankan mengganti image yang dipakai di sini agar sama dengan versi yang Anda gunakan di production, misalnya postgres:9.4 alih-alih postgres:latest.

PostgreSQL dengan Docker CLI

docker run -d \
  --name psql \
  -e POSTGRES_USER=postgres \
  -e POSTGRES_PASSWORD=example \
  -v psql:/var/lib/postgresql/data \
  -p 5555:5432 \
  postgres:latest

Perintah ini akan menjalankan server PostgreSQL Anda dan membuatnya tersedia di localhost:5555. Simpan dalam skrip seperti dev/postgres dan jalankan setiap kali Anda memulai aplikasi.

PostgreSQL dengan Docker Compose

Saya lebih suka memakai Docker Compose, karena memudahkan untuk mengubah konfigurasi database dan menambahkan layanan lain (misalnya Redis) kapan pun saya butuhkan.

version: '3'
volumes:
  psql:
services:
  psql:
    image: postgres:latest
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: example # only do this in development
    volumes:
      - psql:/var/lib/postgresql/data # save data between restarts
    ports:
      - 5555:5432 # binds port 5555 on your computer to the postgres port!

Sekali lagi, database development Anda akan tersedia di localhost:5555

Rekomendasi untuk Development Postgres Lokal

Kami menyarankan mengelola postgres untuk development dengan cara berikut:

  1. Pastikan Anda memakai image Postgres resmi.
  2. Simpan konfigurasi postgres Anda dalam file Docker Compose (lihat contoh di bawah).
  3. Masukkan file docker compose ke source control (seperti Git) bersama source code proyek Anda.
  4. Pastikan semua anggota tim memakai pengaturan postgres yang sama untuk development.
  5. Lakukan bootstrap image postgres Anda (jika perlu) dengan beberapa fitur lanjutan dari docker image tersebut.
  6. Pastikan Anda menentukan volume yang dipakai container untuk menyimpan data, agar data tetap ada di setiap kali dijalankan.
  7. Gunakan fitur bawaan image untuk menjalankan SQL bootstrap, mengatur kredensial, dan membuat database.

Docker vs Instalasi Postgres di Sistem

Anda bisa saja langsung menginstal Postgres di komputer. Ada build untuk ketiga sistem operasi utama. Kelihatannya itu cara paling mudah, tetapi ada beberapa masalah dengan pendekatan ini.

Masalah Instalasi Postgres di Level Sistem

  • Postgres akan selalu berjalan sebagai layanan sistem
  • Anda hanya bisa dengan mudah menginstal dan menjalankan satu versi Postgres dalam satu waktu
  • Setiap aplikasi yang butuh database Postgres sendiri harus berbagi instance yang sama
  • Membutuhkan akses root/admin ke mesin Anda
  • Jika Anda bekerja dalam tim, setiap setup bisa sedikit berbeda, sehingga sulit berbagi konfigurasi dev.

Docker Mengatasi (Sebagian Besar) Masalah Ini

Dengan Docker, setiap proyek yang sedang dikembangkan bisa punya Postgres sendiri yang terkunci di versi yang tepat, dengan setup standar yang dibagikan ke rekan tim dan bisa dimasukkan ke source control.

Masalah terbesar menjalankan Postgres di container Docker adalah, ya, belajar Docker jika Anda belum pernah memakainya.

Menggunakan Docker untuk Postgres di Production

Jika Anda memakai Docker murni untuk production, menjalankan database Postgres cukup mirip dengan konfigurasi development kita

version: '3.8'
volumes:
  psql_data:
    driver: local
services:
  postgres:
    image: postgres:14
    container_name: postgres
    restart: always
    environment:
      POSTGRES_USER: myuser
      POSTGRES_PASSWORD: mysecurepassword
      POSTGRES_DB: mydatabase
    volumes:
      - psql_data:/var/lib/postgresql/data
      - ./backups:/backups
    ports:
      - 5432:5432
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U myuser"]
      interval: 30s
      timeout: 10s
      retries: 5

Backup dan Restore Database Postgres di Docker

Berikut ini bukan panduan lengkap cara mengelola Postgres di production, tetapi bisa menjadi titik awal sederhana untuk strategi backup yang simpel.

Di environment production, backup PostgreSQL bisa diotomatiskan dengan mengekspor database ke file backup secara berkala. Caranya dengan menjadwalkan cron job atau container backup khusus yang secara berkala menjalankan perintah pg_dump untuk mengekspor data database ke sebuah direktori (misalnya /backups) yang di-mount di sistem host. Folder backups pada konfigurasi di atas di-mount ke direktori di mesin host, tempat file backup bisa disimpan dengan aman.

Membuat Backup di Docker Postgres

Untuk strategi backup dasar:

  1. Jalankan pg_dump untuk mengekspor database:
    docker exec postgres pg_dump -U myuser mydatabase > ./backups/backup_$(date +%F).sql
    

    Perintah ini membuat backup database di dalam direktori backups.

  2. Anda bisa menyiapkan cron job atau mekanisme penjadwalan lain untuk menjalankan perintah ini secara rutin (misalnya harian atau mingguan).
      0 2 * * * docker exec postgres pg_dump -U myuser mydatabase > /path/to/backups/backup_$(date +\%F).sql
    
  3. Unggah backup ke S3 atau lokasi penyimpanan serupa
      aws s3 cp ./backups/backup_$(date +%F).sql s3://your-bucket-name/path/to/backup/
    

    Selain itu, Anda bisa menyiapkan pengarsipan WAL (Write-Ahead Logging) untuk membuat backup perubahan secara berkelanjutan sehingga memungkinkan point-in-time recovery, tetapi itu di luar cakupan artikel ini. Lihat dokumentasi resmi untuk informasi lebih lanjut.

Me-restore Backup

  1. Unduh backup dari S3
      aws s3 cp s3://your-bucket-name/path/to/backup/backup_YYYY-MM-DD.sql ./backups/
    

    Perintah ini akan mengunduh file backup dari S3 ke direktori backups lokal Anda.

  2. Restore ke database Anda
      docker exec -i postgres psql -U myuser -d mydatabase < ./backups/backup_YYYY-MM-DD.sql
    

    Perintah ini akan memakai psql untuk me-restore file backup ke container PostgreSQL Anda yang sedang berjalan.

Kesimpulan

Sekarang Anda seharusnya sudah memahami dasar-dasar cara menjalankan dan mengelola container Docker Postgres. Perlu diingat, ada banyak hal lain yang Anda butuhkan untuk menjalankan cluster Postgres di production (misalnya monitoring, alert), tetapi semoga panduan di atas bisa membantu Anda memulai.

Beekeeper Studio Adalah GUI Database Gratis & Open Source

Tool query & editor SQL terbaik yang pernah saya pakai. Semua yang saya butuhkan untuk mengelola database ada di sini. - ⭐⭐⭐⭐⭐ Mit

Beekeeper Studio cepat, intuitif, dan mudah digunakan. Beekeeper mendukung banyak sekali database, dan berjalan mulus di Windows, Mac, dan Linux.

Versi Linux Beekeeper punya fitur 100% lengkap, tanpa potong kompas, tanpa kompromi fitur.

Apa Kata Pengguna tentang Beekeeper Studio

★★★★★
"Beekeeper Studio sepenuhnya menggantikan workflow PostgreSQL lama saya. Cepat, intuitif, dan membuat kerja dengan database kembali menyenangkan."
— Alex K., Database Developer
★★★★★
"Saya sudah mencoba banyak GUI database, tetapi Beekeeper punya keseimbangan sempurna antara fitur dan kesederhanaan. Langsung jalan."
— Sarah M., Full Stack Engineer

Siap Meningkatkan Workflow PostgreSQL Anda?

download Unduh Gratis