Variabile de mediu și secrete
Lectură estimată: 3 minute
Estimare pentru text, la un ritm de 180 de cuvinte pe minut. Timpul pentru analizarea codului, exerciții și proiecte se adaugă separat și depinde de ritmul tău.
Configurarea și secretele — chei API, parole de bază de date, token-uri — stau în variabile de mediu, nu în cod. Fișierul `.env` le ține local; în producție le setezi prin mediul serverului sau un manager de secrete. Nimic din toate acestea nu intră vreodată în Git.
Principiul
Codul e la fel pe toate mediile. Ce diferă (baza de date, cheile, URL-urile, modul debug) vine din mediu. Așa același commit rulează local, pe staging și în producție, doar cu altă configurare.
Reguli de aur
- `.env` în `.gitignore`. Verifică `git status` — nu trebuie să apară.
- `.env.example` comis, cu toate cheile dar cu valori goale sau exemple.
- Secrete diferite pe fiecare mediu — nu refolosi cheia de producție în dev.
- `APP_KEY` generat separat pe fiecare instalare.
În producție
# opțiunea 1: un .env pe server, cu permisiuni stricte
chmod 600 .env
chown deploy:deploy .env
# opțiunea 2: variabile de mediu injectate de platformă
# (Forge, Docker, systemd EnvironmentFile, secret manager)Dacă un secret a fost expus
Dacă ai comis din greșeală o cheie în Git: consider-o compromisă. Rotește-o (generează una nouă la furnizor), actualizeaz-o peste tot, și abia apoi curăță istoria Git. Ștergerea din istorie fără rotire nu ajută — cheia veche e deja publică.
Nu loga secretele
Verifică să nu ajungă chei în log-uri, în mesajele de eroare afișate, sau în rapoartele de excepții trimise la servicii externe. `APP_DEBUG=false` în producție ajută mult.
Un .env.example bun
APP_NAME=Laravel APP_ENV=production APP_KEY= APP_DEBUG=false APP_URL=https://exemplu.ro DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_DATABASE= DB_USERNAME= DB_PASSWORD= MAIL_MAILER=smtp STRIPE_SECRET= # fiecare cheie prezentă, fără valori reale
Exercițiu
Verifică într-un proiect că `.env` e în `.gitignore` și că nu a fost comis vreodată (`git log --all -- .env`). Creează/actualizează `.env.example` să conțină toate cheile din `.env`, cu valori goale. Scrie un mic „checklist de secrete" pentru deploy.
Greșeli frecvente
- Comiți `.env` (verifică istoria, nu doar starea curentă).
- Refolosești aceleași chei în dev și producție.
- Ștergi un secret din istoria Git dar nu-l rotești.
- `APP_DEBUG=true` în producție expune valori de configurare în paginile de eroare.
De reținut
- Configurare din mediu; cod identic pe toate mediile.
- .env ignorat, .env.example comis cu chei goale.
- Secrete distincte per mediu; APP_KEY per instalare.
- Secret expus = secret compromis: rotește-l întâi.
Pe scurt
Secretele trăiesc în mediu, nu în cod. .env local, variabile injectate în producție, .env.example în Git, și rotire imediată dacă ceva scapă.
Secrete diferite între build și rulare
Un secret necesar serverului nu trebuie introdus în bundle-ul browserului. Unele sisteme frontend includ variabilele de build în fișiere publice, de aceea numele și mecanismul trebuie înțelese. Pentru Laravel, configurația cache-uită poate păstra valorile citite la construirea cache-ului. Nu schimba .env și presupune că toate procesele au preluat imediat noua valoare. Păstrează un inventar al variabilelor fără a copia valorile secrete.
Exemplu de lucru
Variabilă;Loc;Publică?
APP_URL;server;valoare publică
DB_PASSWORD;server;nu
Cheie API secretă;server;nu
URL API public;browser;da
Verificări: bundle fără chei; .env inaccesibil web; cache configurație actualizat; workerii folosesc versiunea nouă.Interpretarea rezultatului
Un prefix de variabilă frontend nu este o protecție; adesea indică exact includerea ei în client. Pentru rotirea unui secret, coordonează emiterea, publicarea și revocarea, astfel încât procesele vechi să nu eșueze necontrolat. Nu afișa secretul pentru a demonstra că există.
Exercițiu de consolidare
Descrie o verificare care confirmă configurarea unei chei printr-un rezultat controlat, fără a imprima cheia în log.
Aplicație practică
Sarcina
Separă configurația publică de secrete.
Rezolvare orientativă și verificare
.env.example descrie cheile fără valori reale; mediul de producție are propriile valori și permisiuni.
Greșeală de evitat
Variabilele cu prefix public pot ajunge în bundle-ul browserului.
Documentație și surse
- Documentația Laravel 11 — versiunea aplicației demonstrative — Laravel
- Ubuntu Server documentation — Canonical
Ți-a plăcut lecția? Continuă cursul complet
Ai citit o lecție gratuită. Celelalte lecții, aplicațiile practice și materialele se deblochează odată cu cursul.
149 lei
Plată unică, acces pe viață la toate cele 6 lecții.
Vezi ce conține cursul →