Files
004.erp.generic/docs/production-db-local-setup.md
mariomitte 1d7d631fbd Refactor dashboard sections: KPI cards, filters, fallbacks
- Replace 4 static KPI cards with 5 interactive cards
  - 'Otvoreni nalozi' and 'Servisi danas' are now clickable links
  - Added context-aware subtotals (u kontekstu) when crane context is set
  - Replaced 'Upozorenja' (mileage-based, irrelevant for cranes) with 'Bez putnog naloga'
  - 'Dovrseni nalozi' now shows completion percentage
  - Added new card 'Moji zadaci danas' (tasks assigned to current user, today)
- Added crane context filter toggle on the tasks table (Sve dizalice / Odabrani kontekst)
- Service records page now shows last 10 records as fallback when no crane context is selected
- Moved SyncLogPanel into a collapsible <details> element
- Removed dead code: PAGE_MODE_TO_SECTION, activeSection/setActiveSection state,
  navbar:navigate event handler, and DashboardTopbar nav tab block (showSectionNav
  was always false; navigation is handled by Navbar.jsx)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-08-02 23:06:33 +02:00

5.7 KiB

Preuzimanje produkcijske baze podataka na lokalni PC

Vodič za lokalni razvoj s kopijom produkcijskog PostgreSQL-a bez mijenjanja produkcijske baze.


Preduvjeti

  • SSH pristup produkcijskom serveru
  • Docker Desktop instaliran lokalno
  • scp dostupan u PowerShell / terminalu
  • Lokalni .env s DEBUG=True i drugačijim SECRET_KEY od produkcije

Korak 1 — Na produkcijskom serveru: napravi dump

SSH-aj na produkcijski server, zatim pokreni:

docker exec 004erpdb pg_dump \
  -U $POSTGRES_USER \
  -d $POSTGRES_DB \
  --no-owner \
  --no-acl \
  -Fc \
  -f /tmp/prod_dump.dump

-Fc — custom format (komprimiran, pogodniji za pg_restore)
--no-owner --no-acl — izostavlja produkcijske usere i privilegije

Ako env varijable nisu dostupne u shell sesiji, napiši vrijednosti direktno:

docker exec 004erpdb sh -c \
  "pg_dump -U TVOJ_USER TVOJA_BAZA --no-owner --no-acl -Fc -f /tmp/prod_dump.dump"

Ako baza ima desetke gigabajta, pg_dump može opteretiti disk produkcije. U tom slučaju, dumpaj u komprimirani format --exclude-table-data='log_*':

docker exec 004erpdb pg_dump \
  -U $POSTGRES_USER \
  -d $POSTGRES_DB \
  --no-owner \
  --no-acl \
  --exclude-table-data='log_*' \
  -Fc \
  -f /tmp/prod_dump.dump
docker exec 004erpdb sh -c 'pg_dump
  -U "$TVOJ_USER"
  -d "$TVOJA_BAZA"
  --no-owner
  --no-acl
  --exclude-table-data='log_*'
  -Fc
  -f /tmp/prod_dump.dump'

Korak 2 — Kopiraj dump na lokalni PC

Iz docker servera na host server:

docker cp 004erpdb:/tmp/prod_dump.dump /tmp/prod_dump.dump

Iz lokalnog PowerShell terminala:

```powershell
scp tvoj_user@IP_SERVERA:/tmp/prod_dump.dump C:\Users\mario.tkalac\Downloads\prod_dump.dump

S SSH ključem:

scp -i C:\Users\mario.tkalac\.ssh\id_rsa `
  tvoj_user@IP_SERVERA:/tmp/prod_dump.dump `
  C:\Users\mario.tkalac\Downloads\prod_dump.dump

Brisanje dump-a s produkcijskog servera (opcionalno):

ssh tvoj_user@IP_SERVERA "rm /tmp/prod_dump.dump"

Korak 3 — Pokreni lokalnu bazu

cd C:\Users\mario.tkalac\workspace\aplikacija\004.erp.generic

docker compose -f docker-compose.yml up -d db

Pričekaj dok container postane healthy:

docker ps --filter "name=004erpdb"

Korak 4 — Restoriraj dump u lokalnu bazu

# Kopiraj dump file u container
docker cp C:\Users\mario.tkalac\Downloads\prod_dump.dump 004erpdb:/tmp/prod_dump.dump

# Dropaj lokalnu bazu i kreiraj novu praznu (BRIŠE lokalne podatke!)
docker exec 004erpdb dropdb -U TVOJ_USER TVOJA_BAZA --if-exists
docker exec 004erpdb createdb -U TVOJ_USER TVOJA_BAZA

# Restoriraj
docker exec 004erpdb sh -c 'pg_restore
  -U "$TVOJ_USER"
  -d "$TVOJA_BAZA"
  --no-owner
  --no-acl
  -Fc
  -f /tmp/prod_dump.dump'

⚠️ Zamijeni TVOJ_USER i TVOJA_BAZA s vrijednostima iz lokalnog .env fajla:
POSTGRES_USER i POSTGRES_DB.


Korak 5 — Primijeni nove migracije

Pokrenuti odmah nakon restore-a kako bi lokalna shema bila u sinkronizaciji s kodom:

docker compose -f docker-compose.yml -f docker-compose.dev.yml `
  run --rm backend python manage.py migrate

Migracije na postojećim podacima su sigurne — dodaju tablice/stupce, ne brišu podatke.


Korak 6 — Postavi lokalnog admin korisnika

Produkcijske lozinke su hashirane i ne mogu se koristiti direktno. Kreiraj novog superusera:

docker compose -f docker-compose.yml -f docker-compose.dev.yml `
  run --rm backend python manage.py createsuperuser

Ili resetiraj lozinku postojećem accountu:

docker compose -f docker-compose.yml -f docker-compose.dev.yml `
  run --rm backend python manage.py changepassword tvoj@email.com

Korak 7 — Pokreni cijeli dev stack

docker compose -f docker-compose.yml -f docker-compose.dev.yml up -d backend frontend

Provjeri:

  • Backend: http://localhost:8001/api/
  • Frontend: http://localhost:4321/

Napomene o sigurnosti

Tema Akcija
Produkcijska baza pg_dump je read-only operacija — produkcijska baza nije dirnuta
SECRET_KEY Lokalni .env mora imati drugačiji SECRET_KEY od produkcije
DEBUG Lokalni .env mora imati DEBUG=True
Media fajlovi Dump ne uključuje fajlove iz media_volume; kopirati ručno ako su potrebni
Osobni podaci Baza može sadržavati osobne podatke klijenata — koristiti samo na zaštićenom lokalnom stroju

Media fajlovi (opcionalno)

Ako trebaju priloženi fajlovi (slike, PDF-ovi):

# Na produkcijskom serveru — arhiviraj media
docker run --rm \
  -v media_volume:/data \
  alpine tar czf /tmp/media.tar.gz -C /data .

# Kopiraj lokalno
scp tvoj_user@IP_SERVERA:/tmp/media.tar.gz C:\Users\mario.tkalac\Downloads\media.tar.gz

Raspakiraj u lokalni Docker volume:

# Kopiraj arhivu u privremeni container
docker run --rm `
  -v 004erpgeneric_media_volume:/data `
  -v C:\Users\mario.tkalac\Downloads:/backup `
  alpine sh -c "tar xzf /backup/media.tar.gz -C /data"

Brzi pregled naredbi (cheat sheet)

# 1. Dump na serveru
docker exec 004erpdb pg_dump -U USER DB --no-owner --no-acl -Fc -f /tmp/prod_dump.dump

# 2. Kopiraj lokalno
scp user@IP:/tmp/prod_dump.dump ~/Downloads/prod_dump.dump

# 3. Restore lokalno
docker cp ~/Downloads/prod_dump.dump 004erpdb:/tmp/prod_dump.dump
docker exec 004erpdb dropdb -U USER DB --if-exists
docker exec 004erpdb createdb -U USER DB
docker exec 004erpdb pg_restore -U USER -d DB --no-owner --no-acl -Fc /tmp/prod_dump.dump

# 4. Migracije
docker compose -f docker-compose.yml -f docker-compose.dev.yml run --rm backend python manage.py migrate