# 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: ```bash 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: ```bash 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_*'**: ```bash 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 ``` --- ## Korak 2 — Kopiraj dump na lokalni PC 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: ```powershell 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): ```powershell ssh tvoj_user@IP_SERVERA "rm /tmp/prod_dump.dump" ``` --- ## Korak 3 — Pokreni lokalnu bazu ```powershell 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`: ```powershell docker ps --filter "name=004erpdb" ``` --- ## Korak 4 — Restoriraj dump u lokalnu bazu ```powershell # 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 pg_restore ` -U TVOJ_USER ` -d TVOJA_BAZA ` --no-owner ` --no-acl ` -Fc ` /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: ```powershell 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: ```powershell docker compose -f docker-compose.yml -f docker-compose.dev.yml ` run --rm backend python manage.py createsuperuser ``` Ili resetiraj lozinku postojećem accountu: ```powershell 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 ```powershell 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): ```bash # 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: ```powershell # 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) ```bash # 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 ```