The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



"Раздел полезных советов: Развёртывание приложений .NET/ASP.NET Core  в Ubuntu 20.04 с Nginx"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Изначальное сообщение [ Отслеживать ]

"Раздел полезных советов: Развёртывание приложений .NET/ASP.NET Core  в Ubuntu 20.04 с Nginx"  +2 +/
Сообщение от auto_tips (ok), 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.dev/tips/info/3149.shtml

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения [Сортировка по ответам | RSS]

1. Сообщение от sovicUA (ok), 23-Июн-20, 10:15   +/
Хм, а зачем Nginx? Там же есть Kestrel, и он у вас на 5000 порту, кто мешает его на 80 поднять?
Ответить | Правка | Наверх | Cообщить модератору
Ответы: #2, #3, #5, #6, #10

2. Сообщение от m.makhno (ok), 23-Июн-20, 12:00   +1 +/
дело привычки, по всей видимости (:
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #1

3. Сообщение от эксперт по всему (?), 23-Июн-20, 15:58   +1 +/
ну например, чтобы делать какие-то преобразования заголовков, добавить http-auth, сделать редиректы и т.п., какие-нибудь рейт-лимиты настроить
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #1 Ответы: #7

4. Сообщение от Аноним (-), 24-Июн-20, 14:19   +1 +/
> Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false

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

Ответить | Правка | Наверх | Cообщить модератору
Ответы: #8

5. Сообщение от Аноним (5), 24-Июн-20, 21:51   +1 +/
Потому что страшно таким голым задом торчать в интернеты. :)
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #1

6. Сообщение от Dimez (ok), 25-Июн-20, 19:00   +1 +/
Если уж приходится микрософтовские поделки в интернет выпускать (iis, exchange, sharepoint, etc), то только за nginx/postfix/etc с полным контролем всего :)
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #1

7. Сообщение от sovicUA (ok), 26-Июн-20, 06:20   +/
> ну например, чтобы делать какие-то преобразования заголовков, добавить http-auth, сделать
> редиректы и т.п., какие-нибудь рейт-лимиты настроить

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

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

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #3

8. Сообщение от Аноним (5), 03-Июл-20, 18:10   +/
А знаешь, в чем главный прикол?

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

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #4

9. Сообщение от Аноним (9), 21-Июл-20, 23:00   +/
Мне кажется это бред. Nginx совершенно не должен работать с каталогом приложения. Он подключается к приложению по HTTP.
>>Для

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

Ответить | Правка | Наверх | Cообщить модератору

10. Сообщение от Неа (?), 05-Авг-20, 06:50   +1 +/
Kestrel неплох для девелопмента, на продакшене он сдохнет.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #1

11. Сообщение от Ns (?), 17-Авг-20, 10:10   +/
Да заверни ты все в Docker и запусти как человек
Ответить | Правка | Наверх | Cообщить модератору
Ответы: #12

12. Сообщение от НямНямка (?), 09-Ноя-20, 17:31   +/
Вот зачем? В чём смысл? Докер это просто chroot. Зачем с ним мудохаться?
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #11


Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру