Sari la conținut
← Deploy pentru aplicații web
Progres curs 0 / 6 lecții (0%)

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

Ț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 →

Folosim cookie-uri esențiale pentru funcționarea site-ului și, cu acordul tău, cookie-uri de analiză și publicitate. Partenerii noștri, inclusiv Google, pot folosi cookie-uri pentru a afișa reclame relevante. Detalii în Politica de cookie-uri.