مقدمة: لماذا VPS هو المكان المثالي لتطبيق C# الخاص بك
\nالتطوير بلغة C# في نظام .NET البيئي يوفر أدوات قوية لإنشاء تطبيقات الويب وواجهات برمجة التطبيقات (API) والخدمات المصغرة. ومع ذلك، فإن كتابة الكود ليست سوى نصف المهمة. لجعل تطبيقك متاحًا للمستخدمين، يجب نشره على خادم. يوفر الخادم الخاص الافتراضي (VPS) تحكمًا كاملاً في البيئة، وهو أمر بالغ الأهمية لبيئة الإنتاج. في هذا الدليل، سننتقل من الصفر إلى تطبيق C# يعمل بالكامل على VPS يعمل بنظام Ubuntu. ستتعلم كيفية تثبيت .NET Runtime، وإعداد خادم وكيل عكسي Nginx، وتشغيل التطبيق كخدمة systemd، وضمان إعادة تشغيله تلقائيًا.
\n\nتحضير الخادم وتثبيت البرامج الضرورية
\n1. الاتصال بـ VPS والإعدادات الأساسية
\nبعد الحصول على الوصول إلى VPS (عنوان IP واسم المستخدم وكلمة المرور أو مفتاح SSH)، اتصل عبر الطرفية:
\nssh root@your_server_IP\nقم بتحديث قاعدة الحزم وتثبيت curl (ستحتاجه لتحميل .NET):
\napt update && apt upgrade -y\napt install curl -y\n\n2. تثبيت .NET SDK/Runtime
\nتوصي Microsoft بتثبيت .NET من خلال المستودع الرسمي. سنضيفه ونثبت SDK (للبناء) أو Runtime (للتشغيل فقط). بالنسبة لخادم الإنتاج، عادةً ما يكون Runtime كافيًا، ولكن لتسهيل النشر، سنثبت SDK:
\nwget https://packages.microsoft.com/config/ubuntu/22.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb\ndpkg -i packages-microsoft-prod.deb\napt update\napt install -y dotnet-sdk-8.0\nتحقق من التثبيت:
\ndotnet --version\n\n3. تثبيت Nginx و Git
\nسيعمل Nginx كوكيل عكسي، يعيد توجيه الطلبات من المنفذ 80 إلى تطبيقك. ستحتاج Git لاستنساخ المستودع:
\napt install -y nginx git\nsystemctl enable nginx\nsystemctl start nginx\n\nتحضير ونشر تطبيق C#
\n1. إنشاء أو استنساخ المشروع
\nكمثال، سننشئ تطبيق ASP.NET Core Web API بسيط مباشرة على الخادم (في مشروع حقيقي، ستستنسخ المستودع):
\nmkdir /var/www/myapp\ncd /var/www/myapp\ndotnet new webapi --name MyApp\ncd MyApp\n\n2. نشر التطبيق (self-contained)
\nلجعل التطبيق يعمل بدون تثبيت SDK على الخادم، سننشره في وضع self-contained:
\ndotnet publish -c Release -r linux-x64 --self-contained true -o /var/www/myapp/publish\nالعلامة --self-contained true تتضمن جميع تبعيات .NET في مجلد publish. البديل هو --self-contained false (يتطلب تثبيت Runtime).
3. تشغيل اختباري
\nتحقق من أن التطبيق يبدأ (افتراضيًا على المنفذ 5000):
\ncd /var/www/myapp/publish\n./MyApp --urls "http://0.0.0.0:5000"\nافتح في المتصفح http://your_IP:5000 — يجب أن ترى استجابة API. أوقف العملية (Ctrl+C).
إعداد Nginx كخادم وكيل عكسي
\n1. تكوين الموقع
\nلننشئ ملف تكوين لـ Nginx:
\nnano /etc/nginx/sites-available/myapp\nألصق الكود التالي (استبدل your_domain_or_ip بنطاقك أو IP الخاص بك):
server {\n listen 80;\n server_name your_domain_or_ip;\n\n location / {\n proxy_pass http://localhost:5000;\n proxy_http_version 1.1;\n proxy_set_header Upgrade $http_upgrade;\n proxy_set_header Connection keep-alive;\n proxy_set_header Host $host;\n proxy_cache_bypass $http_upgrade;\n proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n proxy_set_header X-Forwarded-Proto $scheme;\n }\n}\n\n2. تفعيل التكوين
\nln -s /etc/nginx/sites-available/myapp /etc/nginx