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:
- Pastikan Anda memakai image Postgres resmi.
- Simpan konfigurasi postgres Anda dalam file Docker Compose (lihat contoh di bawah).
- Masukkan file docker compose ke source control (seperti Git) bersama source code proyek Anda.
- Pastikan semua anggota tim memakai pengaturan postgres yang sama untuk development.
- Lakukan bootstrap image postgres Anda (jika perlu) dengan beberapa fitur lanjutan dari docker image tersebut.
- Pastikan Anda menentukan
volumeyang dipakai container untuk menyimpan data, agar data tetap ada di setiap kali dijalankan. - 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:
- Jalankan
pg_dumpuntuk mengekspor database:docker exec postgres pg_dump -U myuser mydatabase > ./backups/backup_$(date +%F).sqlPerintah ini membuat backup database di dalam direktori
backups. - 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 - 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
- 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.
- Restore ke database Anda
docker exec -i postgres psql -U myuser -d mydatabase < ./backups/backup_YYYY-MM-DD.sqlPerintah 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.
Apa Kata Pengguna tentang Beekeeper Studio
"Beekeeper Studio sepenuhnya menggantikan workflow PostgreSQL lama saya. Cepat, intuitif, dan membuat kerja dengan database kembali menyenangkan."
"Saya sudah mencoba banyak GUI database, tetapi Beekeeper punya keseimbangan sempurna antara fitur dan kesederhanaan. Langsung jalan."