- میزبانی ASP.NET Core روی لینوکس — چرا و چه زمانی؟
- پیشنیازها و انتخاب سرور
- نصب و راهاندازی پایه (.NET runtime) — مثال برای Ubuntu
- استقرار بدون کانتینر — Kestrel + systemd + Nginx
- استقرار با Docker و Docker Compose
- امنیت و بهترین رویهها
- بهینهسازی عملکرد و مانیتورینگ
- مقایسه لوکیشنها و انتخاب مناسب بر اساس کاربرد
- مقیاسپذیری و دسترسپذیری بالا
- رفع اشکال رایج
- نکات عملی برای تولید (DevOps)
- خلاصه و پیشنهادهای سرویس
میزبانی 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 Place:
[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 Place:
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 را با پلنهای مختلف ارائه میدهد.









