ابدأ بإنشاء مجلد على خادم لينكس الخاص بك، على سبيل المثال قم بتسميته 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 الخام في الطرفية، فهذا يعني أن التطبيق يعمل بشكل صحيح.
