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-1 | 1 | 2 |
| VDS-2 | 2 | 3 |
| VDS-3 | 4 | 5 |
| VDS-4 | 6 | 9 |
అప్లికేషన్ నెట్వర్క్ మరియు డేటాబేస్ కోసం ఎక్కువ సమయం వేచి ఉంటే, ప్రాసెస్ల సంఖ్యను పెంచడానికి బదులుగా --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 మరియు షేర్డ్ గ్రూప్ సెట్ చేయండి |
ModuleNotFoundError | venv నుండి కాకుండా సిస్టమ్ Python తో నడుపుతున్నారు |
Django లో DisallowedHost | డొమైన్ ALLOWED_HOSTS కు జోడించబడలేదు |
| వర్కర్లు టైమౌట్ ద్వారా చంపబడుతున్నాయి | పొడవైన రిక్వెస్ట్ — --timeout పెంచండి, బరువైన పనిని క్యూకు తరలించండి |
| రిలీజ్ తర్వాత అంతా ఆగిపోయింది | మీరు systemctl restart myapp మర్చిపోయారు — మెమొరీలోని కోడ్ తనంతట తాను అప్డేట్ అవ్వదు |
సీక్రెట్లను
600అనుమతులతోEnvironmentFileలో ఉంచండి,settings.pyలో కాదు. సెట్టింగ్స్ ఫైల్ త్వరగా లేదా ఆలస్యంగా రిపాజిటరీలో చేరుతుంది.