الدليل الكامل لاستضافة ASP.NET Core على نظام Linux
مراحل و نکات مهم برای استقرار امن و بهینه برنامه‌های ASP.NET Core در لینوکس با استفاده از Kestrel و Nginx

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

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

 

میزبانی ASP.NET Core روی لینوکس — چرا و چه زمانی؟

ASP.NET Core روی لینوکس با *Kestrel* به‌خوبی اجرا می‌شود و انتخاب این پلتفرم برای میزبانی می‌تواند مزایای مهمی از جمله کاهش هزینه‌، سازگاری با ابزارهای متن‌باز و سهولت در کانتینری‌سازی فراهم کند. این گزینه برای وب‌سایت‌ها، APIها، سرویس‌های پس‌زمینه و اپلیکیشن‌های حساس به تأخیر مثل گیم و ترید مناسب است.

 

پیش‌نیازها و انتخاب سرور

 

تووزیع لینوکس و نسخه .NET

توزیع‌های پیشنهادی شامل Ubuntu LTS (20.04/22.04)، Debian (11/12)، و CentOS Stream یا Rocky/Alma برای تولید هستند. برای محیط‌های با امنیت سخت‌گیرانه از RHEL استفاده کنید. از runtime و SDK رسمی مایکروسافت (مثلاً .NET 6/7/8) بهره ببرید.

 

منابع سخت‌افزاری و نوع سرویس

برای وب‌سایت‌ها و APIهای سبک معمولاً 1-2 vCPU، 1-4GB RAM و NVMe SSD کافی است. برنامه‌های تجاری و سنگین به 4+ vCPU و 8+ GB RAM و شبکه پرسرعت نیاز دارند.

برای ترید و گیمینگ با پینگ پایین بهتر است VPSهای لوکالیزه در نزدیکی صرافی یا دیتاسنتر منطقه‌ای انتخاب شوند. شرکت ما 85+ لوکیشن جهانی دارد که انتخاب نزدیک‌ترین دیتاسنتر را آسان می‌کند.

برای AI/Inference یا رندرینگ از سرورهای گرافیکی (GPU) استفاده کنید؛ شرکت ما سرویس GPU Cloud و سرور محاسباتی با شبکه پرسرعت ارائه می‌دهد.

برای محافظت از حملات، سرور ضد DDoS و شبکه‌ای با BGP و CDN را در نظر بگیرید.

 

نصب و راه‌اندازی پایه (.NET runtime) — مثال برای Ubuntu

برای نصب runtime رسمی مایکروسافت مخزن را اضافه و سپس runtime را نصب کنید:

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

نمونه‌ی unit file برای 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 به‌عنوان reverse proxy (SSL termination)

نصب 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 برای بیلد، تست و دپلوی ایمیج به رجیستری و سپس pull روی سرور استفاده کنید. شرکت ما میزبانی 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 و از rate-limiting در Nginx استفاده کنید. برای اپلیکیشن‌های حساس از سرورهای ضد DDoS بهره ببرید؛ شرکت ما بسته‌های ضد DDoS و CDN با BGP ارائه می‌دهد.

 

SELinux / AppArmor

در توزیع‌هایی که SELinux فعال است (RHEL/CentOS)، اطمینان حاصل کنید که contextها برای فایل‌ها و پورت‌ها درست تنظیم شده‌اند. در دیگر توزیع‌ها از AppArmor برای پروفایلینگ استفاده کنید — خاموش کردن دائمی توصیه نمی‌شود.

 

بهینه‌سازی عملکرد و مانیتورینگ

 

Kestrel tuning و تنظیمات کانکشن

از HTTP/2 و Keep-Alive در لایه‌ی reverse proxy استفاده کنید. محدودیت‌های Kestrel را در appsettings.json تنظیم نمایید (مثلاً Limits.MaxConcurrentConnections، MaxRequestBodySize).

برای فشرده‌سازی پاسخ‌ها از response compression (Brotli/Gzip) استفاده کنید:

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

 

کش و جلسه‌ها

برای distributed cache و session state از Redis استفاده کنید تا امکان اسکیل افقی فراهم شود. برای محتوای استاتیک از CDN بهره ببرید تا بار سرور کاهش یابد.

 

مانیتورینگ و لاگ

لاگینگ ساختاریافته را با Serilog یا Microsoft.Extensions.Logging ترکیب کرده و به ELK/Graylog ارسال کنید. برای متریک‌ها از dotnet-counters، Prometheus exporter (dotnet_exporter) و Grafana استفاده کنید. APM مثل Application Insights برای ترسینگ مفید است.

 

مقایسه لوکیشن‌ها و انتخاب مناسب بر اساس کاربرد

برای ترید، پینگ پایین و ثبات اهمیت دارد — لوکیشن نزدیک به صرافی‌ها یا شبکه‌های خصوصی را انتخاب کنید. برای گیم سرورهای منطقه‌ای و VPS مخصوص گیم با شبکه پرسرعت توصیه می‌شود.

برای AI و رندرینگ از GPU Cloud و سرورهای محاسباتی با NVMe و پهنای باند بالا استفاده کنید. برای وب‌سایت‌ها و اپ‌ها لوکیشن نزدیک کاربران اصلی و ترکیب CDN و چند-منطقه‌ای برای دسترس‌پذیری بهتر پیشنهاد می‌شود. شرکت ما 85+ لوکیشن جهانی و CDN و شبکه‌ی BGP ارائه می‌دهد.

 

مقیاس‌پذیری و دسترس‌پذیری بالا

از لود بالانسر لایه 7 (Nginx/HAProxy/Cloud LB) یا LB دیتاسنتر استفاده کنید. Sessionها را در Redis یا دیتابیس مشترک نگهداری کنید. برای Auto-scaling کانتینرها و VMها را افقی کنید؛ در Kubernetes از HPA استفاده نمایید. برای توزیع جهانی ترافیک از BGP anycast و CDN بهره بگیرید.

 

رفع اشکال رایج

موارد معمول و روش بررسی:

  • 502 Bad Gateway: بررسی systemd با journalctl -u myapp، پورت محلی با ss -tlnp و مجوز فایل‌ها.
  • مشکل SSL: بررسی certbot renew، دسترسی به فولدر cert و ارجاع درست در Nginx.
  • خطاهای فایل/پرمیشن: owner/group صحیح برای کاربر سرویس را بررسی کنید.
  • کندی غیرمنتظره: از dotnet-counters و profiler برای یافتن گلوگاه‌های CPU یا GC استفاده کنید.

 

نکات عملی برای تولید (DevOps)

  • از multi-stage Docker builds برای کوچک‌سازی ایمیج استفاده کنید.
  • Secrets را در مدیریت رموز (Vault، GitLab CI secrets) نگهداری کنید.
  • نقاط سلامتی (health endpoints) بنویسید و liveness/readiness را برای orchestrator پیکربندی کنید.
  • اتوماسیون build/test/deploy را با GitLab CI یا GitHub Actions انجام دهید.

 

خلاصه و پیشنهادهای سرویس

Hosting ASP.NET Core on Linux گزینه‌ای **مقیاس‌پذیر، امن و قابل توسعه** برای اپلیکیشن‌های وب و API است. برای عملکرد و دسترس‌پذیری بالا توصیه می‌شود اپ را با Kestrel + Nginx یا در کانتینر و با orchestrator مستقر کنید، TLS و هاردنینگ را جدی بگیرید، از Redis/DB برای state استفاده کنید و CDN را برای محتوای استاتیک به‌کار ببرید.

شرکت ما با بیش از 85 لوکیشن جهانی، سرور گرافیکی (GPU Cloud)، سرورهای محاسباتی و اختصاصی، VPS مخصوص ترید و گیم، زیرساخت ضد DDoS، میزبانی GitLab، CDN و شبکه BGP، راهکارهای میزبانی و پشتیبانی برای اپلیکیشن‌های ASP.NET Core را با پلن‌های مختلف ارائه می‌دهد.

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