Поделиться через


Часть 2.1. Создание и настройка приложений ASP.NET Core в Linux

Область применения: .NET 8 и более поздних версий

В этой статье описывается создание и настройка приложений ASP.NET Core в Linux.

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

Чтобы выполнить упражнения, описанные в этой части, необходимо установить пакет SDK для .NET. Чтобы установить пакет SDK, ознакомьтесь с инструкциями по установке, приведенными в части 1.

Цель этой части

Узнайте, как создать веб-приложение ASP.NET Core с помощью интерфейса командной строки .NET в Linux и как опубликовать приложение в каталоге /var . По мере изучения этих понятий вы будете выполнять некоторые основные задачи, такие как работа с файлами и папками, а также выполнение команд в качестве привилегированного пользователя. Вы также узнаете, как редактировать файлы с помощью текстового редактора vi в Linux.

Интерфейс командной строки.NET

Согласно этой документации по .NET CLI, интерфейс командной строки .NET представляет собой кроссплатформенную цепочку инструментов для разработки, создания, запуска и публикации приложений .NET. Интерфейс командной строки .NET устанавливается вместе с пакетом SDK для .NET.

Эти учебные курсы часто используют dotnet команду. Эта команда мощна и имеет две основные функции:

  • Он предоставляет команды для работы с проектами .NET. Например, команда dotnet build выполняет построение проекта. Каждая команда определяет свои параметры и аргументы. Все команды поддерживают --help возможность печати кратких объяснений о том, как использовать команду.
  • Она запускает приложения .NET.

Вы будете dotnet new использовать команду для создания первого проекта ASP.NET Core в Linux. Эта команда получает тип проекта в качестве аргумента. Типы проектов описаны в этом документе. Вы также можете отобразить список типов, выполнив команду dotnet new без параметра. Типы проектов, связанные с веб-сайтом, выделены желтым цветом на следующем снимке экрана.

Снимок экрана: команда dotnet new.

Создание веб-приложения ASP.NET Core с помощью пакета SDK

Вы будете использовать интерфейс командной строки .NET для создания первого веб-приложения с помощью следующей команды:

dotnet new <template_type> -n <project_name> -o <output_directory>

Эти правила применяются при использовании dotnet new:

  • Команда создает файлы проекта в выходном каталоге. Если вы опустите -o <output_directory> сегмент, проект будет создан в текущем каталоге. Вы всегда можете использовать переключатель -o .
  • Если папка не существует, команда создает ее.
  • Если вы опустите -n <project_name> сегмент, имя проекта будет совпадать с именем каталога.

Вы можете найти творческие имена для самого каталога и проекта. Однако помните, что Linux учитывает регистр. Для этого упражнения используйте более консервативное AspNetCoreDemo имя проекта и создайте его в каталоге firstwebapp .

Чтобы создать проект, выполните следующую команду:

dotnet new webapp -n AspNetCoreDemo -o firstwebapp 

Просмотрите выходные данные, чтобы просмотреть имена каталогов и проектов. На следующем снимка экрана также перечислены содержимое выходного каталога. Если вы создали веб-приложение ASP.NET Core в Windows, необходимо ознакомиться со структурой каталогов.

Снимок экрана: команда dotnet new для первого веб-приложения.

Вы создали свое первое приложение. Следующая задача будет выполняться. Измените каталог на папку проекта и запустите dotnet runего.

Снимок экрана: команда dotnet run.

Примечание.

Следующие элементы на этом снимке экрана:

  • Веб-приложение прослушивает порт 5001 для HTTPS-запросов и прослушивает порт 5000 для HTTP-запросов.
  • Корневой каталог содержимого находится в домашнем каталоге.

Рекомендуется не запускать приложение в домашнем каталоге. Вы опубликуете его в другом каталоге позже, но перед публикацией необходимо протестировать его. Чтобы остановить приложение, нажмите клавиши CTRL+C . Но на данный момент сохраните его работу и откройте новый сеанс терминала с помощью предпочтительного метода для подключения к виртуальной машине Linux. В этом примере вы снова будете использовать PowerShell.

Тестирование веб-сайта из другого терминала

В новом сеансе терминала убедитесь, что приложение прослушивает порты 5000 и 5001. Linux имеет ту же netstat команду, что и Windows. Запустите netstat вместе с коммутатором -tlp . Вы можете ознакомиться с netstat параметрами, описанными в этой статье, или просмотреть файл справки, выполнив или info netstatвыполнив man netstat команду.

Ниже приведены выходные данные netstat -tlp команды из второго сеанса терминала. В нем показано, что процесс AspNetCoreDemo выполняется с помощью PID 781 и прослушивает порты 5000 и 5001 для IPv4 и IPv6.

Снимок экрана: команда info netstat.

Для тестирования веб-сайта можно использовать curl и wget . Обе команды выполняют HTTP-вызов к целевой стороне, но они ведут себя по-разному:

  • Curl — это просто средство браузера командной строки. Он выполняет HTTP-запрос к заданному целевому объекту и отображает только обычные выходные данные HTTP-ответа. Например, в нем показана разметка источника HTML для веб-приложения.
  • Wget — это загрузчик HTTP. Он выполняет HTTP-запрос и загружает заданный ресурс. Например, wget http://server/file.zip загружает file.zip из http://server и сохраняет его в текущем каталоге.

Команда wget также содержит дополнительные сведения, такие как перенаправление и любые сообщения об ошибках, которые вы можете получить. Поэтому его можно использовать как примитивную версию средства трассировки HTTP всякий раз, когда это необходимо.

Дополнительные сведения о разнице между curl и wget, перейдите на веб-страницу StackExchange.

В этой серии обучения вы ранее использовались wget для скачивания файла диспетчера пакетов .deb с серверов Майкрософт перед установкой .NET.

При выполнении curl http://localhostничего не происходит. Это, скорее всего, означает, что нет HTTP-ответа. Затем можно запустить wget http://localhost , чтобы проверить, отображается ли дополнительная информация при попытке доступа к сайту.

Снимок экрана: команда curl localhost.

Это то, что происходит сейчас:

  • Вы выполняете HTTP-запрос http://localhost:5000и успешно подключаетесь. Это означает, что приложение принимает подключения через порт 5000.
  • Вы получаете ответ HTTP 307 Временного перенаправления от приложения, указывающего на безопасное расположение HTTPS: https://localhost:5001
  • Wget достаточно умный, чтобы следовать этому перенаправлению и сделать новый запрос.https://localhost:5001
  • Вы успешно подключитесь. wget Однако не доверяет SSL-сертификату. Поэтому подключение завершается ошибкой.

Команда wget рекомендует обойти эту проблему с помощью --no-check-certificate переключателя для небезопасного подключения. Однако этот подход включает параметры SSL-сертификата, которые являются устаревшими для этого обучения. Вместо этого можно настроить приложение ASP.NET Core, чтобы оно не перенаправляло HTTP-запросы на HTTPS. Если вы знакомы с разработкой приложений ASP.NET Core (или просто конфигурацией), измените файл Startup.cs , чтобы удалить конфигурацию перенаправления.

Изменение файлов с помощью vi

Вы можете использовать текстовый редактор vi для дистрибутивов Linux для редактирования всех типов текстовых файлов. Вы будете использовать его в этом обучении для перенастройки приложения.

Прежде чем его изменить, необходимо закрыть приложение. Сначала закройте открытый сеанс терминала. Затем нажмите клавиши CTRL+C , чтобы завершить работу приложения.

Чтобы изменить файл Startup.cs , выполните следующую команду:

vi ~/firstwebapp/Startup.cs

Примечание.

Эта команда запускает редактор vi, а затем загружает файл. Ярлык ~ (tilde) относится к домашнему каталогу, в котором вы создали проект. То есть команда указывает на /home/YourName>/<firstwebapp/Startup.cs.

Нажмите клавишу I (Insert), чтобы включить режим редактирования. Теперь вы увидите - - INSERT - в нижней части командной строки. Используйте клавиши со стрелками для перехода в файл. Закомментируйте как строки, так app.UseHsTs()и app.UseHttpsRedirection()строки, добавив // их в начало, как показано на следующем снимке экрана.

Снимок экрана: комментарий в коде.

Нажмите клавишу ESC , чтобы выйти из режима редактирования, введите :wq!, а затем нажмите клавишу ВВОД. Обратите внимание, что символ двоеточия (:) означает, что вы вводите команду, означает запись, wq означает выход и ! принудительное написание.

Снимок экрана: текст wq в коде.

После нажатия клавиши ВВОД изменения должны сохраняться. Вы можете проверить изменения, выполнив команду cat ~/firstwebapp/Startup.cs. Эта команда отображает содержимое файла Startup.cs .

Перезапустите приложение. Для этого измените текущий ~/firstwebapp каталог на каталог и снова запустите его dotnet run . Затем откройте другой сеанс терминала на сервере и снова запустите curl http://localhost:5000 команду. На этот раз команда должна вернуть HTML-содержимое домашней страницы.

Снимок экрана: curl localhost в команде порта 5000.

Теперь вы успешно выполнили свой первый ASP.NET Core Web App в Linux.

Развертывание приложения в каталоге /var

Основной целью этого упражнения является размещение веб-приложения за обратным прокси-сервером, чтобы подключение клиентов могли получить доступ к приложению с другого компьютера, используя только имя узла без номера порта. Это то, что вы ожидаете, что произойдет в реальных сценариях. Позже вы будете работать с Nginx, чтобы завершить эту задачу. Но перед этим опубликуйте приложение в каталоге /var . Это связано с тем, что мы рекомендуем не запускать приложение в домашнем каталоге пользователя.

Помните, что каталог /var используется для хранения содержимого и файлов журналов различными приложениями, такими как Apache и Nginx. Вы будете следовать этой практике, публикуя только что созданное веб-приложение в /var.

Перейдите в папку проекта и выполните команду dotnet publish , чтобы создать папку публикации. Скопируйте папку в каталог /var .

Снимок экрана: команда публикации dotnet.

На снимке экрана показано, что dotnet publish команда создала файлы публикации в папке ~/firstwebapp/bin/Debug/net5.0/publish/ . Затем следующая команда использовалась для копирования всех файлов в папку /var/firstwebapp/ :

sudo cp -a ~/firstwebapp/bin/Debug/net5.0/publish/ /var/firstwebapp/

Примечание.

Обратите внимание на использование sudo перед командой копирования. Это связано с тем, что у стандартных пользователей нет разрешения на запись в каталог /var . Поэтому необходимо выполнить команду в качестве суперпользователя.

Чтобы запустить приложение из опубликованной папки, выполните следующую команду:

dotnet /var/firstwebapp/AspNetCoreDemo.dll

Если вы хотите, эти тесты можно запустить с помощью одних и wget таких же curl команд. Это связано с тем, что приложение по-прежнему будет прослушивать порт 5000 для HTTP-запросов.

Время существования процесса и дальнейших шагов

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

  • Если пользователи будут завершать сеансы, например закрыв puTTY или клиент PowerShell SSH или выход из сеанса, приложение завершит работу.
  • Если процесс завершается по какой-то причине (например, процесс завершается из-за необработанного исключения), он не запускается автоматически и должен быть перезапущен вручную.
  • Если сервер перезапущен, приложение не запустится автоматически.

Следующие шаги

Часть 2.2. Установка Nginx и настройка его в качестве обратного прокси-сервера

Убедитесь, что веб-приложение запускается автоматически. Установите и настройте Nginx в качестве обратного прокси-сервера для маршрутизации HTTP-запросов, которые выполняются через порт 80 в приложение dotnet (чтобы клиенты могли подключаться без необходимости предоставлять номер порта).

Заявление об отказе от ответственности за сведения о продуктах сторонних производителей

В этой статье упомянуты программные продукты независимых производителей. Корпорация Майкрософт не дает никаких гарантий, подразумеваемых и прочих, относительно производительности и надежности этих продуктов.