Skip to content
VDS · వెబ్‌సైట్‌లు మరియు వెబ్ సర్వర్‌లు

Python అప్లికేషన్: gunicorn మరియు systemd

VDSపై Django, Flask లేదా FastAPIని నడపడం: వర్చువల్ ఎన్విరాన్మెంట్, సాకెట్తో gunicorn, systemd సేవ, మీ టియర్ కోసం వర్కర్ల సంఖ్యను ఎంచుకోవడం.

23 ఆగస్టు, 2026న నవీకరించబడింది

సాధారణ డెవలప్‌మెంట్ సర్వర్ (manage.py runserver, flask run) ప్రొడక్షన్ లోడ్ కోసం రూపొందించబడలేదు. VPS పై మీరు gunicorn లేదా uvicorn ఇన్‌స్టాల్ చేస్తారు, మరియు ఒక వెబ్ సర్వర్ వాటిని బయటకు అందిస్తుంది.

ఎన్విరాన్‌మెంట్

ప్రాజెక్ట్ ప్యాకేజీలను ఎప్పుడూ సిస్టమ్ Python లో ఇన్‌స్టాల్ చేయకండి — సిస్టమ్ అప్‌డేట్ అప్లికేషన్‌ను పాడు చేస్తుంది.

apt install -y python3 python3-venv python3-pip
useradd -r -m -d /srv/app -s /usr/sbin/nologin appuser

sudo -u appuser python3 -m venv /srv/app/venv
sudo -u appuser /srv/app/venv/bin/pip install -r /srv/app/requirements.txt
sudo -u appuser /srv/app/venv/bin/pip install gunicorn

FastAPI కోసం, అదనంగా uvicorn[standard] ఇన్‌స్టాల్ చేయండి — gunicorn దానిని వర్కర్ క్లాస్‌గా నడుపుతుంది.

సర్వీస్

/etc/systemd/system/myapp.service:

[Unit]
Description=Python app
After=network-online.target postgresql.service

[Service]
User=appuser
WorkingDirectory=/srv/app
EnvironmentFile=/srv/app/.env
ExecStart=/srv/app/venv/bin/gunicorn \
  --workers 3 \
  --bind unix:/run/myapp/gunicorn.sock \
  --access-logfile - \
  myproject.wsgi:application
RuntimeDirectory=myapp
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target

FastAPI కోసం, లాంచ్ లైన్‌ను --worker-class uvicorn.workers.UvicornWorker app.main:app తో భర్తీ చేయండి.

systemctl daemon-reload
systemctl enable --now myapp
journalctl -u myapp -f

RuntimeDirectory=myapp ప్రతి స్టార్ట్‌లో అవసరమైన అనుమతులతో /run/myapp ను సృష్టిస్తుంది — లేకపోతే సాకెట్ ఉంచడానికి చోటు ఉండదు.

ఎన్ని వర్కర్లు

సాధారణ ఫార్ములా 2 × cores + 1, కానీ అది మెమొరీ పరిమితులను తాకుతుంది: ప్రతి Django వర్కర్ 80–200 MB వాడుతుంది.

టియర్కోర్లువర్కర్లు
VDS-112
VDS-223
VDS-345
VDS-469

అప్లికేషన్ నెట్‌వర్క్ మరియు డేటాబేస్ కోసం ఎక్కువ సమయం వేచి ఉంటే, ప్రాసెస్‌ల సంఖ్యను పెంచడానికి బదులుగా --threads 2 జోడించండి.

వెబ్ సర్వర్

location / {
    proxy_pass http://unix:/run/myapp/gunicorn.sock;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
}

location /static/ { alias /srv/app/static/; }

Django స్టాటిక్ ఫైల్‌లను వాటిని సేకరించిన తర్వాత నేరుగా Nginx తో అందించండి: collectstatic. వాటిని Python ద్వారా పంపడం అనవసరమైన లోడ్‌ను జోడిస్తుంది.

సాధారణ ఎర్రర్లు

లక్షణంకారణం
502 మరియు connect() to unix:... failed (13)Nginx కు సాకెట్ కోసం అనుమతులు లేవు — --umask 007 మరియు షేర్డ్ గ్రూప్ సెట్ చేయండి
ModuleNotFoundErrorvenv నుండి కాకుండా సిస్టమ్ Python తో నడుపుతున్నారు
Django లో DisallowedHostడొమైన్ ALLOWED_HOSTS కు జోడించబడలేదు
వర్కర్లు టైమౌట్ ద్వారా చంపబడుతున్నాయిపొడవైన రిక్వెస్ట్ — --timeout పెంచండి, బరువైన పనిని క్యూకు తరలించండి
రిలీజ్ తర్వాత అంతా ఆగిపోయిందిమీరు systemctl restart myapp మర్చిపోయారు — మెమొరీలోని కోడ్ తనంతట తాను అప్‌డేట్ అవ్వదు

సీక్రెట్‌లను 600 అనుమతులతో EnvironmentFile లో ఉంచండి, settings.py లో కాదు. సెట్టింగ్స్ ఫైల్ త్వరగా లేదా ఆలస్యంగా రిపాజిటరీలో చేరుతుంది.