مقدمة: لماذا Rust مثالي للإنتاج
Rust ليست مجرد لغة برمجة عصرية. مزاياها الرئيسية هي أمان الذاكرة، الأداء العالي، والسلوك المتوقع. عندما تكتب بلغة Rust، تحصل على ملف ثنائي يمكن تشغيله على أي خادم Linux دون الحاجة إلى تثبيت آلة افتراضية أو مفسر. وهذا يجعل نشر تطبيقات Rust على VPS بسيطًا وفعالًا بشكل لا يصدق.
في هذه المقالة، سنشرح العملية الكاملة: بدءًا من بناء المشروع وحتى إعداد بيئة الإنتاج مع Nginx و systemd. ستتعلم كيفية تجميع التطبيق بشكل صحيح، وإعداد التشغيل التلقائي، وضمان الأمان.
تحضير VPS والبيئة
اختيار الخادم وإعداده
لنشر تطبيق Rust، أي VPS يعمل بنظام Linux سيكون مناسبًا (Ubuntu 22.04 LTS هو الخيار الأمثل). الحد الأدنى من المتطلبات: 1 vCPU، 1 غيغابايت RAM، 20 غيغابايت SSD. هذا يكفي لمعظم خدمات الويب بلغة Rust.
أولاً، نتصل بالخادم عبر SSH:
ssh root@your-ip-address
نقوم بتحديث الحزم وتثبيت الأدوات اللازمة:
apt update && apt upgrade -y
apt install curl git build-essential pkg-config libssl-dev -y
تثبيت Rust على الخادم
على الرغم من أننا سنقوم ببناء الملف الثنائي محليًا، إلا أنه من المفيد أحيانًا التجميع مباشرة على الخادم. نقوم بتثبيت Rust:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source $HOME/.cargo/env
نتحقق من التثبيت:
rustc --version
cargo --version
بناء تطبيق Rust للإنتاج
تحسين البناء
للإنتاج، تحتاج إلى بناء التطبيق باستخدام العلم --release. هذا يتضمن تحسينات تقلل من حجم الملف الثنائي وتسرع أداءه. أضف الإعدادات التالية إلى Cargo.toml:
[profile.release]
opt-level = 3
lto = true
codegen-units = 1
strip = true
- opt-level = 3 — أقصى تحسين للسرعة
- lto = true — تحسين وقت الربط (Link Time Optimization)، يقلل الحجم ويسرع
- codegen-units = 1 — يزيد وقت البناء ولكنه يحسن التحسين
- strip = true — يزيل معلومات التصحيح، مما يقلل حجم الملف الثنائي بنسبة 30-50%
بناء الملف الثنائي
ننفذ الأمر على الجهاز المحلي (أو خادم CI):
cargo build --release
الملف الثنائي النهائي موجود في target/release/project-name. يجب أن يكون حجمه صغيرًا — من 2 إلى 10 ميغابايت لتطبيق ويب نموذجي.
نسخ الملف إلى الخادم
نستخدم scp أو rsync لنقل الملف:
scp target/release/your-app root@your-ip-address:/opt/app/
قم بإنشاء الدليل /opt/app على الخادم مسبقًا:
mkdir -p /opt/app
mkdir -p /opt/app/static # إذا كانت هناك ملفات ثابتة
إعداد systemd للتشغيل التلقائي
إنشاء الخدمة
Systemd هو مدير الخدمات القياسي في Linux. سيقوم تلقائيًا بتشغيل تطبيقك بعد إعادة تشغيل الخادم وسيعيد تشغيله في حالة تعطله.
نقوم بإنشاء ملف الخدمة:
nano /etc/systemd/system/rust-app.service
نضيف التكوين:
[Unit]
Description=Rust Web Application
After=network.target
[Service]
Type=simple
User=www-data
Group=www-data
WorkingDirectory=/opt/app
ExecStart=/opt/app/your-app
Restart=always
RestartSec=5
Environment=RUST_LOG=info
Environment=DATABASE_URL=postgres://user:pass@localhost/dbname
[Install]
WantedBy=multi-user.target
المعلمات الهامة:
- User — التشغيل كمستخدم غير مميز
www-data - Restart=always — إعادة التشغيل التلقائي