Vodič · Razvoj

Zašto tvoj localhost ne ponaša se kao produkcija — i što s tim

Razlike između lokalnog i produkcijskog okruženja nisu slučajne — one su sustavne, predvidljive i rješive.

Podijeljeni ekran terminala koji prikazuje localhost i produkcijski server

Svaki programer koji je ikad rekao „ali kod mene radi” susreo se s ovim problemom. Lokalno razvojno okruženje i produkcijski server dijele isti kod, ali gotovo sve ostalo razlikuje se dovoljno da stvori bug koji je na lokal nevidljiv. Varijable okoline su prvi krivac: na lokal ih često postavljamo ručno u .env datoteci, na produkciji dolaze iz CI/CD pipeline-a ili secret managera, i sitna tipfela ili zaboravljena vrijednost može promijeniti ponašanje čitave aplikacije. Drugo problematično područje su verzije dependencies-a — package-lock.json ili Gemfile.lock trebali bi eliminirati ovaj problem, ali u praksi se zna dogoditi da produkcijski Docker image koristi stariju base image verziju nego što misliš. Mrežne konfiguracije su treći čest krivac: localhost radi bez TLS-a, bez rate limitinga, bez CDN-a ispred sebe. Kad dodate sve to na produkciji, neke asinkrone operacije koje su lokalno bile instantne odjednom traju 400ms, što mijenja redoslijed izvršavanja kod loše napisanih Promise lanca. Rješenje nije „testiraj bolje” nego „smanji razliku između okruženja”. Docker Compose s profilima, environment parity checklist prije svakog deploya i staging okruženje koje točno kopira produkciju — to su alati koji stvarno pomažu. Ne treba svaki projekt sve troje, ali svaki projekt treba barem jedno.