مقدمة
\n\nلقد كتبت تطبيقًا رائعًا بلغة Rust. إنه سريع وآمن ولا يتعطل. ولكن كيف تجعله يعمل 24/7 على خادم بعيد ويكون متاحًا للمستخدمين؟ نشر تطبيق Rust على VPS (خادم خاص افتراضي) هو عملية تتضمن تجميع الملف الثنائي، إعداد البيئة، التشغيل كخدمة نظام، وغالبًا، إعداد reverse proxy.
\n\nفي هذه المقالة، سنخوض الرحلة بأكملها من الصفر إلى تطبيق Rust يعمل بكامل طاقته، منشور على VPS مع Ubuntu. ستتعلم كيفية إعداد الخادم، بناء المشروع، إعداد التشغيل التلقائي، وضمان الأمان. هذا الدليل مناسب لخوادم الويب (Actix-web، Axum، Rocket) وكذلك لأي خوادم أخرى بلغة Rust.
\n\nلنبدأ.
\n\n1. إعداد الخادم والبيئة
\n\nقبل نشر الكود، يجب إعداد "الأرضية". سنستخدم Ubuntu 22.04 LTS، لكن التعليمات تنطبق أيضًا على Debian.
\n\nالاتصال بالخادم والإعداد الأساسي
\n\nاتصل بـ VPS الخاص بك عبر SSH:
\n\nssh root@your-server-ip\n\nقم بتحديث الحزم وإنشاء مستخدم (العمل كـ root ممارسة سيئة):
\n\napt update && apt upgrade -y\nadduser deployer\nusermod -aG sudo deployer\n\nقم بإعداد مفاتيح SSH للمستخدم الجديد لتجنب إدخال كلمة المرور في كل مرة.
\n\nتثبيت Rust على الخادم
\n\nالطريقة الأكثر موثوقية هي استخدام السكريبت الرسمي rustup. قم بالتبديل إلى المستخدم deployer ونفذ:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh\n\nبعد التثبيت، أعد تحميل shell أو نفذ:
\n\nsource $HOME/.cargo/env\n\nتحقق من الإصدار:
\n\nrustc --version\n\nللبناء للإنتاج، سنحتاج إلى الربط الثابت (static linking) (لجعل الملف الثنائي يعمل على أي Linux بدون مكتبات إضافية). قم بتثبيت musl-tools:
\n\nsudo apt install musl-tools -y\nrustup target add x86_64-unknown-linux-musl\n\n2. بناء ونقل الملف الثنائي إلى الخادم
\n\nمن الأفضل بناء التطبيق على جهازك المحلي (أو في CI/CD)، ثم نسخ الملف الثنائي الجاهز إلى الخادم. هذا أسرع ولا يثقل على VPS.
\n\nبناء نسخة الإنتاج
\n\nعلى جهاز الكمبيوتر المحلي الخاص بك، في مجلد المشروع، نفذ:
\n\ncargo build --release --target x86_64-unknown-linux-musl\n\nسينشئ هذا ملفًا ثنائيًا مرتبطًا بشكل ثابت بدون تبعيات على glibc. سيكون الحجم أكبر، لكنه سيعمل على أي Linux.
\n\nمثال لخادم ويب بسيط على Actix-web للاختبار (ملف src/main.rs):
use actix_web::{web, App, HttpServer, Responder};\n\nasync fn hello() -> impl Responder {\n "Hello from Rust on VPS!"\n}\n\n#[actix_web::main]\nasync fn main() -> std::io::Result<()> {\n HttpServer::new(|| {\n App::new().route("/", web::get().to(hello))\n })\n .bind("0.0.0.0:8080")?\n .run()\n .await\n}\n\nالنسخ إلى الخادم
\n\nاستخدم scp للنسخ الآمن:
scp ./target/x86_64-unknown-linux-musl/release/your_project deployer@your-server-ip:/home/deployer/\n\nعلى الخادم، انقل الملف الثنائي إلى /usr/local/bin:
sudo mv /home/deployer/your_project /usr/local/bin/my-rust-app\nsudo chmod +x /usr/local/bin/my-rust-app\n\n3. إعداد systemd للتشغيل التلقائي
\n\nلجعل التطبيق يبدأ عند تشغيل النظام، ويعاد تشغيله بعد الأعطال، ويعمل في الخلفية، سننشئ خدمة systemd.
\n\nأنشئ ملف الخدمة:
\n\nsudo nano /etc/systemd/system/rust-app.service\n\nألصق التكوين التالي (استبدل deployer بمستخدمك):
[Unit]\nDescription=Rust Application\nAfter=network.target\n\n[Service]\nType=simple\nUse