Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Область применения: .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
без параметра. Типы проектов, связанные с веб-сайтом, выделены желтым цветом на следующем снимке экрана.
Создание веб-приложения 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 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.
Для тестирования веб-сайта можно использовать curl и wget . Обе команды выполняют HTTP-вызов к целевой стороне, но они ведут себя по-разному:
-
Curl
— это просто средство браузера командной строки. Он выполняет HTTP-запрос к заданному целевому объекту и отображает только обычные выходные данные HTTP-ответа. Например, в нем показана разметка источника HTML для веб-приложения. -
Wget
— это загрузчик HTTP. Он выполняет HTTP-запрос и загружает заданный ресурс. Например, wgethttp://server/file.zip
загружает file.zip изhttp://server
и сохраняет его в текущем каталоге.
Команда wget
также содержит дополнительные сведения, такие как перенаправление и любые сообщения об ошибках, которые вы можете получить. Поэтому его можно использовать как примитивную версию средства трассировки HTTP всякий раз, когда это необходимо.
Дополнительные сведения о разнице между curl
и wget
, перейдите на веб-страницу StackExchange.
В этой серии обучения вы ранее использовались wget
для скачивания файла диспетчера пакетов .deb с серверов Майкрософт перед установкой .NET.
При выполнении curl http://localhost
ничего не происходит. Это, скорее всего, означает, что нет HTTP-ответа. Затем можно запустить wget http://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!, а затем нажмите клавишу ВВОД. Обратите внимание, что символ двоеточия (:
) означает, что вы вводите команду, означает запись, w
q
означает выход и !
принудительное написание.
После нажатия клавиши ВВОД изменения должны сохраняться. Вы можете проверить изменения, выполнив команду cat ~/firstwebapp/Startup.cs
. Эта команда отображает содержимое файла Startup.cs .
Перезапустите приложение. Для этого измените текущий ~/firstwebapp
каталог на каталог и снова запустите его dotnet run
. Затем откройте другой сеанс терминала на сервере и снова запустите curl http://localhost:5000
команду. На этот раз команда должна вернуть HTML-содержимое домашней страницы.
Теперь вы успешно выполнили свой первый ASP.NET Core Web App в Linux.
Развертывание приложения в каталоге /var
Основной целью этого упражнения является размещение веб-приложения за обратным прокси-сервером, чтобы подключение клиентов могли получить доступ к приложению с другого компьютера, используя только имя узла без номера порта. Это то, что вы ожидаете, что произойдет в реальных сценариях. Позже вы будете работать с Nginx, чтобы завершить эту задачу. Но перед этим опубликуйте приложение в каталоге /var . Это связано с тем, что мы рекомендуем не запускать приложение в домашнем каталоге пользователя.
Помните, что каталог /var используется для хранения содержимого и файлов журналов различными приложениями, такими как Apache и Nginx. Вы будете следовать этой практике, публикуя только что созданное веб-приложение в /var.
Перейдите в папку проекта и выполните команду dotnet publish
, чтобы создать папку публикации. Скопируйте папку в каталог /var .
На снимке экрана показано, что 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 (чтобы клиенты могли подключаться без необходимости предоставлять номер порта).
Заявление об отказе от ответственности за сведения о продуктах сторонних производителей
В этой статье упомянуты программные продукты независимых производителей. Корпорация Майкрософт не дает никаких гарантий, подразумеваемых и прочих, относительно производительности и надежности этих продуктов.