الدليل الكامل لاستضافة ASP.NET Core على نظام Linux
خطوات ونصائح مهمة لنشر تطبيقات ASP.NET Core بشكل آمن وأمثل على نظام Linux باستخدام Kestrel و Nginx

الدليل الكامل لاستضافة ASP.NET Core على نظام Linux

ستتعلم في هذه المقالة كيفية استضافة تطبيقات ASP.NET Core على نظام Linux. ستتعرف على كيفية تثبيت بيئة تشغيل .NET، وتكوين Kestrel وNginx، مع مراعاة جوانب الأمان والتحسين وقابلية التوسع.
0 الأسهم
0
0
0
0

 

استضافة ASP.NET Core على نظام Linux - لماذا ومتى؟

يعمل ASP.NET Core بشكل جيد على نظام Linux مع *Kestrel*، ويمكن أن يوفر اختيار هذه المنصة للاستضافة مزايا مهمة، بما في ذلك: خفض التكاليف، والتوافق مع أدوات المصادر المفتوحة، وسهولة استخدام الحاويات هذا الخيار مناسب للمواقع الإلكترونية، وواجهات برمجة التطبيقات، وخدمات الخلفية، والتطبيقات الحساسة للتأخير مثل الألعاب والتداول.

 

المتطلبات الأساسية واختيار الخادم

 

توزيعة لينكس وإصدار .NET

تشمل التوزيعات المقترحة ما يلي: أوبونتو LTS (20.04/22.04)، ديبيان (11/12)، و CentOS Stream أو Rocky/Alma إنها مخصصة للإنتاج. للبيئات ذات الأمن الصارم. RHEL استخدم وقت التشغيل الرسمي من مايكروسوفت ومجموعة تطوير البرامج (على سبيل المثال .NET 6/7/8).

 

موارد الأجهزة ونوع الخدمة

بالنسبة للمواقع الإلكترونية وواجهات برمجة التطبيقات الخفيفة عادةً 1-2 وحدة معالجة مركزية افتراضية، 1-4 جيجابايت من ذاكرة الوصول العشوائي ووحدة تخزين NVMe SSD كفى. تطبيقات الأعمال والتطبيقات الثقيلة إلى 4+ وحدات معالجة مركزية افتراضية و8+ جيجابايت من ذاكرة الوصول العشوائي وهم بحاجة إلى شبكة عالية السرعة.

للتداول واللعب مع زمن استجابة منخفض يُفضّل اختيار خادم افتراضي خاص (VPS) محلي بالقرب من مركز تبادل بيانات أو مركز بيانات إقليمي. تمتلك شركتنا أكثر من 85 موقعًا حول العالم، مما يُسهّل عليك اختيار أقرب مركز بيانات إليك.

استخدم خوادم الرسومات (GPU) للذكاء الاصطناعي/الاستدلال أو العرض؛ توفر شركتنا خدمة الحوسبة السحابية لوحدات معالجة الرسومات وخادم الحوسبة مع شبكة عالية السرعة.

للحماية من الهجمات، ضع في اعتبارك خادمًا مضادًا لهجمات DDoS وشبكة مزودة ببروتوكول BGP وشبكة توصيل المحتوى (CDN).

 

التثبيت والإعداد الأساسي (بيئة تشغيل .NET) - مثال لنظام أوبونتو

لتثبيت بيئة التشغيل الرسمية من مايكروسوفت، أضف المستودع ثم قم بتثبيت بيئة التشغيل:

sudo apt update
wget https://packages.microsoft.com/config/ubuntu/22.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
sudo apt update
sudo apt install -y dotnet-runtime-7.0

ثم قم بإنشاء مستخدم خدمة آمن ودليل تطبيق:

sudo useradd -r -s /usr/sbin/nologin aspnetuser
sudo mkdir -p /var/www/myapp
sudo chown aspnetuser:aspnetuser /var/www/myapp

 

نشر بدون حاويات - Kestrel + systemd + Nginx

 

انشر التطبيق وقم بتهيئة نظام systemd

قم ببناء التطبيق ونشره في مسار دليل التطبيق:

dotnet publish -c Release -o /var/www/myapp

مثال على ملف وحدة لـ systemd في /etc/systemd/system/myapp.service مكان:

[Unit]
Description=My ASP.NET Core App
After=network.target

[Service]
WorkingDirectory=/var/www/myapp
ExecStart=/usr/bin/dotnet /var/www/myapp/MyApp.dll
Restart=always
# Safe User/Group
User=aspnetuser
Group=aspnetuser
Environment=ASPNETCORE_ENVIRONMENT=Production
Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false

[Install]
WantedBy=multi-user.target

تفعيل الخدمة وتشغيلها:

sudo systemctl daemon-reload
sudo systemctl enable myapp
sudo systemctl start myapp
sudo journalctl -u myapp -f

 

تهيئة Nginx كخادم وكيل عكسي (إنهاء SSL)

قم بتثبيت Nginx و Certbot:

sudo apt install -y nginx certbot python3-certbot-nginx

نموذج لتكوين Nginx في /etc/nginx/sites-available/myapp مكان:

server {
    listen 80;
    server_name example.com www.example.com;

    location / {
        proxy_pass         http://127.0.0.1:5000;
        proxy_http_version 1.1;
        proxy_set_header   Upgrade $http_upgrade;
        proxy_set_header   Connection keep-alive;
        proxy_set_header   Host $host;
        proxy_cache_bypass $http_upgrade;
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header   X-Forwarded-Proto $scheme;
    }
}

احصل على شهادة SSL مجانية:

sudo certbot --nginx -d example.com -d www.example.com

 

النشر باستخدام Docker و Docker Compose

مثال على ملف Dockerfile متعدد الخطوات لإنتاج صورة صغيرة ومحسّنة:

FROM mcr.microsoft.com/dotnet/sdk:7.0 AS build
WORKDIR /src
COPY . .
RUN dotnet publish -c Release -o /app

FROM mcr.microsoft.com/dotnet/aspnet:7.0 AS runtime
WORKDIR /app
COPY --from=build /app .
ENTRYPOINT ["dotnet", "MyApp.dll"]

نموذج لملف docker-compose.yml (يمكنك أيضًا استخدام nginx-proxy أو Traefik):

version: '3.8'
services:
  web:
    build: .
    ports:
      - "5000"
    environment:
      - ASPNETCORE_ENVIRONMENT=Production
  nginx:
    image: nginx:stable
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./nginx/conf.d:/etc/nginx/conf.d
      - ./certs:/etc/letsencrypt

لعمليات التكامل المستمر/التسليم المستمر (CI/CD)، استخدم GitLab CI أو GitHub Actions لإنشاء الصور واختبارها ونشرها في سجل الصور، ثم سحبها إلى الخادم. توفر شركتنا خدمة استضافة GitLab للفرق الخاصة.

 

الأمن وأفضل الممارسات

 

الشبكة وجدار الحماية

افتح المنافذ الأساسية فقط (80/443) وقم بتقييد الوصول إلى SSH على العناوين المطلوبة.

sudo ufw allow 80,443/tcp
sudo ufw allow from 203.0.113.0/24 to any port 22 proto tcp  # مثال
sudo ufw enable

 

TLS والتصليد

 

الهجمات والحماية

استخدم fail2ban لحماية SSH والتحكم في معدل الطلبات في Nginx. استخدم خوادم مضادة لهجمات DDoS للتطبيقات الحساسة؛ تقدم شركتنا باقات مضادة لهجمات DDoS وشبكات توصيل المحتوى (CDN) مع بروتوكول BGP.

 

SELinux / AppArmor

في التوزيعات التي تدعم SELinux (مثل RHEL/CentOS)، تأكد من ضبط سياقات الملفات والمنافذ بشكل صحيح. أما في التوزيعات الأخرى، فاستخدم AppArmor لتحليل الأداء - لا يُنصح بإيقاف التشغيل الدائم.

 

تحسين الأداء ومراقبته

 

إعدادات ضبط وتوصيل جهاز Kestrel

استخدم بروتوكول HTTP/2 وخاصية Keep-Alive في طبقة الوكيل العكسي. ضع في اعتبارك قيود Kestrel في ملف appsettings.json قم بتعيين (على سبيل المثال، Limits.MaxConcurrentConnections، MaxRequestBodySize).

استخدم ضغط الاستجابة (Brotli/Gzip) لضغط الاستجابات:

services.AddResponseCompression(options => { options.EnableForHttps = true; });

 

المخازن والاجتماعات

استخدم Redis للتخزين المؤقت الموزع وحالة الجلسة لتمكين التوسع الأفقي. استخدم شبكة توصيل المحتوى (CDN) للمحتوى الثابت لتقليل حمل الخادم.

 

المراقبة والتسجيل

يمكنك دمج التسجيل المنظم مع Serilog أو Microsoft.Extensions.Logging وإرساله إلى ELK/Graylog. للحصول على المقاييس، استخدم dotnet-counters، ومُصدِّر Prometheus (dotnet_exporter)، وGrafana. يُعدّ نظام إدارة أداء التطبيقات (APM) مثل Application Insights مفيدًا للتتبع.

 

مقارنة المواقع واختيار الموقع المناسب بناءً على الطلب

في مجال التداول، يُعدّ انخفاض زمن الاستجابة (ping) والاستقرار من الأمور المهمة، لذا اختر موقعًا قريبًا من منصات التداول أو الشبكات الخاصة. أما في مجال الألعاب، فيُنصح باستخدام الخوادم الإقليمية وخوادم VPS المخصصة للألعاب المزودة بشبكة عالية السرعة.

للذكاء الاصطناعي والمعالجة الرسومية، استخدم خوادم الحوسبة السحابية المزودة بوحدات معالجة رسومية (GPU) وخوادم NVMe ذات النطاق الترددي العالي. أما بالنسبة للمواقع الإلكترونية والتطبيقات، فيُنصح باختيار مواقع قريبة من المستخدمين الرئيسيين، بالإضافة إلى الجمع بين شبكة توصيل المحتوى (CDN) وشبكة متعددة المناطق لضمان توافر أفضل. توفر شركتنا أكثر من 85 موقعًا عالميًا، بالإضافة إلى شبكة توصيل المحتوى (CDN) وشبكة بروتوكول بوابة الحدود (BGP).

 

قابلية عالية للتوسع والتوافر

استخدم موازن أحمال من الطبقة السابعة (مثل Nginx/HAProxy/Cloud LB) أو موازن أحمال مركز البيانات. خزّن الجلسات في Redis أو قاعدة بيانات مشتركة. وزّع الحاويات والأجهزة الافتراضية أفقيًا للتوسع التلقائي؛ واستخدم HPA في Kubernetes. استخدم BGP anycast وCDN لتوزيع حركة المرور عالميًا.

 

إصلاحات الأخطاء الشائعة

الحالات الشائعة وطرق الفحص:

  • 502 بوابة غير صالحة: تحقق من systemd باستخدام journalctl -u myappميناء محلي مع ss -tlnp وأذونات الملفات.
  • مشكلة في بروتوكول SSL: تحقق تجديد شهادة بوت، الوصول إلى مجلد الشهادة والإشارة إليه بشكل صحيح في Nginx.
  • أخطاء الملفات/الأذونات: تحقق من المالك/المجموعة الصحيحة لمستخدم الخدمة.
  • بطء غير متوقع: استخدم dotnet-counters و profiler للعثور على اختناقات وحدة المعالجة المركزية أو GC.

 

نصائح عملية للإنتاج (DevOps)

  • استخدم عمليات بناء Docker متعددة المراحل لتقليص حجم الصورة.
  • قم بتخزين الأسرار في مدير الأسرار (Vault، أسرار GitLab CI).
  • اكتب نقاط نهاية الصحة وقم بتكوين حالة الجاهزية/الحيوية للمنسق.
  • قم بتنفيذ عمليات البناء/الاختبار/النشر الآلية باستخدام GitLab CI أو GitHub Actions.

 

ملخص وعروض الخدمات

يُعدّ استضافة ASP.NET Core على نظام Linux خيارًا **قابلًا للتوسع، وآمنًا، وقابلًا للتطوير** لتطبيقات الويب وواجهات برمجة التطبيقات (API). ولضمان الأداء العالي والتوافر المستمر، يُنصح بنشر التطبيق باستخدام Kestrel + Nginx أو في حاوية مع مُنسق، مع الحرص على تطبيق بروتوكول TLS وتأمين النظام بشكل فعّال، واستخدام Redis/قاعدة بيانات لإدارة الحالة، واستخدام شبكة توصيل المحتوى (CDN) للمحتوى الثابت.

بفضل أكثر من 85 موقعًا عالميًا، وسحابة GPU، والحوسبة والخوادم المخصصة، وخوادم VPS للتداول والألعاب، وبنية تحتية مضادة لهجمات DDoS، واستضافة GitLab، وشبكة CDN، وشبكة BGP، تقدم شركتنا حلول الاستضافة والدعم لتطبيقات ASP.NET Core بخطط مختلفة.

قد يعجبك أيضاً