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

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

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

ابدأ الدورة

مقدمة: لماذا يعتبر VPS الحل الأمثل لتطبيقات C#؟

لم يعد التطوير باستخدام C# ومنصة .NET حكرًا على خوادم Windows فقط. مع إصدار .NET Core (والآن .NET 5/6/7/8) حصل المطورون على القدرة على تشغيل تطبيقاتهم على Linux، مما فتح الباب أمام خوادم VPS غير المكلفة وعالية الأداء. نشر تطبيق C# على VPS لا يوفر الميزانية فحسب، بل يمنحك أيضًا تحكمًا كاملاً في البنية التحتية: من اختيار نظام التشغيل إلى إعداد الأمان.

في هذا الدليل، سنستعرض دورة النشر الكاملة لتطبيق ASP.NET Core على خادم بعيد. ستتعلم كيفية إعداد الخادم، تكوين خادم الوكيل العكسي Nginx، تشغيل التطبيق عبر Kestrel وحمايته باستخدام شهادة SSL. جميع الخطوات مصحوبة بأمثلة على الأكواد وأوامر الطرفية.



1. إعداد الخادم وتثبيت .NET Runtime

اختيار نظام التشغيل والاتصال عبر SSH

لنشر تطبيق C# على VPS، يُوصى باستخدام توزيعة Ubuntu 22.04 LTS أو Debian 11. بعد استئجار الخادم، اتصل به عبر SSH:

ssh root@عنوان_IP_الخادم_الخاص_بك

قم بتحديث مدير الحزم وتثبيت الأدوات اللازمة:

apt update && apt upgrade -yapt install curl wget git -y


تثبيت .NET SDK أو Runtime

لتشغيل تطبيق جاهز، يكفي تثبيت ASP.NET Core Runtime. إذا كنت تخطط لترجمة الكود مباشرة على الخادم، فقم بتثبيت SDK. سنضيف مستودع Microsoft ونثبت .NET 8:

wget https://packages.microsoft.com/config/ubuntu/22.04/packages-microsoft-prod.deb -O packages-microsoft-prod.debdpkg -i packages-microsoft-prod.debapt updateapt install aspnetcore-runtime-8.0 -y

تحقق من التثبيت:

dotnet --list-runtimes

يجب أن يحتوي الإخراج على سطر بإصدار ASP.NET Core 8.0.x.



2. إعداد التطبيق ونشره

تكوين المشروع للإنتاج

في مشروع ASP.NET Core الخاص بك، افتح ملف Program.cs وتأكد من أن التطبيق يستمع إلى عنوان URL الصحيح. للعمل عبر Kestrel، سنضبط المنفذ 5000:

var builder = WebApplication.CreateBuilder(args);builder.WebHost.UseUrls("http://0.0.0.0:5000");var app = builder.Build();app.MapGet("/", () => "Hello from VPS!");app.Run();

أيضًا، أضف في appsettings.json قسمًا للسجلات وسلاسل الاتصال بقاعدة البيانات إذا كانت مستخدمة.



نشر التطبيق (Self-contained أو Framework-dependent)

اختر طريقة النشر. النشر الذاتي (Self-contained) يتضمن جميع التبعيات، وهو مناسب إذا لم يكن .NET Runtime مثبتًا على الخادم. النشر المعتمد على الإطار (Framework-dependent) يتطلب تثبيت Runtime. نفذ الأمر في مجلد المشروع:

dotnet publish -c Release -o ./publish

بعد الانتهاء، ستظهر جميع الملفات اللازمة في مجلد publish. قم بضغطها:

tar -czf app.tar.gz ./publish


الرفع إلى الخادم

استخدم SCP أو SFTP لنقل الأرشيف. مثال عبر SCP (يتم تنفيذه من الجهاز المحلي):

scp app.tar.gz root@عنوان_IP:/var/www/myapp/

على الخادم، قم بفك ضغط الأرشيف:

mkdir -p /var/www/myapptar -xzf /var/www/myapp/app.tar.gz -C /var/www/myapp/


3. إعداد Kestrel وإنشاء خدمة systemd

تشغيل التطبيق عبر Kestrel

Kestrel هو خادم الويب المدمج في ASP.NET Core. للتشغيل التجريبي، نفذ:

cd /var/www/myapp/publishdotnet YourAppName.dll

يجب أن يعمل التطبيق على المنفذ 5000. تحقق عبر curl http://localhost:5000. إذا كان كل شيء يعمل، أوقف العملية (Ctrl+C).



إنشاء ملف وحدة systemd

لكي يعمل التطبيق تلقائيًا عند بدء تشغيل النظام ويعاد تشغيله عند حدوث أعطال، سننشئ خدمة systemd. أنشئ ملفًا:

nano /etc/systemd/syst                

المدونات

توصيات الكتب