مقدمة
Rust هي لغة برمجة نظامية تشتهر بأدائها العالي وأمان الذاكرة. لكن كتابة التطبيق ليست سوى نصف المهمة. لكي يصبح مشروعك متاحًا للمستخدمين على الإنترنت، يجب نشره (deploy) على خادم. في هذه المقالة، سنستعرض عملية نشر تطبيق Rust خطوة بخطوة على VPS (خادم خاص افتراضي).
سنستخدم خادم ويب نموذجيًا يعتمد على إطار العمل actix-web، وسنقوم بإعداد البيئة، وتجميع الإصدار النهائي (release build)، وتشغيل التطبيق كخدمة systemd، وإعداد خادم وكيل عكسي Nginx مع شهادة SSL. باتباع هذا الدليل، ستتمكن من نشر أي تطبيق Rust على خادم بعيد يعمل بنظام Linux.
1. تحضير الخادم والبيئة
1.1. الاتصال بالخادم
أولاً، اتصل بـ VPS الخاص بك عبر SSH:
ssh root@your_server_ip
يُوصى بإنشاء مستخدم منفصل بصلاحيات محدودة (sudo) لأغراض الأمان، لكن للتبسيط في هذا الدليل سنعمل كمستخدم root.
1.2. تثبيت Rust على الخادم
على الرغم من أنه يمكننا تجميع التطبيق محليًا ونسخ الملف الثنائي (binary) فقط، إلا أنه من الأسهل تثبيت Rust على الخادم لإمكانية إعادة التجميع وفقًا للبنية المستهدفة. استخدم النص الرسمي:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source $HOME/.cargo/env
تحقق من التثبيت:
rustc --version
cargo --version
1.3. تثبيت التبعيات النظامية
قد تتطلب بعض الكريتات (crates) مثل openssl مكتبات نظامية. قم بتثبيتها:
apt update
apt install build-essential pkg-config libssl-dev git -y
2. تجميع التطبيق وتحضيره
2.1. مثال لخادم ويب بسيط باستخدام actix-web
لننشئ تطبيقًا صغيرًا. إذا كان لديك مشروع بالفعل، تخط هذه الخطوة.
Cargo.toml:
[package]
name = "my_rust_app"
version = "0.1.0"
edition = "2021"
[dependencies]
actix-web = "4"
serde = { version = "1", features = ["derive"] }
src/main.rs:
use actix_web::{get, web, App, HttpServer, Responder};
#[get("/")]
async fn index() -> impl Responder {
"Hello from Rust on VPS!"
}
#[actix_web::main]
async fn main() -> std::io::Result<()> {
println!("Starting server at 0.0.0.0:8080");
HttpServer::new(|| {
App::new()
.service(index)
})
.bind("0.0.0.0:8080")?
.run()
.await
}
2.2. التجميع في وضع الإصدار (Release mode)
قم بتجميع التطبيق على جهازك المحلي أو مباشرة على الخادم. للحصول على أقصى أداء، استخدم العلم --release:
cargo build --release
سيكون الملف الثنائي الجاهز في target/release/my_rust_app (الاسم يطابق اسم الحزمة).
2.3. نسخ الملف الثنائي إلى الخادم (إذا قمت بالتجميع محليًا)
إذا قمت بتجميع التطبيق على جهازك المحلي، فانسخه عبر SCP:
scp target/release/my_rust_app root@your_server_ip:/opt/my_rust_app/
على الخادم، أنشئ الدليل /opt/my_rust_app مسبقًا:
mkdir -p /opt/my_rust_app
3. إعداد التشغيل عبر systemd
لكي يتم تشغيل التطبيق تلقائيًا عند بدء تشغيل النظام وإعادة تشغيله في حالة حدوث عطل، سننشئ خدمة systemd.
3.1. إنشاء ملف الوحدة (unit file)
أنشئ ملفًا باسم /etc/systemd/system/my_rust_app.service:
[Unit]
Description=My Rust Web Application
After=network.target
[Service]
Type=simple
User=root
WorkingDirectory=/opt/my_rust_app
ExecStart=/opt/my_rust_app/my_rust_app
Restart=on-failure
RestartSec=10
[Install]
WantedBy=multi-user.target
```