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

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

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

ابدأ الدورة

مقدمة

\n\n

لقد كتبت تطبيقًا رائعًا بلغة Rust. إنه سريع وآمن ولا يتعطل. ولكن كيف تجعله يعمل 24/7 على خادم بعيد ويكون متاحًا للمستخدمين؟ نشر تطبيق Rust على VPS (خادم خاص افتراضي) هو عملية تتضمن تجميع الملف الثنائي، إعداد البيئة، التشغيل كخدمة نظام، وغالبًا، إعداد reverse proxy.

\n\n

في هذه المقالة، سنخوض الرحلة بأكملها من الصفر إلى تطبيق Rust يعمل بكامل طاقته، منشور على VPS مع Ubuntu. ستتعلم كيفية إعداد الخادم، بناء المشروع، إعداد التشغيل التلقائي، وضمان الأمان. هذا الدليل مناسب لخوادم الويب (Actix-web، Axum، Rocket) وكذلك لأي خوادم أخرى بلغة Rust.

\n\n

لنبدأ.

\n\n

1. إعداد الخادم والبيئة

\n\n

قبل نشر الكود، يجب إعداد "الأرضية". سنستخدم Ubuntu 22.04 LTS، لكن التعليمات تنطبق أيضًا على Debian.

\n\n

الاتصال بالخادم والإعداد الأساسي

\n\n

اتصل بـ VPS الخاص بك عبر SSH:

\n\n
ssh root@your-server-ip
\n\n

قم بتحديث الحزم وإنشاء مستخدم (العمل كـ root ممارسة سيئة):

\n\n
apt update && apt upgrade -y\nadduser deployer\nusermod -aG sudo deployer
\n\n

قم بإعداد مفاتيح SSH للمستخدم الجديد لتجنب إدخال كلمة المرور في كل مرة.

\n\n

تثبيت Rust على الخادم

\n\n

الطريقة الأكثر موثوقية هي استخدام السكريبت الرسمي rustup. قم بالتبديل إلى المستخدم deployer ونفذ:

\n\n
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
\n\n

بعد التثبيت، أعد تحميل shell أو نفذ:

\n\n
source $HOME/.cargo/env
\n\n

تحقق من الإصدار:

\n\n
rustc --version
\n\n

للبناء للإنتاج، سنحتاج إلى الربط الثابت (static linking) (لجعل الملف الثنائي يعمل على أي Linux بدون مكتبات إضافية). قم بتثبيت musl-tools:

\n\n
sudo apt install musl-tools -y\nrustup target add x86_64-unknown-linux-musl
\n\n

2. بناء ونقل الملف الثنائي إلى الخادم

\n\n

من الأفضل بناء التطبيق على جهازك المحلي (أو في CI/CD)، ثم نسخ الملف الثنائي الجاهز إلى الخادم. هذا أسرع ولا يثقل على VPS.

\n\n

بناء نسخة الإنتاج

\n\n

على جهاز الكمبيوتر المحلي الخاص بك، في مجلد المشروع، نفذ:

\n\n
cargo build --release --target x86_64-unknown-linux-musl
\n\n

سينشئ هذا ملفًا ثنائيًا مرتبطًا بشكل ثابت بدون تبعيات على glibc. سيكون الحجم أكبر، لكنه سيعمل على أي Linux.

\n\n

مثال لخادم ويب بسيط على Actix-web للاختبار (ملف src/main.rs):

\n\n
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 للنسخ الآمن:

\n\n
scp ./target/x86_64-unknown-linux-musl/release/your_project deployer@your-server-ip:/home/deployer/
\n\n

على الخادم، انقل الملف الثنائي إلى /usr/local/bin:

\n\n
sudo mv /home/deployer/your_project /usr/local/bin/my-rust-app\nsudo chmod +x /usr/local/bin/my-rust-app
\n\n

3. إعداد systemd للتشغيل التلقائي

\n\n

لجعل التطبيق يبدأ عند تشغيل النظام، ويعاد تشغيله بعد الأعطال، ويعمل في الخلفية، سننشئ خدمة systemd.

\n\n

أنشئ ملف الخدمة:

\n\n
sudo nano /etc/systemd/system/rust-app.service
\n\n

ألصق التكوين التالي (استبدل deployer بمستخدمك):

\n\n
[Unit]\nDescription=Rust Application\nAfter=network.target\n\n[Service]\nType=simple\nUse                

المدونات

توصيات الكتب