آموزش اجرای پروژه پایتون روی سرور مجازی لینوکس
از نصب پایتون تا ساخت محیط مجازی و تبدیل اسکریپت به یک سرویس سیستمی که بعد از راهاندازی مجدد خودش بالا میآید. همه دستورها روی لینوکس اجرا و بررسی شدهاند.
اجرای یک اسکریپت پایتون روی سرور با python main.py شروع میشود و با بستن ترمینال تمام میشود. برای اینکه سرویس واقعاً بماند، سه قدم لازم است: محیط مجازی، سرویس سیستمی، و لاگ.
فرض این آموزش اوبونتو یا دبیان است و اینکه کاربر غیر root ساختهاید. اگر نساختهاید، اول بعد از خرید سرور مجازی را ببینید.
1. پایتون را بررسی کنید
python3 -V
روی نسخههای جدید اوبونتو، پایتون از قبل نصب است. خروجی چیزی شبیه Python 3.12.3 خواهد بود.
2. بسته venv را نصب کنید
این قدمی است که بیشترین کسان را متوقف میکند. روی اوبونتو و دبیان، پایتون نصب است اما ابزار ساخت محیط مجازی جداگانه بستهبندی شده. اگر این قدم را رد کنید، دستور بعدی با این خطا متوقف میشود:
The virtual environment was not created successfully because ensurepip is not
available. On Debian/Ubuntu systems, you need to install the python3-venv
package using the following command.
پس اول:
sudo apt update
sudo apt install python3-venv python3-pip
3. محیط مجازی بسازید
محیط مجازی، وابستگیهای پروژه شما را از بستههای سیستم جدا نگه میدارد. بدون آن، نصب یک کتابخانه برای یک پروژه میتواند پروژه دیگر یا حتی ابزارهای خود سیستم را از کار بیندازد.
mkdir -p ~/myapp
cd ~/myapp
python3 -m venv .venv
برای فعال کردنش در جلسه فعلی:
source .venv/bin/activate
وقتی فعال باشد، نام محیط در ابتدای خط فرمان نمایش داده میشود.
4. وابستگیها را نصب کنید
pip install -r requirements.txt
اگر فایل requirements.txt ندارید، بستهها را مستقیم نصب کنید و بعد فهرستشان را بسازید:
pip install requests
pip freeze > requirements.txt
5. کد را روی سرور بگذارید
با git، اگر پروژه در یک مخزن است:
git clone https://example.com/user/myapp.git ~/myapp
یا با scp از کامپیوتر خودتان:
scp -r ./myapp deploy@203.0.113.10:~/
6. آن را به یک سرویس سیستمی تبدیل کنید
این چیزی است که اسکریپت را از یک برنامه در حال اجرا به یک سرویس تبدیل میکند: بعد از راهاندازی مجدد سرور خودش بالا میآید و اگر خطا داد، دوباره اجرا میشود.
فایل /etc/systemd/system/myapp.service را بسازید:
[Unit]
Description=My Python service
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=deploy
WorkingDirectory=/home/deploy/myapp
ExecStart=/home/deploy/myapp/.venv/bin/python /home/deploy/myapp/main.py
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
چند نکته که معمولاً اشتباه نوشته میشوند:
- مسیرها باید کامل باشند. systemd متغیرهای محیط پوسته شما را ندارد.
- مفسر پایتون را از داخل محیط مجازی صدا بزنید — همان
.venv/bin/python. با این کار نیازی به فعال کردن محیط نیست. - نام کاربر را بنویسید. بدون
User، سرویس با دسترسی root اجرا میشود.
حالا سرویس را فعال و اجرا کنید:
sudo systemctl daemon-reload
sudo systemctl enable myapp
sudo systemctl start myapp
و وضعیتش را ببینید:
systemctl status myapp
7. لاگها
هر چیزی که برنامه چاپ کند در ژورنال سیستم ثبت میشود:
journalctl -u myapp -f
گزینه -f یعنی همانطور که خطوط جدید میآیند نمایش بده. برای دیدن خطاهای اخیر:
journalctl -u myapp -p err -n 50
8. بعد از هر بهروزرسانی کد
cd ~/myapp
git pull
.venv/bin/pip install -r requirements.txt
sudo systemctl restart myapp
چند نکته عملی
- حافظه را نگاه کنید. با
free -hببینید چقدر باقی مانده. سرویس پایتونی که حافظهاش تمام شود، معمولاً بدون پیام روشنی کشته میشود. - کلیدها و رمزها را در کد ننویسید. از متغیر محیطی استفاده کنید؛ systemd با
Environment=یاEnvironmentFile=پشتیبانی میکند. - اگر برنامه وب است، آن را مستقیم روی پورت 80 اجرا نکنید. روی یک پورت محلی اجرا کنید و یک وبسرور جلویش بگذارید.
مشخصات پلنهای در دسترس را در خرید سرور مجازی میبینید. اگر سرویس شما سبک است و مطمئن نیستید کدام اندازه کافی است، سرور مجازی با رم 1 یا 2 گیگابایت را ببینید.