نشر تطبيق Rust على VPS: دليل خطوة بخطوة من الألف إلى الياء

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

مقدمة: لماذا Rust مثالي للإنتاج وكيفية نشره

Rust هي لغة برمجة أنظمة تجمع بين أداء C++ وأمان الذاكرة. بفضل عدم وجود جامع للقمامة وإمكانية التجميع إلى ملف ثنائي أصلي، فإن تطبيقات Rust مثالية للنشر على VPS (خادم خاص افتراضي). في هذه المقالة، سنمر بدورة النشر الكاملة: من بناء المشروع إلى إعداد الوكيل العكسي والمراقبة. ستتعلم كيفية تحويل تطبيق Rust الخاص بك إلى خدمة إنتاج مستقرة.



1. التحضير: بناء تطبيق Rust لـ VPS

الخطوة الأولى هي بناء ملف ثنائي محسّن. للقيام بذلك، سنحتاج إلى مجموعة أدوات Rust على جهازك المحلي (أو على الخادم).



1.1. التجميع في وضع الإصدار

في جذر المشروع، نفّذ الأمر التالي:

cargo build --release

سينشئ هذا ملفًا ثنائيًا محسّنًا في مجلد target/release/. بالنسبة لتطبيقات الويب التي تستخدم actix-web أو rocket، قد يتراوح حجم الملف بين 5-15 ميجابايت. لتقليل الحجم، يمكنك إضافة ما يلي إلى Cargo.toml:

[profile.release]opt-level = 3lto = truecodegen-units = 1strip = true


1.2. إعداد متغيرات البيئة

أنشئ ملفًا باسم .env.prod لتكوين الإنتاج. مثال لخادم ويب:

DATABASE_URL=postgres://user:pass@localhost:5432/mydbRUST_LOG=infoSERVER_HOST=0.0.0.0SERVER_PORT=8080


1.3. نقل الملفات إلى VPS

انسخ الملف الثنائي والملفات الثابتة والتكوين إلى الخادم. استخدم scp أو rsync:

scp target/release/myapp user@your-vps-ip:/home/user/app/scp -r static/ user@your-vps-ip:/home/user/app/static/scp .env.prod user@your-vps-ip:/home/user/app/.env


2. إعداد الخادم: systemd و Nginx

للتشغيل التلقائي للتطبيق عند إعادة تشغيل الخادم وضمان الأمان، نستخدم systemd و Nginx.



2.1. إنشاء خدمة systemd

أنشئ ملفًا باسم /etc/systemd/system/myapp.service:

[Unit]Description=تطبيق ويب RustAfter=network.target

[Service]User=www-dataWorkingDirectory=/home/user/appExecStart=/home/user/app/myappRestart=alwaysRestartSec=10EnvironmentFile=/home/user/app/.env

[Install]WantedBy=multi-user.target

قم بتفعيل الخدمة:

sudo systemctl daemon-reloadsudo systemctl enable myappsudo systemctl start myappsudo systemctl status myapp


2.2. إعداد Nginx كوكيل عكسي

سيستمع تطبيق Rust إلى المنفذ 8080 (داخليًا)، بينما سيقبل Nginx الطلبات الخارجية على المنفذ 80/443. أنشئ التكوين /etc/nginx/sites-available/myapp:

server {    listen 80;    server_name your-domain.com;

location / { proxy_pass http://127.0.0.1:8080; 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; }

location /static/ { alias /home/user/app/static/; expires 30d; }}

قم بتفعيل الموقع:

sudo ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/sudo nginx -tsudo systemctl reload nginx


2.3. إعداد HTTPS (اختياري)

قم بتثبيت Certbot واحصل على شهادة SSL:

sudo apt install certbot python3-certbot-nginxsudo certbot --nginx -d your-domain.com


3. إدارة قاعدة البيانات والترحيلات

إذا كان تطبيق Rust الخاص بك يستخدم قاعدة بيانات (مثل PostgreSQL مع diesel أو sqlx)، فقم بإعدادها على VPS.



3.1. تثبيت PostgreSQL

sudo apt updatesudo apt install postgresql postgres                

المدونات

توصيات الكتب