URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID3
Нить номер: 121026
[ Назад ]

Исходное сообщение
"Раздел полезных советов: Развёртывание приложений .NET/ASP.NET Core  в Ubuntu 20.04 с Nginx"

Отправлено auto_tips , 23-Июн-20 10:15 
Данное руководство носит образовательный характер, и предназначено для тех - кто ни разу не запускал  приложения ASP.Net на сервере. Для больших, сложных и серьёзных проектов не годится, так как не учтены все нюансы развёртывания и настройки безопасности.

++ Этапы развертывания приложений на сервере Ubuntu 20.04

*** Сервер и соединение
*** Установка .net Core + ASP.net Core
*** Сборка приложения
*** Nginx и всё что с ним связано
*** Сервис приложения
*** Настройка прав пользователя

++ Сервер и соединение

Для того что бы развернуть приложение на .NET Core нам необходима виртуальная машина на Ubuntu - на ней мы и запустим наше первое приложение. Подключиться можно через SSH

++ Установка .net Core + ASP.net Core

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

   wget https://packages.microsoft.com/config/ubuntu/20.04/packages-... -O packages-microsoft-prod.deb
   sudo dpkg -i packages-microsoft-prod.deb

Установка пакетов

   sudo apt-get update
   sudo apt-get install -y apt-transport-https
   sudo apt-get update
   sudo apt-get install -y dotnet-sdk-3.1
   sudo apt-get install -y aspnetcore-runtime-3.1

++ Сборка приложения

На этом этапе нам нужно скомпилировать приложение и получить исполняемые файлы которые мы будем запускать в виртуальной машине.

Создадим проект

   dotnet new webapp -o ProjectName
   cd ProjectName

Сборка приложения

   dotnet publish --configuration Release

В итоге мы получим в каталоге проекта по пути /bin/Release/ исполняемые файлы приложения.

++ Nginx и всё что с ним связано

Установка пакетов

   sudo apt install nginx
   sudo service nginx start

В браузере должна открыться стартовая страница Nginx по умолчанию. Целевая страница доступна по адресу http://server_IP_address

Настройка конфигурации

Для того чтобы настроить сервер так как нам нужно необходимо отредактировать конфиг Nginx в директории /etc/nginx/sites-available/

sudo vi /etc/nginx/sites-available/default

   server {
       listen        80;
       server_name   example.com *.example.com;
       location / {
           proxy_pass         http://localhost: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;
       }
   }

++ Сервис приложения

Создайте файл определения службы.

   sudo vi /etc/systemd/system/dotnetapp.service

Добавляем конфигурацию сервиса

   [Unit]
   Description=Example .NET Web API App running on Ubuntu

   [Service]
   WorkingDirectory=/var/www/helloapp
   ExecStart=/usr/bin/dotnet /var/www/helloapp/helloapp.dll
   Restart=always
   # Restart service after 10 seconds if the dotnet service crashes:
   RestartSec=10
   KillSignal=SIGINT
   SyslogIdentifier=dotnet-example
   User=www-data
   Environment=ASPNETCORE_ENVIRONMENT=Production
   Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false

   [Install]
   WantedBy=multi-user.target

Запуск сервиса

   sudo systemctl enable dotnetapp.service

Проверка статуса сервиса

   sudo systemctl status dotnetapp.service

Перезапуск сервиса

   sudo systemctl restart dotnetapp.service

Daemon reload

   sudo systemctl daemon-reload

++ Настройка прав пользователя

Группа www-data

Пользователь (www-data) должен существовать и иметь права владельца в отношении файлов приложения. www-data создаётся автоматически при установке Nginx. Для того чтобы Nginx мог работать с каталогом нашего приложения нужно каталогу присвоить права пользователя www-data.

   sudo chown username:www-data /var/www/ -R
   sudo systemctl restart dotnetapp.service
   sudo chown -R www-data:username /var/www/*
   sudo systemctl status dotnetapp.service

URL: https://docs.google.com/document/d/1BfPRdjGO87BiEgxyXvRAzoOd...
Обсуждается: http://www.opennet.me/tips/info/3149.shtml


Содержание

Сообщения в этом обсуждении
"Развёртывание приложений .NET/ASP.NET Core  в Ubuntu 20.04 с Nginx"
Отправлено sovicUA , 23-Июн-20 10:15 
Хм, а зачем Nginx? Там же есть Kestrel, и он у вас на 5000 порту, кто мешает его на 80 поднять?

"Развёртывание приложений .NET/ASP.NET Core  в Ubuntu 20.04 с Nginx"
Отправлено m.makhno , 23-Июн-20 12:00 
дело привычки, по всей видимости (:

"Развёртывание приложений .NET/ASP.NET Core  в Ubuntu 20.04 с Nginx"
Отправлено эксперт по всему , 23-Июн-20 15:58 
ну например, чтобы делать какие-то преобразования заголовков, добавить http-auth, сделать редиректы и т.п., какие-нибудь рейт-лимиты настроить

"Развёртывание приложений .NET/ASP.NET Core  в Ubuntu 20.04 с Nginx"
Отправлено sovicUA , 26-Июн-20 06:20 
> ну например, чтобы делать какие-то преобразования заголовков, добавить http-auth, сделать
> редиректы и т.п., какие-нибудь рейт-лимиты настроить

Тогда уж все надо модно-молодежно завернуть все в контейнер и не засорять систему МС либами и всякой всячиной. И сборку приложения в том же контейнере делать. А прикрыть Nginx|HAProxy, кому что нравится :)

З.Ы. Kestrel умеет не только базовую авторизацию делать но и по сертификату даже... Но для этого у разработчика должны быть ручки а не лапки :)


"Развёртывание приложений .NET/ASP.NET Core  в Ubuntu 20.04 с Nginx"
Отправлено Аноним , 24-Июн-20 21:51 
Потому что страшно таким голым задом торчать в интернеты. :)

"Развёртывание приложений .NET/ASP.NET Core  в Ubuntu 20.04 с Nginx"
Отправлено Dimez , 25-Июн-20 19:00 
Если уж приходится микрософтовские поделки в интернет выпускать (iis, exchange, sharepoint, etc), то только за nginx/postfix/etc с полным контролем всего :)

"Развёртывание приложений .NET/ASP.NET Core  в Ubuntu 20.04 с Nginx"
Отправлено Неа , 05-Авг-20 06:50 
Kestrel неплох для девелопмента, на продакшене он сдохнет.

"Развёртывание приложений .NET/ASP.NET Core  в Ubuntu 20.04 с Nginx"
Отправлено Аноним , 24-Июн-20 14:19 
> Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false

Что, у мс и в этом телеконтроль встроен? Зондотехнология, блин :)


"Развёртывание приложений .NET/ASP.NET Core  в Ubuntu 20.04 с Nginx"
Отправлено Аноним , 03-Июл-20 18:10 
А знаешь, в чем главный прикол?

Оно не отключает телеметрию. Оно отключает сообщение с предупреждением о том, что собирается телеметрия!


"Развёртывание приложений .NET/ASP.NET Core  в Ubuntu 20.04 с Nginx"
Отправлено Аноним , 21-Июл-20 23:00 
Мне кажется это бред. Nginx совершенно не должен работать с каталогом приложения. Он подключается к приложению по HTTP.
>>Для

того чтобы Nginx мог работать с каталогом нашего приложения нужно каталогу
присвоить права пользователя www-data.


"Развёртывание приложений .NET/ASP.NET Core  в Ubuntu 20.04 с Nginx"
Отправлено Ns , 17-Авг-20 10:10 
Да заверни ты все в Docker и запусти как человек

"Развёртывание приложений .NET/ASP.NET Core  в Ubuntu 20.04 с Nginx"
Отправлено НямНямка , 09-Ноя-20 17:31 
Вот зачем? В чём смысл? Докер это просто chroot. Зачем с ним мудохаться?