The OpenNET Project / Index page

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

Развёртывание приложений .NET/ASP.NET Core в Ubuntu 20.04 с Nginx
Данное руководство носит образовательный характер, и предназначено для тех -
кто ни разу не запускал  приложения 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-microsoft-prod.deb -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
  •  
    16.06.2020 , Автор: Артём Конкин , Источник: https://docs.google.com/document/d/...
    Ключи: dotnet, aspnet, mono, ubuntu, nginx
    Раздел:    Корень / Администратору / Сетевые сервисы / WWW, Apache httpd / Редирект, mod_rewrite

    Обсуждение [ Линейный режим | Показать все | RSS ]
  • 1.1, sovicUA (ok), 10:15, 23/06/2020 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Хм, а зачем Nginx? Там же есть Kestrel, и он у вас на 5000 порту, кто мешает его на 80 поднять?
     
     
  • 2.2, m.makhno (ok), 12:00, 23/06/2020 [^] [^^] [^^^] [ответить]  
  • +1 +/
    дело привычки, по всей видимости (:
     
  • 2.3, эксперт по всему (?), 15:58, 23/06/2020 [^] [^^] [^^^] [ответить]  
  • +1 +/
    ну например, чтобы делать какие-то преобразования заголовков, добавить http-auth, сделать редиректы и т.п., какие-нибудь рейт-лимиты настроить
     
     
  • 3.7, sovicUA (ok), 06:20, 26/06/2020 [^] [^^] [^^^] [ответить]  
  • +/
    > ну например, чтобы делать какие-то преобразования заголовков, добавить http-auth, сделать
    > редиректы и т.п., какие-нибудь рейт-лимиты настроить

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

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

     
  • 2.5, Аноним (5), 21:51, 24/06/2020 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Потому что страшно таким голым задом торчать в интернеты. :)
     
  • 2.6, Dimez (ok), 19:00, 25/06/2020 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Если уж приходится микрософтовские поделки в интернет выпускать (iis, exchange, sharepoint, etc), то только за nginx/postfix/etc с полным контролем всего :)
     
  • 2.10, Неа (?), 06:50, 05/08/2020 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Kestrel неплох для девелопмента, на продакшене он сдохнет.
     

  • 1.4, Аноним (-), 14:19, 24/06/2020 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    > Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false

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

     
     
  • 2.8, Аноним (5), 18:10, 03/07/2020 [^] [^^] [^^^] [ответить]  
  • +/
    А знаешь, в чем главный прикол?

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

     

  • 1.9, Аноним (9), 23:00, 21/07/2020 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Мне кажется это бред. Nginx совершенно не должен работать с каталогом приложения. Он подключается к приложению по HTTP.
    >>Для

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

     
  • 1.11, Ns (?), 10:10, 17/08/2020 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Да заверни ты все в Docker и запусти как человек
     
     
  • 2.12, НямНямка (?), 17:31, 09/11/2020 [^] [^^] [^^^] [ответить]  
  • +/
    Вот зачем? В чём смысл? Докер это просто chroot. Зачем с ним мудохаться?
     


     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




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

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