Găzduire Django: cerințe și opțiuni pentru producție
Găzduire Django înseamnă mai mult decât un server pe care rulează runserver. În producție, Django are nevoie de o versiune de Python compatibilă, de o bază de date serioasă, de un loc pentru fișierele statice și media, de un server WSGI sau ASGI supravegheat și adesea de worker-e pentru sarcini de fundal. Explicăm fiecare cerință, comparăm un VPS românesc cu un PaaS din Frankfurt și propunem un plan de migrare în zece pași, verificat pe documentația oficială la 12.10.2026.
Pe scurt: ai nevoie de Python 3.10+ (pentru Django 5.2 LTS), PostgreSQL, Gunicorn sau Uvicorn în spatele unui proxy cu HTTPS și o soluție pentru statice. Un VPS cu 2–4 GB RAM acoperă un proiect mic complet; un PaaS ca Render elimină administrarea, dar facturează separat web-ul, baza și worker-ele.
Cerințe pentru Django
Django 5.2 este versiunea LTS curentă, cu suport de securitate până în aprilie 2028, și rulează pe Python 3.10–3.14. Django 6.0 cere Python 3.12+. Ubuntu 24.04 vine cu Python 3.12, Debian 12 cu 3.11, iar pe PaaS fixezi versiunea cu .python-version.
Un proiect mic cu 2–3 procese Gunicorn, PostgreSQL și Redis pe aceeași mașină merge confortabil de la 2 GB RAM. Mai ai nevoie de secrete în variabile de mediu, DEBUG = False, ALLOWED_HOSTS corect și HTTPS; comanda manage.py check --deploy semnalează setările nesigure. Pentru alegerea modelului, vezi ghidul general de python hosting în România.
| Cerință | Furnizor A: ROMARG VPS (Brașov) | Furnizor B: Render (Frankfurt) | Cum testezi |
|---|---|---|---|
| Versiune Python | Oricare, instalată de tine | 3.7.3+; implicit 3.14.3 | python3 --version sau log-ul de build |
| Server WSGI/ASGI | Gunicorn/Uvicorn + systemd + Nginx | Comandă de start în serviciu | curl -I https://domeniu, cod 200 |
| PostgreSQL | Local; backup făcut de tine | Gestionat, de la 6 $/lună | manage.py dbshell, apoi SELECT 1; |
| Statice și media | Servite de Nginx din disc | WhiteNoise; media pe stocare externă | collectstatic, apoi deschide un CSS |
| Celery / cron | Servicii systemd, fără cost extra | Worker și cron facturate separat | Trimite o sarcină de test, urmărește log-ul |
| Cost de pornire | De la 5 €/lună + TVA 21% | 7 $ + 6 $ pe lună + TVA | Simulează factura pe 12 luni |
Bază de date și fișiere statice
SQLite e bun pentru dezvoltare, dar în producție blocările la scriere apar repede. PostgreSQL este alegerea implicită pentru Django: câmpuri JSON, căutare full-text, migrații tranzacționale. Pe VPS îl instalezi cu un utilizator separat pentru aplicație; pe PaaS primești un șir de conexiune în variabilele de mediu.

Staticele se adună cu collectstatic în STATIC_ROOT și, pe VPS, le servește Nginx. Pe PaaS, unde discul e efemer, folosești WhiteNoise pentru statice și o stocare compatibilă S3 pentru media.
WSGI/ASGI și procese background
Pentru pagini randate pe server, WSGI cu Gunicorn rămâne alegerea simplă. ASGI devine necesar pentru Channels, WebSocket-uri sau vizualizări async. Exemplu de unitate systemd (căile sunt exemple):
[Unit]
Description=Gunicorn pentru proiectul Django
After=network.target
[Service]
User=app
Group=www-data
WorkingDirectory=/srv/app
EnvironmentFile=/srv/app/.env
ExecStart=/srv/app/venv/bin/gunicorn proiect.wsgi:application --workers 3 --bind 127.0.0.1:8000
Restart=on-failure
[Install]
WantedBy=multi-user.target
Pentru ASGI, comanda devine uvicorn proiect.asgi:application --host 127.0.0.1 --port 8000 --workers 2, iar Nginx primește antetele Upgrade și Connection. Sarcinile lungi merg în Celery sau RQ, cu Redis și un worker separat. Șase greșeli frecvente:
- DEBUG lăsat activ. Cu
DEBUG = True, orice eroare afișează setări, căi și interogări SQL. Setează-l prin variabilă de mediu și ruleazăcheck --deployînainte de lansare. - SECRET_KEY în Git. O cheie urcată pe GitHub trebuie considerată compromisă. Citește-o din mediu, generează una nouă pentru producție și nu o refolosi între medii.
- runserver în producție. Serverul de dezvoltare nu e gândit pentru trafic real. Folosește Gunicorn sau Uvicorn, supravegheat de systemd ori de platformă, în spatele unui proxy HTTPS.
- Media pe disc efemer. Pe PaaS, fișierele încărcate dispar la redeploy. Mută media pe stocare compatibilă S3 sau pe un disc persistent declarat explicit în serviciu.
- Migrații uitate. Dacă
migratenu face parte din deploy, codul nou poate ajunge înaintea schemei. Include migrațiile în pasul de release și testează-le pe o copie. - Backup netestat. Un dump zilnic niciodată restaurat nu e o garanție. Programează
pg_dump, păstrează copii în altă locație și încearcă o restaurare completă cel puțin trimestrial.
Plan de migrare
Mutarea pe o găzduire de producție merge bine în această ordine:

- Inventariază dependențele. Notează versiunile de Python și Django, pachetele din
requirements.txt, extensiile PostgreSQL și serviciile externe. Fixează versiunile exacte, ca mediul să fie reproductibil. - Alege ținta. Decide între VPS și PaaS după tabelul de mai sus, buget și timp de administrare; costul pe un an e calculat în analiza hosting Python România VPS vs PaaS.
- Pregătește setările. Mută secretele în variabile de mediu și setează
DEBUG = False,ALLOWED_HOSTS,CSRF_TRUSTED_ORIGINSși cookie-urile securizate pentru HTTPS. Păstrează setările de dezvoltare într-un fișier separat. - Creează mediul. Instalează Python, mediul virtual și dependențele, apoi rulează comanda
check --deploy. Pe PaaS, configurează comenzile de build și de start ale serviciului web. - Configurează baza. Creează baza PostgreSQL și un utilizator cu drepturi minime. Dacă vii de pe SQLite, mută datele cu
dumpdatașiloaddatasau cu un instrument dedicat. - Copiază media. Transferă fișierele încărcate cu
rsyncsau urcă-le în stocarea S3. Verifică apoi drepturile pe fișiere și URL-urile media generate în șabloane. - Pornește aplicația. Configurează Gunicorn sau Uvicorn cu systemd și Nginx ca proxy și pentru statice. Testează pe IP-ul serverului sau pe un subdomeniu temporar.
- Activează HTTPS. Obține certificatul Let's Encrypt cu Certbot sau lasă platforma să-l emită. Setează
SECURE_PROXY_SSL_HEADERdacă proxy-ul trimite antetulX-Forwarded-Proto. - Mută domeniul. Scade TTL-ul DNS cu o zi înainte, sincronizează ultima dată baza, oprește scrierile pe serverul vechi și actualizează înregistrările DNS de tip A sau CNAME.
- Monitorizează. Urmărește log-urile, erorile 500, memoria și durata interogărilor. Păstrează serverul vechi câteva zile ca variantă de revenire, apoi șterge-l în siguranță, cu tot cu copiile de date.
Cui i se potrivește și cui nu
Un VPS sau PaaS pentru Django e potrivit dacă
- ai conturi, formulare și PostgreSQL;
- rulezi Celery sau cron;
- vrei control asupra versiunilor;
- ai utilizatori români și date în UE.
Nu e potrivit dacă
- ai doar un site static;
- nimeni nu face actualizări pe VPS;
- bugetul nu acoperă o bază gestionată;
- vrei un CMS fără programare.
Decizie rapidă pentru Django
- A MVP fără administrator → PaaS (Render) cu PostgreSQL gestionat.
- B Trafic constant, Celery și experiență Linux → VPS cu 2–4 GB RAM.
- C Date care trebuie să stea în România → VPS local, de exemplu ROMARG în Brașov.
Compară planurile VPS din Brașov și calculează costul cu TVA 21%.
Verifică prețurile ROMARG VPSExemplu: dimensionarea unui VPS pentru Django
Ipoteză: portal intern, 50 de utilizatori simultan. Regula de pornire Gunicorn este (2 × nuclee CPU) + 1: pe 2 vCPU rezultă 5 worker-e. La circa 120 MB per proces (ipoteză; măsoară cu htop), înseamnă 600 MB, plus PostgreSQL (300–500 MB), Redis și sistemul. Concluzie: 4 GB RAM lasă rezervă; pe 2 GB folosește 3 worker-e.
Rezumat
O găzduire Django bună combină Python 3.10+, PostgreSQL, un server WSGI sau ASGI supravegheat, statice servite eficient și backup testat. VPS-ul e mai ieftin, PaaS-ul mai rapid de pornit. Pentru proiecte fără ORM și admin, vezi ghidul de găzduire Flask pentru aplicații mici.
Preferi un PaaS cu regiune Frankfurt și PostgreSQL gestionat?
Prețuri RenderFAQ
Pot găzdui Django pe un plan cu 512 MB RAM?
Poți rula aplicația cu unul sau doi worker-i Gunicorn, dacă baza de date stă separat. Cu PostgreSQL, Redis și Celery pe aceeași mașină, 512 MB nu ajung. Pentru un proiect complet pe un server, pornește de la 2 GB RAM și măsoară consumul.
Am nevoie de Docker pentru a găzdui Django?
Nu este obligatoriu. Pe un VPS, un mediu virtual cu Gunicorn sub systemd funcționează bine și e ușor de depanat. Docker ajută când vrei medii identice între dezvoltare și producție; pe PaaS, buildpack-ul Python face adesea același lucru fără Dockerfile.
Cum servesc fișierele încărcate de utilizatori pe un PaaS?
Discul instanțelor PaaS este de regulă efemer, deci fișierele locale pot dispărea la deploy. Folosește o stocare compatibilă S3 cu pachetul django-storages sau un disc persistent, dacă platforma îl oferă. Staticele aplicației pot rămâne pe WhiteNoise.
Ce versiune de Django să aleg pentru un proiect nou?
Pentru stabilitate, Django 5.2 LTS primește actualizări de securitate până în aprilie 2028 și rulează pe Python 3.10+. Django 6.0 aduce funcții noi, dar cere Python 3.12 și are suport mai scurt. Verifică și compatibilitatea pachetelor terțe.
Cât de des trebuie să fac backup la baza PostgreSQL?
Pentru aplicații mici, un pg_dump zilnic păstrat 7–14 zile, în altă locație decât serverul, este un minim rezonabil. Dacă pierderea a câteva ore de date ar fi gravă, alege o bază gestionată cu restaurare la un moment dat.
