نشر تطبيق C# على VPS: المستوى المتقدم

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

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

ابدأ الدورة

النشر المتقدم لتطبيق C# (.NET) على VPS: دليل خطوة بخطوة

\n\n

نشر تطبيق C# على VPS ليس مجرد نسخ الملفات إلى الخادم. فبيئة الإنتاج تتطلب إعدادًا شاملاً: من تكوين الوكيل العكسي إلى أتمتة النشر. في هذه المقالة، سنستعرض التقنيات المتقدمة للنشر التي يستخدمها المطورون ذوو الخبرة. ستتعلم كيفية إعداد Nginx، وربط HTTPS، وتطبيق CI/CD والمراقبة.

\n\n

1. تحضير الخادم وتثبيت .NET Runtime

\n\n

قبل بدء النشر، تأكد من أن VPS الخاص بك يعمل بنظام Ubuntu 22.04 أو أحدث. اتصل عبر SSH وقم بالإعداد الأساسي.

\n\n
# تحديث النظام\nsudo apt update && sudo apt upgrade -y\n\n# تثبيت .NET SDK (للبناء) و Runtime (للتشغيل)\nwget https://dot.net/v1/dotnet-install.sh -O dotnet-install.sh\nchmod +x dotnet-install.sh\nsudo ./dotnet-install.sh --channel 8.0 --install-dir /usr/share/dotnet\nsudo ln -s /usr/share/dotnet/dotnet /usr/local/bin/dotnet\n\n# التحقق من التثبيت\ndotnet --list-runtimes
\n\n

لبيئة الإنتاج، يُوصى باستخدام Runtime فقط لتقليل حجم الصورة. SDK مطلوب فقط على جهاز البناء (مثل CI/CD).

\n\n

2. تحسين التطبيق للإنتاج

\n\n

قبل النشر، قم بتكوين التطبيق للعمل في بيئة الإنتاج. يشمل ذلك تكوين Kestrel، وتسجيل الأخطاء، ومعالجة الأخطاء.

\n\n

2.1. إعداد Program.cs

\n\n

في ملف Program.cs، حدد المنفذ الصريح وقم بتفعيل إعادة التوجيه إلى HTTPS (إذا كنت تستخدم وكيلًا عكسيًا).

\n\n
var builder = WebApplication.CreateBuilder(args);\n\n// تكوين Kestrel للعمل عبر وكيل عكسي\nbuilder.WebHost.ConfigureKestrel(options =>\n{\n    options.Listen(IPAddress.Any, 5000); // منفذ HTTP لـ Nginx\n});\n\n// إضافة الخدمات\nbuilder.Services.AddControllersWithViews();\nbuilder.Services.AddHealthChecks();\n\nvar app = builder.Build();\n\n// Middleware للإنتاج\nif (!app.Environment.IsDevelopment())\n{\n    app.UseExceptionHandler("/Home/Error");\n    app.UseHsts();\n}\n\napp.UseStaticFiles();\napp.UseRouting();\napp.UseAuthorization();\n\napp.MapHealthChecks("/health");\napp.MapControllerRoute(\n    name: "default",\n    pattern: "{controller=Home}/{action=Index}/{id?}");\n\napp.Run();
\n\n

2.2. البناء والنشر

\n\n

قم ببناء التطبيق كـ self-contained لتجنب الاعتماد على Runtime المثبت على الخادم.

\n\n
dotnet publish -c Release -r linux-x64 --self-contained true -o ./publish
\n\n

سينشئ هذا الأمر مجلد publish بجميع الملفات اللازمة. انقله إلى الخادم باستخدام scp أو rsync.

\n\n

3. إعداد Nginx كوكيل عكسي

\n\n

سيتولى Nginx استقبال الطلبات الواردة وإعادة توجيهها إلى تطبيق C# الخاص بك. هذا يعزز الأداء والأمان.

\n\n

3.1. التثبيت والتكوين الأساسي

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

أنشئ ملف تكوين لتطبيقك:

\n\n
sudo nano /etc/nginx/sites-available/myapp
\n\n

ألصق الكود التالي:

\n\n
server {\n    listen 80;\n    server_name your-domain.com www.your-domain.com;\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    location /health {\n        access_log off;\n        return 200 "Healthy\\n";\n        add_header Content-Type text/plain;\n    }\n}
\n\n

قم بتفعيل الموقع وأعد تشغيل Nginx:

\n\n<

المدونات

توصيات الكتب