Operasional VPS8 menit baca

Mengelola Database PostgreSQL di VPS

Database adalah komponen yang paling sering kehabisan RAM lebih dulu. Konfigurasi default PostgreSQL dibuat untuk mesin kecil dan perlu disesuaikan agar sesuai paket VPS Anda.

Diperbarui

Instalasi

sudo apt -y install postgresql postgresql-contrib
sudo systemctl enable --now postgresql
sudo -u postgres psql -c "SELECT version();"

Membuat database dan user aplikasi

sudo -u postgres psql <<'SQL'
CREATE USER app_user WITH PASSWORD 'ganti-dengan-password-kuat';
CREATE DATABASE app_db OWNER app_user;
REVOKE ALL ON SCHEMA public FROM PUBLIC;
GRANT ALL ON SCHEMA public TO app_user;
SQL
Jangan memakai superuser untuk aplikasi. Buat role terpisah dengan hak minimum.

Agar tidak terbuka ke internet

Secara default PostgreSQL hanya mendengarkan di localhost. Jangan ubah `listen_addresses` ke `*` kecuali Anda benar-benar paham risikonya. Untuk akses dari luar, gunakan SSH tunnel:

ssh -L 5432:127.0.0.1:5432 deploy@IP_SERVER

Tuning memori dasar

Aturan aman: sisakan RAM untuk sistem operasi dan aplikasi. Untuk VPS 4 GB, `shared_buffers` 1 GB dan `effective_cache_size` 3 GB sudah wajar.

shared_buffers = 1GB
effective_cache_size = 3GB
work_mem = 16MB
maintenance_work_mem = 256MB
max_connections = 100
Ubah di /etc/postgresql/<versi>/main/postgresql.conf lalu restart. Ukur dengan pg_stat_statements, jangan menebak.

Backup harian dan uji restore

  • Backup yang belum pernah di-restore bukan backup.
  • Simpan salinan di luar server; disk VPS bisa hilang bersama datanya.
  • Backup otomatis harian Hostflow adalah lapisan tambahan, bukan pengganti backup logis Anda.
# /etc/cron.daily/pg-backup
pg_dump -U app_user -Fc app_db > /var/backups/pg/app_db-$(date +%F).dump
find /var/backups/pg -name '*.dump' -mtime +14 -delete

# uji restore ke database sementara
createdb -U app_user restore_test
pg_restore -U app_user -d restore_test /var/backups/pg/app_db-2026-11-01.dump