نشر تطبيق Node.js: دليل PM2 و Nginx
دليل شامل لنشر تطبيقات Node.js على VPS. تثبيت Node.js عبر nvm، مدير العمليات PM2، وكيل Nginx العكسي، شهادة SSL وإدارة متغيرات البيئة.
دليل نشر تطبيقات Python/Django على VPS. إعداد virtualenv، إعدادات Django للإنتاج، خادم Gunicorn WSGI، وكيل Nginx العكسي، خدمة systemd وإدارة الملفات الثابتة.
Django هو إطار عمل الويب الأكثر شيوعاً في Python. المزيج المعياري للنشر في الإنتاج هو Gunicorn (خادم WSGI) و Nginx (وكيل عكسي). يرشدك هذا الدليل خلال نشر تطبيق Django على VPS من الصفر.
# تحديث النظام
sudo apt update && sudo apt upgrade -y
# تثبيت Python 3 و pip
sudo apt install python3 python3-pip python3-venv python3-dev -y
# إنشاء مجلد التطبيق
sudo mkdir -p /var/www/mydjango
sudo chown $USER:$USER /var/www/mydjango
cd /var/www/mydjango
# إنشاء البيئة الافتراضية
python3 -m venv venv
# تفعيل البيئة الافتراضية
source venv/bin/activate
# تحديث pip
pip install --upgrade pip
استخدم بيئة افتراضية منفصلة لكل مشروع Django. هذا يمنع تعارض التبعيات ويعزل المشاريع.
cd /var/www
git clone https://github.com/user/mydjango.git
cd mydjango
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
pip install gunicorn
import os
DEBUG = False
SECRET_KEY = os.environ.get('DJANGO_SECRET_KEY')
ALLOWED_HOSTS = os.environ.get('DJANGO_ALLOWED_HOSTS', '').split(',')
# رؤوس الأمان
SECURE_SSL_REDIRECT = True
SECURE_HSTS_SECONDS = 31536000
SESSION_COOKIE_SECURE = True
CSRF_COOKIE_SECURE = True
# الملفات الثابتة
STATIC_URL = '/static/'
STATIC_ROOT = BASE_DIR / 'staticfiles'
MEDIA_URL = '/media/'
MEDIA_ROOT = BASE_DIR / 'media'
sudo apt install postgresql postgresql-contrib -y
sudo -u postgres psql
CREATE DATABASE mydb;
CREATE USER dbuser WITH PASSWORD 'كلمة-مرور-قوية';
ALTER ROLE dbuser SET client_encoding TO 'utf8';
ALTER ROLE dbuser SET default_transaction_isolation TO 'read committed';
ALTER ROLE dbuser SET timezone TO 'UTC';
GRANT ALL PRIVILEGES ON DATABASE mydb TO dbuser;
\q
pip install psycopg2-binary
python manage.py migrate
python manage.py createsuperuser
python manage.py collectstatic --noinput
# gunicorn.conf.py
bind = 'unix:/run/gunicorn/gunicorn.sock'
workers = 3 # (2 * أنوية CPU) + 1
worker_class = 'sync'
timeout = 30
max_requests = 1000
preload_app = True
user = 'www-data'
group = 'www-data'
errorlog = '/var/log/gunicorn/error.log'
accesslog = '/var/log/gunicorn/access.log'
[Unit]
Description=Gunicorn daemon for Django
After=network.target
[Service]
User=www-data
Group=www-data
WorkingDirectory=/var/www/mydjango
ExecStart=/var/www/mydjango/venv/bin/gunicorn \
--config /var/www/mydjango/gunicorn.conf.py \
myproject.wsgi:application
KillMode=mixed
TimeoutStopSec=5
PrivateTmp=true
EnvironmentFile=/var/www/mydjango/.env
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl start gunicorn
sudo systemctl enable gunicorn
server {
listen 80;
server_name example.com www.example.com;
location /static/ {
alias /var/www/mydjango/staticfiles/;
expires 30d;
add_header Cache-Control "public, immutable";
}
location /media/ {
alias /var/www/mydjango/media/;
}
location / {
include proxy_params;
proxy_pass http://unix:/run/gunicorn/gunicorn.sock;
proxy_read_timeout 300;
}
client_max_body_size 100M;
}
sudo ln -s /etc/nginx/sites-available/mydjango /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx
sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d example.com -d www.example.com
cd /var/www/mydjango
source venv/bin/activate
git pull origin main
pip install -r requirements.txt
python manage.py migrate
python manage.py collectstatic --noinput
sudo systemctl restart gunicorn
على خوادم REXE، يُوصى بـ 1 جيجابايت ذاكرة RAM على الأقل لـ Django. اضبط عدد عمال Gunicorn بناءً على أنوية CPU: (2 × CPU) + 1.
تطبيق Django الخاص بك يعمل الآن في الإنتاج مع خادم Gunicorn WSGI ووكيل Nginx العكسي. بفضل خدمة systemd، يبدأ التطبيق تلقائياً عند إعادة تشغيل الخادم.
تحقق من حالة الخدمة: 'sudo systemctl status gunicorn'. راجع آخر السجلات: 'sudo journalctl -u gunicorn -n 50'. الأسباب الشائعة: مسار WSGI خاطئ، تبعيات مفقودة، أو قيم خاطئة في ملف .env.
تأكد من تنفيذ 'python manage.py collectstatic'. تحقق من أن كتلة location /static/ في Nginx تشير بشكل صحيح إلى مجلد STATIC_ROOT. تحقق من ضبط STATIC_ROOT بشكل صحيح في settings.py.
اضبط DEBUG=True في settings.py لرؤية تفاصيل الخطأ (للتطوير فقط). راجع سجلات Gunicorn: 'sudo journalctl -u gunicorn'. تحقق من ملف سجل Django. تحقق من اتصال قاعدة البيانات وحالة الترحيلات.
أنشئ بيئة افتراضية منفصلة وملف مقبس Gunicorn منفصل وملف خدمة systemd منفصل لكل تطبيق. في Nginx، أضف كتلة خادم منفصلة لكل نطاق مع إعداد وكيل يشير إلى مقبس Gunicorn المقابل.
دليل شامل لنشر تطبيقات Node.js على VPS. تثبيت Node.js عبر nvm، مدير العمليات PM2، وكيل Nginx العكسي، شهادة SSL وإدارة متغيرات البيئة.
دليل شامل لنشر تطبيقات PHP على VPS. مقارنة LAMP و LEMP، إعداد Apache/Nginx + PHP-FPM + MySQL، تهيئة المضيف الافتراضي وإدارة إصدارات PHP.
دليل تثبيت وتحسين WordPress على VPS. إعداد LEMP Stack، إعدادات wp-config.php، صلاحيات الملفات، SSL، تحسين أداء OPcache وتعزيز الأمان.