Kako automatizovati instalaciju PostgreSQL na Linuxu pomoću skripti?

Article Image

Zašto da automatizuješ instalaciju PostgreSQL i šta dobijaš

Ako upravljaš više servera ili često praviš testna okruženja, ručna instalacija PostgreSQL postaje spora i sklona greškama. Automatizacijom pomoću skripti postižeš konzistentnost, brže ponavljanje procesa i lakše obnavljanje okruženja. Ti ćeš, umesto da ponavljaš iste komande ručno, imati ponovljivo rešenje koje može da se integriše u CI/CD pipeline ili u provisioning alate.

U ovoj fazi ćeš naučiti koje su ključne odluke i pripreme potrebne pre nego što počneš da pišeš skripte: koje distribucije podržati, koje pakete instalirati, kako da postaviš osnovne bezbednosne zahteve i kako da dizajniraš skriptu koja je idempotentna i otporna na greške.

Šta treba pripremiti pre pisanja skripti

Osnovni sistemski zahtevi i privilegije

Prvo proveri da li imaš pristup korisniku sa odgovarajućim privilegijama. Za instalaciju i podešavanje baze obično je potreban root pristup ili sudo privilegije. Takođe, osiguraj da su mrežni portovi (tipično 5432) dostupni tamo gde je to potrebno, i da imaš dovoljno prostora na disku za podatke i logove.

  • Imati sudo ili root privilegije
  • Prostor za data direktorijum i logove
  • Otvoreni ili pravilno konfigurisani firewall portovi
  • Stabilna mrežna konekcija ka repozitorijumima paketa

Podržane Linux distribucije i menadžeri paketa

Pre nego što napišeš skriptu, odluči koje distribucije ćeš podržavati. Najčešće su to Debian/Ubuntu (apt) i CentOS/RHEL/Fedora (dnf/yum). Razlike u imenima paketa, lokacijama konfiguracionih fajlova i komandama za upravljanje servisima (systemctl) treba da budu jasno mapirane u skripti ili u odvojenim granama skripte.

  • Debian/Ubuntu: apt, paket psql i postgresql-{verzija}
  • RHEL/CentOS/Fedora: dnf/yum, paket postgresql-server
  • Sistemi sa systemd: koristi systemctl za start/enable

Bezbednosne smernice i konfiguracioni zahtevi

Planiraj kako ćeš zaštititi instancu već u instalacionoj skripti: kreiranje ograničenog sistema korisnika, postavljanje lozinke za korisnika postgres, omogućavanje TLS (ako je potrebno), i podešavanje pristupa u pg_hba.conf. Takođe razmisli o enkripciji rezervnih kopija i rotaciji logova.

  • Automatsko postavljanje lozinke za postgres korisnika ili korišćenje skupa bezbednih tajni
  • Izmena pg_hba.conf da ograniči pristup po adresama i autentikaciji
  • Omogućavanje i testiranje systemd servisa

Sa ovim planom i pripremama jasnim u glavi, sledeći korak je pisanje konkretnog skriptnog primera koji detektuje distribuciju, instalira potrebne pakete i inicijalizuje bazu — u nastavku ćemo preći na praktične skripte za Debian/Ubuntu i CentOS/RHEL.

Praktičan skript za Debian/Ubuntu

Za Debian/Ubuntu cilj je jednostavan, čitljiv skript koji radi detekciju distribucije, osvežava repozitorijume, instalira paket i inicijalizuje servis. Ključne tačke: koristi apt non-interaktivno, vodi računa o verziji (ako zahtevaš specifičnu verziju) i postara se da promena u pg_hba.conf bude idempotentna.

Osnovna logika skripta:

  • proveri sudo privilegije
  • apt update && apt install -y postgresql postgresql-contrib
  • osiguraj da systemd servis postoji i omogućiti ga
  • inicijalizuj/verify data direktorijum (ako je potrebno)
  • postavi lozinku za korisnika postgres na siguran način
  • aplikuj restrikcije u pg_hba.conf i reload systemd/postgresql

Primer ključnih komandi (sa objašnjenjima integrisanim u skript):

# Detekcija i instalacija
if ! command -v psql >/dev/null 2>&1; then
  apt-get update
  DEBIAN_FRONTEND=noninteractive apt-get install -y postgresql postgresql-contrib
fi

# Omogući i startuj servis
systemctl enable --now postgresql

# Postavljanje lozinke (preporučeno: uzeti iz tajnog store)
sudo -u postgres psql -c "ALTER USER postgres WITH PASSWORD 'SILNA_TAJNA_LOZINKA';"

# Backup i izmena pg_hba.conf (dodaj samo ako ne postoji sličan unos)
PG_HBA=/etc/postgresql/$(ls /etc/postgresql)/main/pg_hba.conf
grep -q "host all all 10.0.0.0/8 md5" "$PG_HBA" || 
  (cp "$PG_HBA" "${PG_HBA}.bak" && echo "host all all 10.0.0.0/8 md5" >> "$PG_HBA")
systemctl reload postgresql

Napomena: putanja do /etc/postgresql zavisi od verzije; koristi apstrahovanje ili varijablu. Izbegavaj hardkodovanje lozinki u skriptu — bolje je čitati iz env var ili secrets managera.

Praktičan skript za CentOS/RHEL/Fedora

Na RHEL-family sistemima koraci su slični, ali inicijalizacija baze i paketi se razlikuju. Tipičan tok:

  • instalacija paketa: dnf/yum install -y postgresql-server
  • inicijalizacija: postgresql-setup –initdb (na CentOS/RHEL)
  • omogućavanje servisa: systemctl enable –now postgresql
  • podešavanje SELinux-a i firewall-a ako koristite nestandardni direktorijum ili otvoreni port

Primer fragmenta za RHEL:

if ! command -v psql >/dev/null 2>&1; then
  dnf install -y postgresql-server postgresql-contrib
  postgresql-setup --initdb
fi

systemctl enable --now postgresql

# SELinux: ako pomeraš data direktorijum
# semanage fcontext -a -t postgresql_db_t "/data/pg(/.*)?"
# restorecon -Rv /data/pg

sudo -u postgres psql -c "ALTER USER postgres WITH PASSWORD 'SILNA_TAJNA_LOZINKA';"

Kako testirati, logovati greške i obezbediti idempotentnost

Skripte treba da budu sigurne za ponovljeno izvršavanje. To postižeš proverama pre nego što menjaš stanje sistema i vraćanjem povratnih kodova za greške.

  • Koristi set -euo pipefail i trap za hvatanje grešaka i čišćenje privremenih fajlova.
  • Pre instalacije proveri da li je paket već prisutan (command -v psql).
  • Pre izmene konfiguracionog fajla napravi backup sa vremenskom oznakom i baci checksum da bi detektovao promene.
  • Loguj ključne korake u fajl (npr. /var/log/pg_install.log) sa timestampom; to olakšava debug.
  • Dodaj health-check na kraju: sudo -u postgres psql -c “l” i provera da li je port 5432 u LISTEN stanju (ss -ltn | grep 5432).

Sa ovim pristupom dobijaš skripte koje su ponovljive, pregledne i spremne za integraciju u alat za provisioning ili CI/CD pipeline.

Integracija u CI/CD i provisioning

Kada skripte za instalaciju rade pouzdano lokalno, sledeći korak je integracija u automatizovane tokove rada. Postavi skripte u verzionisani repozitorijum, koristi tajne iz sigurnog skladišta (Vault, AWS Secrets Manager, GitHub Secrets) i dodaj provere u pipeline koje validiraju da je instanca funkcionalna nakon deploy-a.

  • Pokreni instalaciju u izolovanom okruženju (kontejner, VM) pre produkcije.
  • Dodaj health-check korake: konekcija psql, provera LISTEN porta i osnovne SQL upite.
  • Koristi alate za provisioning (Ansible, Terraform, cloud-init) da uvedeš idempotentnost i centralno upravljanje konfiguracijama.
  • Osiguraj rollback proceduru i testiraj restore iz backup-a pre nego što promena uđe u produkciju.

Završne misli i smernice za dalje

Automatizacija instalacije PostgreSQL pomoću skripti je početak šireg procesa inženjeringa koji uključuje bezbednost, monitoring i rutine backup/restore. Nastavi da unapređuješ skripte iterativno: dodaj robustno logovanje, integraciju sa tajnim menadžerima i testove koji se izvršavaju u CI/CD pipeline-u. Za detaljnije informacije o konfiguraciji i najboljim praksama, korisno je konsultovati PostgreSQL dokumentacija.

Želiš li da dodam primer Ansible role ili CI pipeline YAML konfiguracije koji koristi opisan pristup? Mogu pripremiti šablon koji ćeš odmah moći da primeniš.

Operacije, monitoring i održavanje

Nakon uspešne instalacije i inicijalne konfiguracije, važno je planirati rutinske operacije i alate za praćenje performansi i zdravlja sistema. Dobra praksa je automatizovati backup, nadzor i zadatke održavanja kako bi sistem bio dostupan, konzistentan i lako oporavljiv u slučaju problema.

Backup i restore strategije

Implementiraj višeslojni pristup backupu: kombinuj ručne ili inkrementalne snimke (pg_basebackup), logičke bekapove (pg_dump/pg_dumpall) i arhiviranje WAL fajlova za point-in-time recovery (PITR). Definiši politiku zadržavanja, redovno testiraj restore procedure i automatizuj verifikaciju bekapa.

  • Periodični full backup (pg_basebackup) + inkrementalni WAL arhiv
  • Logički backup za kritične šeme/objekte (pg_dump)
  • Automatizovano testiranje restore procesa u izolovanom okruženju

Monitoring, alerting i zdravlje sistema

Postavi prikupljanje metrika i alerting: prati opterećenje CPU/RAM, korišćenje diska, broj konekcija, replika i statistike upita (pg_stat_statements). Koristi alate poput Prometheus + PostgreSQL exporter, Grafana za vizualizaciju i sistem za alerting (Alertmanager). Logovi i slow-query analize su ključni za rano otkrivanje problema.

  • Integracija sa Prometheus i Grafana
  • Alert na visok broj konekcija, dugotrajne transakcije i nisku slobodnu memoriju
  • Automatski rotiraj logove i čuvaj metapodatke za debugging

Nadogradnje, tuniranje i održavanje Performansi

Planiraj bezbedne nadogradnje koristeći testne instance i alate kao što je pg_upgrade za major verzije. Drži autovacuum konfigurisanim, prati bloat i podešavaj parametrе (work_mem, shared_buffers, maintenance_work_mem) prema opterećenju. Za kritične sisteme razmisli o replikaciji i failover rešenjima.