- 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>
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
scpdostupan u PowerShell / terminalu- Lokalni
.envsDEBUG=Truei drugačijimSECRET_KEYod 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 zapg_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_USERiTVOJA_BAZAs vrijednostima iz lokalnog.envfajla:
POSTGRES_USERiPOSTGRES_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