نشر تطبيق .NET 6 MVC على نظام لينكس

ابدأ بإنشاء مجلد على خادم لينكس الخاص بك، على سبيل المثال قم بتسميته myweb. تذكر ضبط صلاحيات المجلد بشكل صحيح؛ الإعداد الافتراضي القياسي هو 0755. القيمة 0755 تعادل الصلاحيات rwxr-xr-x:

المستخدمون الآخرون: القراءة والتنفيذ فقط (r-x)

المالك (حساب المستخدم الخاص بك): صلاحيات كاملة للقراءة والكتابة والتنفيذ (rwx)

أعضاء المجموعة: القراءة والتنفيذ فقط (r-x)

بعد ذلك، قم بنشر مشروعك من داخل برنامج Visual Studio. قم أولاً بالتبديل إلى إعدادات بناء الإصدار النهائي (Release) ثم قم بترجمة المشروع، بعد ذلك انقر بزر الماوس الأيمن على المشروع واختر خيار النشر. بمجرد انتهاء عملية النشر، انسخ جميع الملفات التي تم إنشاؤها من مجلد النشر إلى دليل myweb الذي قمت بإنشائه للتو باستخدام عميل بروتوكول نقل الملفات FTP.

cd /usr/myweb

بعد نقل الملفات، قم بتشغيل الأمر أدناه لبدء تشغيل التطبيق كعملية في الخلفية. التشغيل في الخلفية يعني أن البرنامج سيبقى نشطًا حتى بعد إغلاق نافذة اتصال SSH عن بُعد على لينكس.

sudo nohup dotnet yourprogramname.dll &Code language: CSS (css)

الرمز & الموجود في نهاية الأمر ضروري للغاية للتشغيل في الخلفية. في حال حذفه، سيعمل التطبيق في الواجهة الأمامية، وسيتم إيقاف البرنامج فورًا عند إغلاق الطرفية أو الضغط على مفتاحي Ctrl + C.

إليك المثال العملي المستخدم لدي: sudo nohup dotnet WebSite.dll &

ملاحظة إضافية هامة

قم بتعديل إعدادات المنفذ قبل عملية النشر. افتح ملف appsettings.json الموجود داخل مشروع .NET MVC.

أضف الإعدادات الموضحة أدناه كنموذج:

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "AllowedHosts": "*",
  "Kestrel": {
    "Endpoints": {
      "Http": {
        "Url": "http://0.0.0.0:8080"
      }
    }
  }
}Code language: JSON / JSON with Comments (json)

هذا الإعداد يقبل الاتصالات من أي عنوان IP عبر المنفذ 8080، مما يتيح لك استخدام خادم Nginx كوكيل عكسي، واستضافة عدة نطاقات منفصلة على خادم لينكس واحد.

إذا كنت تستخدم Nginx كوكيل عكسي فقط، فلن تحتاج إلى فتح هذا المنفذ في جدار الحماية. في هذه الحالة، قم بربط الخدمة بالعنوان المحلي فقط كما يلي:

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "AllowedHosts": "*",
  "Kestrel": {
    "Endpoints": {
      "Http": {
        "Url": "http://127.0.0.1:8080"
      }
    }
  }
}Code language: JSON / JSON with Comments (json)

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

الهدف النهائي لدي هو الوصول إلى هذا التطبيق عبر الرابط abc.com/hello.

بعد ذلك قم بتشغيل الأمر sudo nohup dotnet WebSite.dll & لبدء تشغيل التطبيق.

تحقق من عمل التطبيق بشكل سليم باستخدام هذا الأمر: ps -aux | grep WebSite.dll

ظهور سجل العملية المطابق يؤكد نجاح تشغيل الخدمة.

ضبط وكيل Nginx العكسي (تخط هذا القسم إذا لم تكن بحاجة إلى ميزات الوكيل)

إذا كان Nginx مثبتًا بالفعل على جهازك، فإن ملف الإعدادات الرئيسي يقع في المسار /etc/nginx/nginx.conf

قم بتعديل ملف إعدادات الموقع الموجود في /etc/nginx/sites-available/default

server {
	listen 80 default_server;
	listen [::]:80 default_server;

	root /var/web/xxxx;
	index index.html index.htm index.nginx-debian.html;
	server_name _;

	# الموقع الرئيسي
	location / {
		try_files $uri $uri/ =404;
	}

	# ✅ نقطة هامة: إعادة توجيه /hello إلى .NET
	location /hello {
		proxy_pass http://127.0.0.1:8080;
		proxy_http_version 1.1;
		proxy_set_header Host $host;
		proxy_set_header X-Real-IP $remote_addr;
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
		proxy_set_header X-Forwarded-Proto $scheme;
	}
}Code language: PHP (php)

أعد تشغيل Nginx بعد حفظ التغييرات

sudo nginx -t
sudo systemctl restart nginx

الآن قم بإعادة تشغيل تطبيق .NET MVC

أولاً، ابحث عن العملية قيد التشغيل باستخدام الأمر ps -aux | grep WebSite.dll، ثم قم بتسجيل رقم المعرف PID الموجود في بداية سطر الأمر sudo المقابل

استخدم رقم PID هذا لإيقاف نسخة .NET MVC قيد التشغيل.

قم بإعادة تشغيل الخدمة باستخدام هذا السطر: sudo nohup dotnet 你的项目.dll –urls http://127.0.0.1:8080 > /dev/null 2>&1 &

حان وقت اختبار جميع الإعدادات

إعادة تشغيل Nginx

قم بتشغيل الأمر التالي:

bash

نفذ الأمر:

sudo systemctl restart nginx

خدمة .NET تستمع على المنفذ 8080

استخدم الأمر أدناه للتحقق من نشاط خدمة .NET:

bash

نفذ الأمر:

curl http://127.0.0.1:8080
Code language: JavaScript (javascript)

إذا ظهر محتوى HTML الخام في الطرفية، فهذا يعني أن التطبيق يعمل بشكل صحيح.

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *