Полное руководство по размещению 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 را با پلن‌های مختلف ارائه می‌دهد.

Вам также может понравиться

Основы UFW: общие правила и команды брандмауэра для безопасности Linux

Основы UFW: общие правила и команды брандмауэра для обеспечения безопасности Linux Введение UFW (Unified Firewall) — это инструмент командной строки…