- استضافة ASP.NET Core على نظام Linux - لماذا ومتى؟
- المتطلبات الأساسية واختيار الخادم
- التثبيت والإعداد الأساسي (بيئة تشغيل .NET) - مثال لنظام أوبونتو
- نشر بدون حاويات - Kestrel + systemd + Nginx
- النشر باستخدام Docker و Docker Compose
- الأمن وأفضل الممارسات
- تحسين الأداء ومراقبته
- مقارنة المواقع واختيار الموقع المناسب بناءً على الطلب
- قابلية عالية للتوسع والتوافر
- إصلاحات الأخطاء الشائعة
- نصائح عملية للإنتاج (DevOps)
- ملخص وعروض الخدمات
استضافة 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 بخطط مختلفة.









