- Размещение ASP.NET Core на Linux — зачем и когда?
- Предварительные условия и выбор сервера
- Базовая установка и настройка (среда выполнения .NET) — пример для Ubuntu
- Развертывание без контейнеров — Kestrel + systemd + Nginx
- Развертывание с помощью Docker и Docker Compose
- Безопасность и передовые методы
- Оптимизация и мониторинг производительности
- Сравнение местоположений и выбор подходящего варианта в зависимости от задачи.
- Высокая масштабируемость и доступность
- Исправление распространенных ошибок
- Практические советы для внедрения в производство (DevOps)
- Краткое описание и предложения услуг
Размещение 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 с различными тарифными планами.









