مجله ایرانیکاسرورآموزش سرور، هاست، وردپرس و شبکه
سرور مجازی

نصب پایتون روی سرور مجازی؛ Python، pip و venv

نصب Python روی سرور مجازی برای چه پروژه‌هایی است؟ Python روی VPS برای API، اسکریپت‌های Automation، Bot، Worker، Data Processing، FastAPI، Django و ابزارهای مدیریتی استفاده می‌شود. بهتر است پروژه را داخل Virtual Environment…

نصب پایتون روی سرور مجازی؛ Python، pip و venv
خلاصه سریع این آموزش

نصب Python روی سرور مجازی برای چه پروژه‌هایی است؟ Python روی VPS برای API، اسکریپت‌های Automation، Bot، Worker، Data Processing، FastAPI، Django و ابزارهای مدیریتی استفاده می‌شود. بهتر است پروژه…

۷ دقیقه مطالعه ۰ دیدگاه ۲۱ مهر ۱۴۰۵ آخرین به‌روزرسانی

نصب 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;proxys​eth​eaderX−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 [citation:11].
راهنمای رسمی pip و venv [citation:3].
راهنمای Python در Ubuntu [citation:8].
راهنمای کامل استقرار FastAPI با Gunicorn، Nginx و systemd [citation:5].
راهنمای ساخت سرویس systemd برای اپلیکیشن Python [citation:4].

محیط دائمی برای Python می‌خواهی؟

برای API، Bot، Worker و پروژه‌های Python می‌توانی از VPS لینوکسی با دسترسی کامل استفاده کنی.

تماس با پشتیبانی ایرانیکاسرور: 021-91302467

اشتراک‌گذاری مقاله
گفت‌وگو درباره آموزش

دیدگاه‌ها (۰)

هنوز دیدگاهی ثبت نشده است.

دیدگاه یا سؤال خود را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *