Găzduire Django: cerințe și opțiuni pentru producție

Actualizat / verificat: · Autor: Redacția Python Hosting România

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.

django-hosting

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țe Django: VPS românesc vs PaaS (verificat la 12.10.2026)
CerințăFurnizor A: ROMARG VPS (Brașov)Furnizor B: Render (Frankfurt)Cum testezi
Versiune PythonOricare, instalată de tine3.7.3+; implicit 3.14.3python3 --version sau log-ul de build
Server WSGI/ASGIGunicorn/Uvicorn + systemd + NginxComandă de start în serviciucurl -I https://domeniu, cod 200
PostgreSQLLocal; backup făcut de tineGestionat, de la 6 $/lunămanage.py dbshell, apoi SELECT 1;
Statice și mediaServite de Nginx din discWhiteNoise; media pe stocare externăcollectstatic, apoi deschide un CSS
Celery / cronServicii systemd, fără cost extraWorker și cron facturate separatTrimite o sarcină de test, urmărește log-ul
Cost de pornireDe la 5 €/lună + TVA 21%7 $ + 6 $ pe lună + TVASimulează 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.

database-and-static-files

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:

  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. Migrații uitate. Dacă migrate nu face parte din deploy, codul nou poate ajunge înaintea schemei. Include migrațiile în pasul de release și testează-le pe o copie.
  6. 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:

migration-plan
  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. Configurează baza. Creează baza PostgreSQL și un utilizator cu drepturi minime. Dacă vii de pe SQLite, mută datele cu dumpdata și loaddata sau cu un instrument dedicat.
  6. Copiază media. Transferă fișierele încărcate cu rsync sau urcă-le în stocarea S3. Verifică apoi drepturile pe fișiere și URL-urile media generate în șabloane.
  7. 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.
  8. Activează HTTPS. Obține certificatul Let's Encrypt cu Certbot sau lasă platforma să-l emită. Setează SECURE_PROXY_SSL_HEADER dacă proxy-ul trimite antetul X-Forwarded-Proto.
  9. 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.
  10. 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 VPS

Exemplu: 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 Render

FAQ

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.