نصب Python روی سرور مجازی برای چه پروژههایی است؟
Python روی VPS برای API، اسکریپتهای Automation، Bot، Worker، Data Processing، FastAPI، Django و ابزارهای مدیریتی استفاده میشود. بهتر است پروژه را داخل Virtual Environment جدا اجرا کنید.
وقتی از Virtual Environment استفاده میکنید، هر پروژه Dependencyهای خودش را دارد و نصب یک کتابخانه در یک پروژه، پروژههای دیگر یا Python سیستم را خراب نمیکند. این یعنی میتوانید همزمان روی یک سرور، یک پروژه FastAPI با نسخه ۲.۰ یک کتابخانه و یک پروژه دیگر با نسخه ۳.۰ همان کتابخانه را اجرا کنید، بدون هیچ تداخلی [citation:3][citation:18].
بررسی نسخه فعلی
قبل از هر کاری، ببینید چه نسخهای از Python روی سرور نصب است:
python3 --version which python3
دستور اول نسخه را نشان میدهد و دستور دوم مسیر فایل اجرایی را. روی Ubuntu 24.04، Python 3.12 بهصورت پیشفرض نصب است. روی Ubuntu 22.04 نسخه 3.10 و روی Ubuntu 20.04 نسخه 3.8 [citation:14].
نصب Python روی Ubuntu و Debian
روی Ubuntu، سادهترین راه استفاده از مخزن رسمی است:
sudo apt update sudo apt install python3 python3-venv python3-pip
اگر به نسخه جدیدتری نیاز دارید (مثلاً Python 3.12 روی Ubuntu 22.04)، میتوانید از مخزن deadsnakes استفاده کنید:
sudo apt install software-properties-common -y sudo add-apt-repository ppa:deadsnakes/ppa -y sudo apt update sudo apt install python3.12 python3.12-venv
نکته مهم: هرگز Python سیستم را حذف یا جایگزین نکنید، چون ابزارهای سیستمی مثل apt و dpkg به آن وابسته هستند [citation:6][citation:14].
نصب Python روی Rocky Linux
روی Rocky Linux، از dnf برای نصب Python استفاده کنید:
sudo dnf update sudo dnf install python3 python3-pip
Rocky Linux بهخاطر تمرکز روی پایداری، ممکن است نسخه Python موجود در مخزن رسمی، جدیدترین نسخه نباشد اما پایدارترین نسخه است [citation:10].
ساخت Virtual Environment
حالا وقت آن است که یک محیط مجازی برای پروژهتان بسازید. این کار باعث میشود Dependencyهای پروژه از Python سیستم جدا بمانند:
mkdir -p ~/apps/myapp cd ~/apps/myapp python3 -m venv .venv source .venv/bin/activate python -m pip install --upgrade pip
دستور python3 -m venv .venv یک پوشه مخفی به نام .venv میسازد که شامل یک نسخه مستقل از Python و pip است. دستور source .venv/bin/activate محیط را فعال میکند و از این به بعد هر دستور pip داخل این محیط اجرا میشود [citation:3][citation:11].
برای غیرفعال کردن محیط:
deactivate
نصب Packageها
بعد از فعال بودن محیط مجازی، میتوانید Packageهای مورد نیاز پروژه را نصب کنید:
pip install fastapi uvicorn pip freeze > requirements.txt
دستور pip freeze لیست همه Packageهای نصبشده همراه با نسخه دقیق را در فایل requirements.txt ذخیره میکند. این فایل را در Git قرار دهید تا در سرور دیگر یا برای همتیمیها قابل بازتولید باشد [citation:3].
برای نصب مجدد در سرور دیگر:
pip install -r requirements.txt
چرا sudo pip install توصیه نمیشود؟
Package Manager سیستم (apt یا dnf) و pip ممکن است فایلهای متفاوتی را مدیریت کنند. وقتی با sudo pip نصب میکنید، فایلها در مسیرهای سیستمی قرار میگیرند و ممکن است با Packageهای سیستم تداخل کنند یا Dependencyهای سیستمی را خراب کنند [citation:2].
بهعنوان یک قاعده ساده: هر چیزی که مربوط به پروژه است، در venv نصب کنید. هر چیزی که یک ابزار سیستمی است (مثل git، nginx، curl)، با Package Manager سیستم نصب کنید.
اجرای دائمی پروژه با systemd
برای Production، برنامه را نباید دستی با python app.py اجرا کنید. باید یک سرویس systemd بسازید تا برنامه بهصورت خودکار اجرا شود، در صورت Crash دوباره بالا بیاید و با بوت سیستم شروع شود [citation:4][citation:19].
یک فایل سرویس بسازید:
sudo nano /etc/systemd/system/myapp.service
محتویات فایل را به این صورت بنویسید:
[Unit] Description=My Python Application After=network.target
[Service]
User=ubuntu
WorkingDirectory=/home/ubuntu/apps/myapp
Environment="PATH=/home/ubuntu/apps/myapp/.venv/bin"
ExecStart=/home/ubuntu/apps/myapp/.venv/bin/python /home/ubuntu/apps/myapp/main.py
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
نکات کلیدی در این فایل:
- WorkingDirectory: مسیر پروژه را مشخص میکند تا برنامه بتواند فایلهای نسبی را پیدا کند.
- Environment: مسیر venv را به PATH اضافه میکند تا Python و pip درست کار کنند.
- ExecStart: مسیر کامل Python داخل venv را مشخص میکند، نه Python سیستم.
- Restart=always: اگر برنامه به هر دلیلی Crash کرد، systemd بعد از ۱۰ ثانیه دوباره آن را اجرا میکند [citation:4][citation:12].
بعد از ساخت فایل، سرویس را فعال کنید:
sudo systemctl daemon-reload sudo systemctl enable myapp sudo systemctl start myapp sudo systemctl status myapp
برای دیدن لاگهای برنامه:
journalctl -u myapp -f
اجرای اپلیکیشن Web با Gunicorn و Nginx
اگر پروژه شما یک اپلیکیشن Web (مثل FastAPI، Flask یا Django) است، بهتر است از یک Application Server مثل Gunicorn یا Uvicorn استفاده کنید و Nginx را بهعنوان Reverse Proxy جلوی آن قرار دهید [citation:5][citation:8].
نصب Gunicorn در venv:
pip install gunicorn
برای FastAPI از Uvicorn Worker استفاده کنید:
gunicorn -k uvicorn.workers.UvicornWorker app.main:app --bind 127.0.0.1:8000 --workers 3
تعداد Workerها معمولاً (2 * CPU cores) + 1 توصیه میشود. برای یک سرور ۱ هستهای، ۳ Worker مناسب است [citation:13].
سپس Nginx را طوری تنظیم کنید که درخواستها را به Gunicorn بفرستد:
server { listen 80; server_name example.com;
location / {
proxy_pass http://127.0.0.1:8000;
proxy_set_header Host host;proxysetheaderX−Real−IPhost;proxysetheaderX−Real−IPremote_addr;
proxy_set_header X-Forwarded-For
scheme;
}
}
این هدرها باعث میشوند اپلیکیشن شما IP واقعی کاربر را ببیند، نه IP لوکال Nginx [citation:5][citation:8].
مدیریت نسخهها با pyenv
اگر روی یک سرور چند پروژه با نسخههای مختلف Python دارید، pyenv بهترین ابزار برای مدیریت همزمان چند نسخه است. pyenv به شما اجازه میدهد بدون دست زدن به Python سیستم، هر پروژه را با نسخه دلخواهش اجرا کنید [citation:6][citation:7].
نصب pyenv:
curl https://pyenv.run | bash
سپس این خطوط را به ~/.bashrc اضافه کنید:
export PYENV_ROOT="$HOME/.pyenv" export PATH="$PYENV_ROOT/bin:$PATH" eval "$(pyenv init -)"
بعد از reload کردن shell، میتوانید نسخههای مختلف Python را نصب کنید:
pyenv install 3.12.1 pyenv install 3.11.7 pyenv global 3.12.1
برای تنظیم نسخه محلی یک پروژه خاص:
cd ~/apps/myapp pyenv local 3.11.7
مدیریت Dependencyها با pip-tools یا Poetry
برای پروژههای جدیتر، ابزارهای پیشرفتهتری مثل pip-tools یا Poetry وجود دارند که مدیریت Dependency را سادهتر و قابلبازتولیدتر میکنند. تفاوت اصلی این ابزارها با pip freeze ساده این است که در فایل requirements.in فقط Packageهای اصلی را مینویسید و ابزار خودش Dependencyهای فرعی را با نسخههای سازگار حل میکند.
برای Poetry:
pip install poetry poetry init poetry add fastapi uvicorn poetry install
اشتباهات رایج
- اجرای دستی با python app.py روی Production: اگر SSH قطع شود یا برنامه Crash کند، سرویس از کار میافتد. از systemd استفاده کنید [citation:15].
- نصب Package با sudo pip: Dependencyهای سیستمی را خراب میکند. همیشه از venv استفاده کنید [citation:2].
- فراموش کردن فعالسازی venv: اگر venv را فعال نکنید، pip Packageها را در Python سیستم نصب میکند.
- نداشتن requirements.txt: اگر سرور را عوض کنید یا از دست بدهید، نمیتوانید دقیقاً همان محیط را بازسازی کنید.
- اجرای برنامه با کاربر root: برای امنیت، یک کاربر غیر root (مثل
ubuntuیا یک کاربر اختصاصی) بسازید و برنامه را با آن اجرا کنید [citation:12].
سؤالات متداول
برای پروژه Python روی VPS به venv نیاز داریم؟
برای بیشتر پروژهها بله؛ venv Dependencyهای پروژه را از Python سیستم جدا میکند و از تداخل بین پروژهها جلوگیری میکند [citation:3][citation:18].
چطور نسخه Python را ببینیم؟
با python3 --version.
آیا sudo pip install توصیه میشود؟
برای پروژههای معمول نه؛ بهتر است از Virtual Environment استفاده شود. نصب Package با sudo pip میتواند Dependencyهای سیستمی را خراب کند [citation:2].
روی Rocky Linux چطور Python نصب کنیم؟
با sudo dnf install python3 python3-pip [citation:10].
برای اجرای دائمی برنامه چه کنیم؟
از systemd یا Application Server مناسب (مثل Gunicorn/Uvicorn) و در صورت نیاز Nginx Reverse Proxy استفاده کنید [citation:4][citation:5][citation:19].
تفاوت pyenv و venv چیست؟
pyenv برای مدیریت چند نسخه Python روی یک سیستم است، اما venv برای جدا کردن Dependencyهای یک پروژه از بقیه. این دو مکمل هم هستند و میتوانید همزمان از هر دو استفاده کنید [citation:6][citation:7].
چطور یک سرویس systemd برای Python بسازم؟
یک فایل در /etc/systemd/system/myapp.service بسازید و در آن WorkingDirectory، ExecStart با مسیر Python داخل venv و Restart را تنظیم کنید [citation:4][citation:12].
منابع و مستندات
محیط دائمی برای Python میخواهی؟
برای API، Bot، Worker و پروژههای Python میتوانی از VPS لینوکسی با دسترسی کامل استفاده کنی.
تماس با پشتیبانی ایرانیکاسرور: 021-91302467






دیدگاهها (۰)