Hosting și deploy
Unde pui un site modern, ce face un CDN, cum ajunge codul în producție, secrete, preview, rollback și costuri.
Actualizat
Ce înseamnă „să pui site-ul online”
Hosting = un loc unde codul tău rulează sau stă, accesibil din internet. Deploy = procesul prin care o versiune nouă a codului ajunge acolo. Azi aproape nimeni nu mai urcă fișiere prin FTP: legi un repository de o platformă, iar fiecare modificare publicată produce automat un deploy.
Tipuri de hosting
| Tip | Ce rulează | Exemple | Potrivit pentru |
|---|---|---|---|
| Static / CDN | doar fișiere gata făcute (HTML, CSS, JS, imagini) | Cloudflare Pages, GitHub Pages, Netlify | landing, portofoliu, documentație |
| Platforme serverless / edge | fișiere statice + funcții pornite la fiecare request | Vercel, Netlify, Cloudflare Workers | aplicații Next.js, API-uri mici |
| VPS | un server virtual întreg, administrat de tine | Hetzner, DigitalOcean | procese care rulează non-stop, control total |
| Containere | aplicația ta împachetată (Docker), pornită de platformă | Fly.io, Railway, Google Cloud Run | backend-uri cu dependențe speciale |
Pe măsură ce cobori în tabel, primești mai mult control și mai multă muncă: la un VPS tu faci update-urile de securitate, backup-urile și repornirile. Serverless nu înseamnă „fără server”, ci că nu te ocupi tu de el: funcția pornește la cerere și se plătește după folosire. Are însă limite de durată, deci nu ține un proces deschis la nesfârșit.
Ce face un CDN
Un CDN e o rețea de servere (edge) în zeci de orașe. Un vizitator din Chișinău primește fișierele de la cel mai apropiat edge, nu de la serverul principal (originea) din America.
- Ține în cache fișierele statice și paginile pre-generate.
- Termină conexiunea HTTPS aproape de user, deci conexiunea pornește mai repede.
- Absoarbe vârfurile de trafic și o parte din atacuri (DDoS).
Vercel, Netlify și Cloudflare au CDN-ul inclus; nu-l configurezi separat.
Build vs runtime
| Build | Runtime | |
|---|---|---|
| Când | o dată, la fiecare deploy | la fiecare request |
| Ce se întâmplă | instalare pachete, compilare, pre-generare de pagini | funcțiile răspund la cereri, citesc din baza de date |
| Dacă pică | deploy-ul eșuează, iar producția rămâne pe versiunea veche | userii văd erori |
Diferența contează la variabilele de mediu: unele sunt citite la build și „înghețate” în cod, altele sunt citite la fiecare request.
Variabile de mediu și secrete
Cheile API și URL-ul bazei de date nu se scriu niciodată în cod și nu intră niciodată în Git. Local stau în .env.local (pus în .gitignore), iar pe platformă le setezi în panou (Vercel → Settings → Environment Variables), separat pentru Production, Preview și Development.
- În Next.js, o variabilă cu prefixul
NEXT_PUBLIC_e copiată în JavaScript-ul trimis browserului, deci oricine o poate citi. Acolo pui doar valori publice (URL-ul site-ului, un ID de analytics). - Valorile
NEXT_PUBLIC_sunt înlocuite la build. Dacă le schimbi în panou, ai nevoie de un deploy nou ca să se vadă. - Ai publicat din greșeală un secret? Ștergerea commit-ului nu e de ajuns: revoci cheia și generezi una nouă.
Detalii în lecția Env, build și deploy.
Fluxul de deploy
git pushpe un branch sau pe mainplatforma primește notificarea→build în CIinstalează pachetele și rulează npm run builddacă e un branch→preview deployURL unic, doar pentru verificaredupă merge în main→producțiedomeniul tău servește noua versiuneCI (continuous integration) e serverul care face build-ul și rulează verificările (teste, lint) la fiecare push. Pe Vercel sau Netlify e inclus; poți adăuga și GitHub Actions. Despre git push și branch-uri afli în topicul Git.
Preview deployments
Fiecare branch sau pull request primește un preview deployment: un URL separat (de tipul proiect-git-feature-echipa.vercel.app) cu exact acea versiune. Colegii, clientul sau designerul o verifică pe un link real, iar producția rămâne neatinsă. Atenție: preview-ul folosește variabilele de mediu de Preview; nu-l lega de baza de date de producție.
Rollback
Fiecare deploy e păstrat ca o versiune separată, care nu se mai schimbă. Dacă producția s-a stricat, nu repari în grabă: faci rollback (pe Vercel, Instant Rollback) la deploy-ul anterior, care pornește în câteva secunde, fără build nou. Apoi cauți bug-ul în liniște. Atenție: rollback-ul întoarce codul, nu și datele. O migrare de bază de date rămâne făcută.
Domeniu propriu și HTTPS
Adaugi domeniul în platformă (Settings → Domains), apoi pui record-urile DNS pe care ți le arată. Pașii compleți, inclusiv varianta cu Cloudflare, sunt în lecția Domenii și DNS. Certificatul HTTPS e emis și reînnoit automat (de obicei prin Let's Encrypt) imediat ce DNS-ul arată spre platformă.
Loguri și monitorizare
- Build logs: de ce a eșuat un deploy (eroare de tipuri, pachet lipsă).
- Runtime logs: erorile funcțiilor din producție, request cu request.
- Uptime monitor (UptimeRobot, Better Stack): îți trimite un email când site-ul cade.
- Error tracking (Sentry): strânge erorile din browserele userilor, cu tot cu contextul lor.
- Analytics și Web Vitals: cât de rapid e site-ul pentru userii reali (vezi Performanță).
Costuri și free tier
Pentru un proiect personal, planurile gratuite ajung de obicei. Fii atent la:
| Ce se numără | De ce crește |
|---|---|
| trafic (bandwidth) | imagini și video mari, boți |
| invocări și durată de funcții | pagini dinamice care puteau fi statice |
| optimizare de imagini | multe imagini și dimensiuni diferite |
| minute de build | multe push-uri, build-uri lente |
- Planul gratuit Vercel (Hobby) e doar pentru uz personal, necomercial.
- Setează limite de cheltuieli și alerte pe planurile plătite; un atac sau un bot poate genera o factură mare.
- Citește ce se întâmplă la depășire: unele platforme opresc site-ul, altele taxează în plus.
Pe scurt
- Static/CDN pentru site-uri simple, platforme serverless pentru Next.js, VPS sau containere când ai nevoie de control.
- Secretele stau în panoul platformei, nu în Git;
NEXT_PUBLIC_ajunge în browser și se fixează la build. - Push → build → preview → producție; când ceva se strică, întâi faci rollback, apoi repari.