نشر تطبيق Rust على VPS: مستوى متقدم خطوة بخطوة

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

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

ابدأ الدورة

مقدمة: لماذا النشر المتقدم لـ Rust على VPS ضرورة

\n

تطوير Rust هو نصف المهمة فقط. النصف الثاني، الذي لا يقل أهمية، هو النشر الموثوق والآمن. الطرق الأساسية، مثل التجميع اليدوي والتشغيل عبر cargo run، غير مناسبة للإنتاج. على المستوى المتقدم، نحتاج إلى الأتمتة، عزل العمليات، المراقبة وضمان التوفر العالي.

\n

في هذه المقالة، سنشرح كيفية إعداد نشر تطبيق Rust على VPS باستخدام Docker، CI/CD (GitHub Actions)، systemd للتشغيل التلقائي و Nginx كوكيل عكسي. جميع أمثلة الكود مقدمة بلغة Rust و Bash.

\n\n

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

\n

1.1. الإعداد الأساسي للخادم

\n

لنفترض أن لديك VPS يعمل بنظام Ubuntu 22.04 LTS. أولاً، نقوم بتحديث الحزم وتثبيت الأدوات اللازمة:

\n
sudo apt update && sudo apt upgrade -y\nsudo apt install -y curl git build-essential pkg-config libssl-dev
\n

نقوم بتثبيت Rust عبر rustup:

\n
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh\nsource $HOME/.cargo/env\nrustc --version  # تحقق
\n

1.2. تثبيت Docker

\n

سيوفر Docker عزل البيئة وقابلية التكرار:

\n
sudo apt install -y docker.io\nsudo systemctl enable --now docker\nsudo usermod -aG docker $USER\nnewgrp docker
\n

1.3. تثبيت Nginx

\n

سيعمل Nginx كوكيل عكسي وموازن أحمال:

\n
sudo apt install -y nginx\nsudo systemctl enable --now nginx
\n\n

2. حاويات تطبيق Rust باستخدام Docker

\n

2.1. البناء متعدد المراحل (multi-stage build)

\n

لتقليل حجم الصورة، نستخدم البناء متعدد المراحل. قم بإنشاء Dockerfile في جذر المشروع:

\n
# مرحلة البناء\nFROM rust:1.75-slim-bookworm AS builder\nWORKDIR /app\nCOPY Cargo.toml Cargo.lock ./\nCOPY src ./src\nRUN cargo build --release\n\n# المرحلة النهائية\nFROM debian:bookworm-slim\nRUN apt update && apt install -y ca-certificates && rm -rf /var/lib/apt/lists/*\nWORKDIR /app\nCOPY --from=builder /app/target/release/my_app .\nEXPOSE 8080\nCMD ["./my_app"]
\n

هنا my_app هو اسم ملفك الثنائي. تأكد من أن Cargo.toml يحتوي على name = "my_app".

\n

2.2. بناء وتشغيل الحاوية

\n
docker build -t my_app:latest .\ndocker run -d --name my_app -p 8080:8080 my_app:latest
\n

تحقق من استجابة التطبيق:

\n
curl http://localhost:8080
\n\n

3. إعداد التشغيل التلقائي والمراقبة (systemd + Docker Compose)

\n

3.1. Docker Compose لإدارة الخدمات

\n

قم بإنشاء docker-compose.yml:

\n
version: '3.8'\nservices:\n  app:\n    image: my_app:latest\n    restart: always\n    ports:\n      - "127.0.0.1:8080:8080"\n    environment:\n      - RUST_LOG=info\n    healthcheck:\n      test: ["CMD", "curl", "-f", "http://localhost:8080/health"]\n      interval: 30s\n      timeout: 10s\n      retries: 3
\n

لاحظ: ports مرتبط بـ 127.0.0.1، بحيث تمر الطلبات الخارجية عبر Nginx فقط.

\n

3.2. وحدة Systemd لإدارة الخدمة

\n

قم بإنشاء ملف /etc/systemd/system/my_app.service:

\n
[Unit]\nDescription=تطبيق Rust الخاص بي\nAfter=docker.service\nRequires=docker.service\n\n[Service]\nType=oneshot\nRemainAfterExit=yes\nWorkingDirectory=/opt/my_app\nExecStart=/usr/bin/docker compose up -d\nExecStop=/usr/bin/docker compose down\nUser=deploy\nGroup=deploy\n\n[Install]\nWantedBy=multi-user.target
\n

قم بتمكينه وتشغيله:

\n
sudo systemctl daemon-reload\nsudo systemctl enable my_app\nsudo systemctl start my_app
\n\n

4. إعداد Nginx

المدونات

توصيات الكتب