يتضمن نشر تطبيق FastAPI على خادم خاص افتراضي (VPS) عدة خطوات لضمان تشغيله بكفاءة وأمان وموثوقية. سيرشدك هذا الدليل خلال العملية باستخدام Gunicorn كخادم تطبيقات و Nginx كوكيل عكسي، إلى جانب تأمين تطبيقك باستخدام HTTPS باستخدام Certbot. هذه الإرشادات مخصصة في المقام الأول للأنظمة القائمة على Ubuntu.
المتطلبات الأساسية
قبل أن تبدأ، تأكد من أن لديك: * تطبيق FastAPI جاهز للنشر، بما في ذلك ملف requirements.txt الذي يسرد جميع تبعياته. * VPS يعمل بنظام Ubuntu (أو توزيع آخر قائم على Debian). * وصول SSH إلى VPS الخاص بك. * اسم نطاق مسجل يشير إلى عنوان IP الخاص بـ VPS (اختياري، ولكن يوصى به بشدة لـ HTTPS).
1. اتصل بـ VPS الخاص بك وقم بتحديث النظام
أولاً، اتصل بـ VPS الخاص بك عبر SSH وقم بتحديث قائمة حزم النظام الخاص بك.
ssh your_username@your_vps_ip
sudo apt update && sudo apt upgrade -y
2. تثبيت Python و Pip والبيئة الافتراضية
قم بتثبيت Python 3 و pip (مثبت حزم Python) ووحدة venv لإنشاء بيئات افتراضية.
sudo apt install python3 python3-pip python3-venv -y
3. استنساخ تطبيق FastAPI الخاص بك
انتقل إلى دليل مناسب (على سبيل المثال، /var/www/) واستنسخ تطبيق FastAPI من نظام التحكم في الإصدارات (على سبيل المثال، Git).
sudo mkdir -p /var/www/your_fastapi_app
cd /var/www/your_fastapi_app sudo git clone <your_repository_url> . ملاحظة: استبدل your_fastapi_app وعنوان URL Git بتفاصيل مشروعك.
يوصى بإنشاء مستخدم مخصص غير جذر لتطبيقك لأسباب أمنية.
sudo adduser your_app_user sudo usermod -aG sudo your_app_user
sudo chown -R your_app_user:your_app_user /var/www/your_fastapi_project_name ثم، قم بالتبديل إلى هذا المستخدم الجديد:
su - your_app_user cd /var/www/your_fastapi_project_name 4. إعداد بيئة افتراضية وتثبيت التبعيات
قم بإنشاء بيئة افتراضية Python لمشروعك وقم بتثبيت تبعيات تطبيقك، بما في ذلك FastAPI و Gunicorn و Uvicorn.
python3 -m venv venv
source venv/bin/activate pip install -r requirements.txt
pip install gunicorn "uvicorn[standard]" fastapi إذا لم يكن لديك ملف requirements.txt، يمكنك إنشاء واحد باستخدام pip freeze > requirements.txt في بيئة التطوير المحلية الخاصة بك.
5. اختبار تطبيق FastAPI (محليًا على VPS)
قبل تكوين Gunicorn و Nginx، اختبر ما إذا كان تطبيق FastAPI الخاص بك يعمل بشكل صحيح باستخدام Uvicorn.
uvicorn main:app --host 0.0.0.0 --port 8000
استبدل main:app بالوحدة النمطية الفعلية واسم مثيل تطبيق FastAPI (على سبيل المثال، your_app_folder.main:app). يجب أن تتمكن من الوصول إلى تطبيقك على http://your_vps_ip:8000. اضغط على Ctrl+C لإيقاف الخادم.
6. تكوين Gunicorn
سيعمل Gunicorn كخادم التطبيق، حيث يدير عمال Uvicorn لمعالجة الطلبات.
إنشاء ملف تكوين Gunicorn (اختياري ولكن موصى به)
أنشئ ملفًا باسم gunicorn_conf.py في دليل مشروعك.
nano gunicorn_conf.py أضف المحتوى التالي:
bind = "127.0.0.1:8000"
عمال = 4 # اضبط حسب نوى وحدة المعالجة المركزية (يوصى عادة بـ 2-4 عمال لكل نواة)
worker_class = "uvicorn.workers.UvicornWorker" يمكن ضبط قيمة workers؛ التوصية الشائعة هي (2 * CPU_CORES) + 1.
اختبار Gunicorn
قم بتشغيل Gunicorn مع تطبيق FastAPI للتأكد من أنه يبدأ بشكل صحيح.
gunicorn -c gunicorn_conf.py main:app مرة أخرى، استبدل main:app بنقطة دخول تطبيقك.
7. إنشاء خدمة Systemd لـ Gunicorn
لضمان بدء تشغيل تطبيقك تلقائيًا عند التشغيل وإمكانية إدارته بسهولة، قم بإنشاء خدمة systemd.
sudo nano /etc/systemd/system/your_fastapi_app.service أضف المحتوى التالي، مع استبدال العناصر النائبة بقيمك الفعلية:
[Unit] Description=مثيل Gunicorn لخدمة تطبيق FastAPI الخاص بك
بعد=network.target [الخدمة]
المستخدم=your_app_user المجموعة=your_app_user دليل العمل=/var/www/your_fastapi_project_name
ExecStart=/var/www/your_fastapi_project_name/venv/bin/gunicorn -c /var/www/your_fastapi_project_name/gunicorn_conf.py main:app
Restart=always PrivateTmp=true [تثبيت] WantedBy=multi-user.target شرح الحقول: * User و Group: المستخدم غير الجذر والمجموعة التي أنشأتها لتطبيقك.
* WorkingDirectory: المسار المطلق إلى دليل مشروع FastAPI الخاص بك. * ExecStart: الأمر لبدء Gunicorn، مشيرًا إلى ملف Gunicorn القابل للتنفيذ في بيئتك الافتراضية، وملف التكوين الخاص بك، ونقطة دخول التطبيق الخاص بك.
* Restart=always: يضمن إعادة تشغيل الخدمة في حالة تعطلها.
أعد تحميل systemd، وابدأ الخدمة، وقم بتمكينها للتشغيل عند بدء التشغيل.
sudo systemctl daemon-reload sudo systemctl start your_fastapi_app
sudo systemctl enable your_fastapi_app تحقق من الحالة والسجلات للتأكد من أنه يعمل دون أخطاء.
sudo systemctl status your_fastapi_app
sudo journalctl -u your_fastapi_app -f 8. تكوين Nginx كوكيل عكسي
سيعمل Nginx كوكيل عكسي، حيث يقوم بإعادة توجيه الطلبات إلى تطبيق Gunicorn الخاص بك والتعامل مع الملفات الثابتة و SSL.
تثبيت Nginx
sudo apt install nginx -y إنشاء ملف تكوين Nginx
قم بإنشاء ملف تكوين كتلة خادم Nginx جديد لتطبيقك.
sudo nano /etc/nginx/sites-available/your_domain أضف المحتوى التالي، مع استبدال your_domain.com باسم المجال الفعلي الخاص بك و/var/www/your_fastapi_project_name بمسار مشروعك:
server {
listen 80;
server_name your_domain.com www.your_domain.com;
location / {
proxy_pass http://127.0.0.1:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
} # اختياري: تقديم الملفات الثابتة مباشرة من خلال Nginx
# location /static/ { # alias /var/www/your_fastapi_project_name/static/;
# } } تمكين تكوين Nginx
قم بإنشاء رابط رمزي لتمكين التكوين واختبار Nginx بحثًا عن أخطاء في بناء الجملة.
sudo ln -s /etc/nginx/sites-available/your_domain /etc/nginx/sites-enabled/
sudo nginx -t إذا نجح الاختبار، أعد تشغيل Nginx.
sudo systemctl restart nginx
9. تكوين جدار الحماية (UFW)
إذا كان لديك جدار حماية ممكّن (على سبيل المثال، UFW)، فأنت بحاجة إلى السماح بحركة المرور على المنافذ 80 (HTTP) و 443 (HTTPS).
sudo ufw allow 'Nginx Full'
sudo ufw enable 10. تأمين باستخدام HTTPS باستخدام Certbot (Let's Encrypt)
يوصى بشدة بتأمين تطبيقك باستخدام HTTPS. يقوم Certbot بأتمتة عملية الحصول على شهادات SSL من Let's Encrypt وتكوينها.
تثبيت Certbot
sudo apt install certbot python3-certbot-nginx -y
الحصول على شهادة SSL وتثبيتها
sudo certbot --nginx -d your_domain.com -d www.your_domain.com اتبع التعليمات. سيقوم Certbot تلقائيًا بتعديل تكوين Nginx الخاص بك وإعداد التجديد التلقائي.
11. تحقق من النشر
يجب أن يكون تطبيق FastAPI الخاص بك الآن متاحًا عبر اسم المجال الخاص بك باستخدام HTTPS. افتح متصفح الويب وانتقل إلى https://your_domain.com.
نصائح لحل المشكلات
- تحقق من سجلات Gunicorn:
sudo journalctl -u your_fastapi_app -f - تحقق من سجلات أخطاء Nginx:
sudo tail -f /var/log/nginx/error.log - تحقق من سجلات وصول Nginx:
sudo tail -f /var/log/nginx/access.log - تحقق من تكوين Nginx:
sudo nginx -t - تأكد من صحة أذونات الملفات لمجلد مشروعك والبيئة الافتراضية.
- مشكلات جدار الحماية: تحقق جيدًا من قواعد UFW.
باتباع هذه الخطوات، سيكون لديك تطبيق FastAPI جاهز للإنتاج تم نشره على VPS الخاص بك مع Nginx و Gunicorn و HTTPS.