النشر المتقدم لتطبيق C# (.NET) على VPS: دليل خطوة بخطوة
\n\nنشر تطبيق C# على VPS ليس مجرد نسخ الملفات إلى الخادم. فبيئة الإنتاج تتطلب إعدادًا شاملاً: من تكوين الوكيل العكسي إلى أتمتة النشر. في هذه المقالة، سنستعرض التقنيات المتقدمة للنشر التي يستخدمها المطورون ذوو الخبرة. ستتعلم كيفية إعداد Nginx، وربط HTTPS، وتطبيق CI/CD والمراقبة.
\n\n1. تحضير الخادم وتثبيت .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\n2. تحسين التطبيق للإنتاج
\n\nقبل النشر، قم بتكوين التطبيق للعمل في بيئة الإنتاج. يشمل ذلك تكوين Kestrel، وتسجيل الأخطاء، ومعالجة الأخطاء.
\n\n2.1. إعداد Program.cs
\n\nفي ملف Program.cs، حدد المنفذ الصريح وقم بتفعيل إعادة التوجيه إلى HTTPS (إذا كنت تستخدم وكيلًا عكسيًا).
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\n2.2. البناء والنشر
\n\nقم ببناء التطبيق كـ self-contained لتجنب الاعتماد على Runtime المثبت على الخادم.
\n\ndotnet publish -c Release -r linux-x64 --self-contained true -o ./publish\n\nسينشئ هذا الأمر مجلد publish بجميع الملفات اللازمة. انقله إلى الخادم باستخدام scp أو rsync.
3. إعداد Nginx كوكيل عكسي
\n\nسيتولى Nginx استقبال الطلبات الواردة وإعادة توجيهها إلى تطبيق C# الخاص بك. هذا يعزز الأداء والأمان.
\n\n3.1. التثبيت والتكوين الأساسي
\n\nsudo apt install nginx -y\nsudo systemctl start nginx\nsudo systemctl enable nginx\n\nأنشئ ملف تكوين لتطبيقك:
\n\nsudo nano /etc/nginx/sites-available/myapp\n\nألصق الكود التالي:
\n\nserver {\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<