Полное руководство по размещению 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
  1. Размещение ASP.NET Core на Linux — зачем и когда?
  2. Предварительные условия и выбор сервера
    1. Дистрибутив Linux и версия .NET
    2. Аппаратные ресурсы и тип обслуживания
  3. Базовая установка и настройка (среда выполнения .NET) — пример для Ubuntu
  4. Развертывание без контейнеров — Kestrel + systemd + Nginx
    1. Опубликуйте приложение и настройте systemd.
    2. Настройка Nginx в качестве обратного прокси (завершение SSL-соединения)
  5. Развертывание с помощью Docker и Docker Compose
  6. Безопасность и передовые методы
    1. Сетевой и межсетевой экран
    2. TLS и закалка
    3. Нападения и защита
    4. SELinux / AppArmor
  7. Оптимизация и мониторинг производительности
    1. Настройка и параметры подключения Kestrel
    2. Кэш и встречи
    3. Мониторинг и ведение журналов
  8. Сравнение местоположений и выбор подходящего варианта в зависимости от задачи.
  9. Высокая масштабируемость и доступность
  10. Исправление распространенных ошибок
  11. Практические советы для внедрения в производство (DevOps)
  12. Краткое описание и предложения услуг

 

Размещение ASP.NET Core на Linux — зачем и когда?

ASP.NET Core хорошо работает на Linux с *Kestrel*, и выбор этой платформы для хостинга может предоставить важные преимущества, в том числе: Снижение затрат, совместимость с инструментами с открытым исходным кодом и простота контейнеризации. Этот вариант подходит для веб-сайтов, API, фоновых служб и приложений, чувствительных к задержкам, таких как игры и торговля.

 

Предварительные условия и выбор сервера

 

Дистрибутив Linux и версия .NET

В качестве рекомендуемых распределений можно использовать: Ubuntu LTS (20.04/22.04), Debian (11/12), и CentOS Stream или Rocky/Alma Они предназначены для производства. Для сред со строгими требованиями к безопасности. РХЕЛЬ Используйте официальную среду выполнения и SDK Microsoft (например, .NET 6/7/8).

 

Аппаратные ресурсы и тип обслуживания

Для веб-сайтов и легковесных API обычно 1-2 виртуальных процессора, 1-4 ГБ оперативной памяти и NVMe SSD Достаточно. Для бизнеса и ресурсоемких приложений... 4+ виртуальных процессора и 8+ ГБ оперативной памяти И им нужна высокоскоростная сеть.

Для торговли и игр с низким пингом. Лучше всего выбирать локализованные VPS-серверы рядом с биржей или региональным центром обработки данных. У нашей компании более 85 представительств по всему миру, что позволяет легко выбрать ближайший центр обработки данных.

Используйте графические серверы (GPU) для искусственного интеллекта/вывода данных или рендеринга; наша компания предоставляет облачный сервис GPU и вычислительные серверы с высокоскоростной сетью.

Для защиты от атак рассмотрите возможность использования анти-DDoS-сервера и сети с протоколами BGP и CDN.

 

Базовая установка и настройка (среда выполнения .NET) — пример для Ubuntu

Для установки официальной среды выполнения Microsoft добавьте репозиторий, а затем установите среду выполнения:

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.

 

Сравнение местоположений и выбор подходящего варианта в зависимости от задачи.

Для торговли важны низкий пинг и стабильность — выбирайте местоположение рядом с биржами или частными сетями. Для игр рекомендуются региональные серверы и игровые VPS с высокоскоростным подключением.

Для ИИ и рендеринга используйте облачные вычислительные центры с графическими процессорами и NVMe-серверами, обеспечивающими высокую пропускную способность. Для веб-сайтов и приложений рекомендуется размещение вблизи основных пользователей, а также сочетание CDN и многорегиональной инфраструктуры для повышения доступности. Наша компания предлагает более 85 локаций по всему миру, а также сети CDN и BGP.

 

Высокая масштабируемость и доступность

Используйте балансировщик нагрузки уровня 7 (Nginx/HAProxy/Cloud LB) или балансировщик нагрузки в центре обработки данных. Храните сессии в Redis или общей базе данных. Горизонтально масштабируйте контейнеры и виртуальные машины для автоматического масштабирования; используйте HPA в Kubernetes. Используйте BGP anycast и CDN для глобального распределения трафика.

 

Исправление распространенных ошибок

Типичные случаи и методы обследования:

  • 502 Bad Gateway: Check systemd with journalctl -u myappместный порт с ss -tlnp и права доступа к файлам.
  • Проблема с SSL: Проверьте certbot renewдоступ к папке с сертификатами и корректное указание ссылки на нее в Nginx.
  • Ошибки файлов/прав доступа: проверьте правильность владельца/группы для пользователя службы.
  • Неожиданное замедление работы: используйте dotnet-counters и profiler для выявления узких мест, связанных с процессором или сборщиком мусора.

 

Практические советы для внедрения в производство (DevOps)

  • Используйте многоэтапную сборку Docker для уменьшения размера образа.
  • Храните секреты в менеджере секретов (Vault, GitLab CI secrets).
  • Напишите конечные точки проверки работоспособности и настройте проверку работоспособности/готовности оркестратора.
  • Автоматизируйте сборку, тестирование и развертывание с помощью GitLab CI или GitHub Actions.

 

Краткое описание и предложения услуг

Размещение ASP.NET Core на Linux — это **масштабируемый, безопасный и расширяемый** вариант для веб-приложений и API-приложений. Для обеспечения высокой производительности и доступности рекомендуется развертывать приложение с помощью Kestrel + Nginx или в контейнере с оркестратором, серьезно отнестись к TLS и усилению безопасности, использовать Redis/DB для хранения состояния и CDN для статического контента.

Наша компания, располагающая более чем 85 представительствами по всему миру, облачными сервисами GPU, вычислительными и выделенными серверами, VPS для торговли и игр, инфраструктурой защиты от DDoS-атак, хостингом GitLab, CDN и сетью BGP, предлагает решения для хостинга и поддержки приложений ASP.NET Core с различными тарифными планами.

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

Настройка сервера FiveM/игрового сервера GTA V

Содержание Общее введение Предварительные требования к оборудованию и советы Подготовка сервера (пользователь, обновления, пакеты) Загрузка последней версии (рекомендуется) FXServer (метод…