Как запустить net core приложение на линукс
Многие разработчики и пользователи с насторожённостью относятся к Linux и ко всему, что с ним связано. Причина такого отношения – недостаточная осведомленность. Также распространено мнение, что Linux и ПО для него разрабатывается некими энтузиастами, которые создают ПО исключительно для решения своих небольших задач и такое ПО не подходит для использования в серьезных коммерческих проектах. На самом деле Linux дистрибутивы развивается и поддерживаются крупными организациями, которые зарабатывают на ОС Linux опосредовано, за счет оказания дополнительных (облачных и не только) услуг. Вспомним Canonical и их ОС Ubuntu, Red Hat с одноименным дистрибутивом.
В экосистеме Linux имеется множество специализированных программ для пользователей «среднего» и «продвинутого» уровня, многие из них прежде всего рассчитаны на ИТ-специалистов, поскольку продолжительное время Linux использовался в качестве надежной серверной ОС и ОС для встраиваемого оборудования. Для Linux пока еще не хватает приложений для так называемых «просьюмеров» - пользователей-непрофессионалов, которые покупают программы профессионального уровня (Adobe Premiere, Final Cut Pro, Photoshop, CAD-системы и прочие), но ситуация постепенно изменяется и производители ПО начинают выпускать версии своих профессиональных приложений для Linux. Для разработчиков на Linux уже в настоящее время открыты огромные возможности, начиная от набора всевозможных специализированных инструментов, которые при желании можно доработать для своих нужд, до различных удобных (и не очень) IDE для работы с разными языками программирования.
Развертывание Alt Linux
В качестве системы был выбран Alt Linux Workstation 9.0, прежде всего, чтобы учесть вектор развития в сторону импортозамещения. Вы можете использовать тот дистрибутив, который вам будет наиболее знаком.
При развертывании ОС был приятно удивлен, т.к. действий от пользователя требуется минимум, достаточно выполнить ряд простых шагов. Установка выполняется быстро, интуитивно понятно, практически не отличается развёртывания ОС Windows:
1. Выполнение языковой настройки.
2. Укажите региональные настройки.
3. Выполните разметку диска.
На этом пункте необходимо остановиться и подумать, какие разделы и для чего нам будут нужны.
Мы планируем выполнять разработку, при этом наша разработка не должна влиять на ОС, поэтому примем, что разработку мы будем вести только в домашнем каталоге пользователя, а домашний каталог (каталог /home) вынесем на отдельный раздел, чтобы мы ни при каких обстоятельствах мы не могли занять дисковое пространство, необходимое для ОС. Во многих статьях в Интернет рекомендуют вынести каталог /var на отдельный раздел, т.к. в этом каталоге хранится дополнительное установленное ПО и лог-файлы приложений. В нашем случае, мы не знаем, сколько нам потребуется места для /var, будем считать, что выделяемого пространства под систему и приложения мы заложили достаточно, поэтому ограничимся только вынесением каталога /home на отдельный раздел.
Выберем ручную настройку разделов:
Создадим новую таблицу разделов:
4. Выберем состав необходимого ПО. Оставим только нужное.
5. Дождаться завершения установки ОС.
6. Подтвердить установку загрузчика Linux на основную загрузочную запись диска.
7. Выполнить настройку сетевого адаптера.
В данном случае оставим все по умолчанию. При разворачивании на вашем рабочем месте, необходимо уточнить сетевые настройки у системных инженеров вашей компании. В любом случае сетевые настройки можно изменить после развертывания ОС.
8. После настройки учетных записей, установка ОС будет завершена.
Прежде всего необходимо установить обновления ОС. Все действия по установке и настройке системы будем выполнять под учетной записью root (суперпользователь ОС, обладающий максимальными правами).
Запускаем эмулятор терминала Konsole (из комплекта поставки) и начинаем выполнять настройку рабочего места.
Пакеты разработки установлены, можно начинать создавать первую программу.
Под обычным пользователем перейдем в домашний каталог пользователя и создадим специальный каталог для разработки /projects.
Перейдем в каталог для проектов и создадим первое консольное приложение (проект).
После выполнения команды, был сформирован каталог с консольным приложением. Внутри каталога располагается файл Program.cs, в котором можно увидеть исходный код нашего тестового проекта.
Для того, чтобы скомпилировать и выполнить проект, необходимо перейти в каталог проекта и выполнить команду dotnet run.
После выполнения команды в папке bin/Debug/netcore3.1/ будет сформирован исполняемый файл приложения, которое можно запустить, как любой другой исполняемый файл в Linux:
Развертывание редактора Visual Studio Code
Для Alt Linux инструмент Visual Studio Code поставляется вместе с пакетом code.
После установки пакета, в системе появится редактор Visual Studio Code (Text Editor), который можно запустить из меню приложений:
Установку расширения можно выполнить прямо в редакторе:
Запустим IDE и откроем папку нашего проекта.
В редакторе вы можете быстро переключаться между файлами проекта, создавать новые файлы проекта и папки.
На вкладке TERMINAL удобно вызывать процесс сборки и выполнения приложения.
Вместо заключения
Также мы разработали тестовую программу и запустили ее в рамках редактора Visual Studio Code.
В следующей статье попробуем написать простой микросервис, который сможет выполнять некоторые полезные действия.
Предварительные требования
Цель этой части
Эти тренинги часто dotnet используют команду. Эта команда является мощной и имеет две основные функции:
Эти правила применяются при dotnet new использовании:
- Команда создает файлы проекта в каталоге выходных данных. Если опустить -o <output_directory> сегмент, проект будет создан в текущем каталоге. Вы всегда можете использовать -o переключатель.
- Если папка не существует, команда создает ее.
- Если опустить сегмент, имя проекта будет таким же, как -n <project_name> и имя каталога.
Вы можете найти творческие имена для каталога и самого проекта. Однако имейте в виду, что Linux является чувствительным к делу. Для этого упражнения используйте более консервативное имя проекта и создайте его AspNetCoreDemo в firstwebapp каталоге.
Чтобы создать проект, запустите следующую команду:
Вы создали свое первое приложение. Следующая задача состоит в том, чтобы запустить его. Измените каталог в папку проекта и запустите dotnet run .
Следующие элементы на этом скриншоте:
Рекомендуется не запускать приложение под домашним каталогом. Вы опубликуете его в другом каталоге позже, но перед публикацией его следует проверить. Чтобы остановить приложение, можно нажать кнопку Ctrl+C. Но пока держите его в работе и откройте новый сеанс терминала, используя предпочтительный метод для подключения к виртуальной машине Linux. В этом примере вы снова будете использовать PowerShell.
Тестирование веб-сайта из другого терминала
В новом сеансе терминала убедитесь, что приложение прослушивает в портах 5000 и 5001. Linux имеет ту же netstat команду, что Windows имеет. Запустите netstat вместе с -tlp переключателем. Вы можете ознакомиться с переключатели в этой статье , или вы можете посмотреть на файл справки netstat с помощью запуска или man netstat info netstat .
Вот вывод команды из второго сеанса netstat -tlp терминала. В нем показано, что процесс AspNetCoreDemo запущен с помощью PID 781 и прослушивается в портах 5000 и 5001 для IPv4 и IPv6.
Дополнительные сведения о разнице curl между и wget , перейдите на веб-страницу StackExchange.
Вот что происходит сейчас:
Редактирование файлов с помощью vi
Вы можете использовать текстовый редактор vi для дистрибутивов Linux для редактирования всех типов обычных текстовых файлов. Вы будете использовать его в этом обучении для перенастройки приложения.
Перед редактированием приложения необходимо закрыть приложение. Сначала закрой сеанс открытого терминала. Затем нажмите кнопку Ctrl+C, чтобы закрыть приложение.
Чтобы изменить файл Startup.cs, запустите следующую команду:
Эта команда запускает редактор vi и загружает файл. Ярлык
(tilde) относится к домашнему каталогу, в котором вы создали проект. То есть команда указывает на /home/ <YourName> /firstwebapp/Startup.cs.
Нажмите esc, чтобы выйти из режима редактирования, введите :wq!,а затем нажмите ввод. Обратите внимание, что символ двоеточия () означает, что вы вступаете в команду, означает написать, означает : выйти, и w силы q ! записи.
После нажатия ввода изменения должны быть сохранены. Вы можете проверить изменения, cat
/firstwebapp/Startup.cs запуская . Эта команда отображает содержимое файла Startup.cs.
Перезапустите приложение. Для этого измените текущий каталог на
Развертывание приложения в каталоге /var
Основная цель этого упражнения — провести веб-приложение за обратным прокси-сервером, чтобы клиенты, подключившись, могли получить доступ к приложению с другого компьютера, используя только имя хост-сервера без номера порта. Это то, что вы ожидаете, что произойдет в реальном мире сценариев. Вы будете работать с Nginx позже для выполнения этой задачи. Но прежде чем это сделать, опубликуйте свое приложение в каталоге /var. Это потому, что рекомендуется не запускать приложение в домашнем каталоге пользователя.
Помните, что каталог /var используется для хранения контента и файлов журнала различными приложениями, такими как Apache и Nginx. Вы будете следовать этой практике здесь, опубликовав недавно созданное веб-приложение в /var.
Измените папку проекта и запустите dotnet publish для создания папки публикации. Скопируйте эту папку в каталог /var.
На скриншоте показано, что команда создала файлы публикации в dotnet publish папке
/firstwebapp/bin/Debug/net5.0/publish/. Затем для копирования всех файлов в папку /var/firstwebapp/folder была использована следующая команда:
Использование перед sudo командой копирования. Вы используете это, так как стандартные пользователи не имеют разрешения на написание каталога /var. Поэтому команду необходимо запустить в качестве суперусыла.
Чтобы запустить приложение из опубликованной папки, запустите следующую команду:
Срок службы процесса и последующие действия
- Если бы пользователи прекращали сеансы, например закрыв клиент PuTTY или SSH PowerShell или завершая сеанс, приложение было бы закрыто.
- Если по какой-либо причине процесс завершается (например, процесс завершается сбоем из-за неопровернутого исключения), он не будет автоматически запускаться и должен быть перезапущен вручную.
- Если сервер перезапущен, приложение не запустится автоматически.
Дальнейшие действия
Заявление об отказе от ответственности за сведения о продуктах сторонних производителей
В этой статье упомянуты программные продукты независимых производителей. Корпорация Майкрософт не дает никаких гарантий, подразумеваемых и прочих, относительно производительности и надежности этих продуктов.
Предисловие
Процесс подготовки
Чтобы продемонстрировать развертывание, я специально подал заявку на использование пакета в 1 юань в Azure и создал виртуальную машину Centos-7.5. Процесс подачи заявки очень прост и приятен. Вы можете заплатить 1 юань, чтобы заполнить кредитную линию в размере 1500 юаней. Срок использования составляет 30 дней. Рекомендуем всем подавать заявки на тестирование и обучение машин.
Получение машины заняло несколько минут, спасибо, Azure, за вашу любезную поддержку
SSH подключился к виртуальной машине, он выглядит так, введите команду cat / etc / redhat-release для просмотра версии
Когда вы получаете машину, вы должны подтвердить версию операционной системы, потому что некоторые команды в ubuntu и centos отличаются, например, ubuntu использует apt-get, а centos использует yun
1. Самостоятельное развертывание с использованием Kestrel
1.1 Среда установки
sudo yum update
sudo yum install dotnet - sdk - 2.2
Поскольку учетная запись, в которую мы выполняем вход, не является учетной записью root, нам может быть предложено ввести пароль во время выполнения команды. Просто сделайте так, как есть. Поскольку это первое обновление yum для новой машины, может быть много зависимостей. Пожалуйста, терпеливо дождитесь завершения установки. Если вы впервые используете Linux, представьте, что Linux - это операция системы dos под Windows, чтобы вы могли добиться плавного перехода.
Установка завершена, введите dotnet --version и выведите следующую информацию, чтобы подтвердить успешность установки.
1.2 Настройте порт, на котором работает служба
Настроить порт, на котором работает служба, можно двумя способами. В предыдущей статье был представлен способ использования файла hosting.json. Вот демонстрация для удобства, поскольку настройка брандмауэра под Linux запутает новичков, мы напрямую указываем 80 в коде. Порт, код следующий
public class Program
public static void Main ( string [] args )
CreateWebHostBuilder ( args ). Build (). Run ();
public static IWebHostBuilder CreateWebHostBuilder ( string [] args ) =>
WebHost . CreateDefaultBuilder ( args )
options . Listen ( IPAddress . Parse ( "0.0.0.0" ), 80 );
Очень краткий код, вы можете настроить адрес прослушивания и порт только с помощью UseKestrel.Если у вас есть друзья с несколькими сетевыми картами, лучше указать IP-адрес.
2. Начать публикацию
2.1 Публикация в локальной папке
Найдите проект D: \ Learning \ Deploy.Linux \ Deploy.Linux, введите cmd, чтобы запустить командную строку, введите следующую команду
dotnet publish -- runtime centos . 7 - x64 -- framework netcoreapp2 . 2 -- configuration release
После выполнения указанной выше команды вы увидите выпущенные файлы проекта и зависимые проекты в папке проекта bin \ release \ netcoreapp2.2 \ centos.7-x64 \ publish.
Далее создайте новую папку на сервере и введите команду в консоли
sudo mkdir - p / data / sites / demo
// Измените разрешение для текущего пользователя, вошедшего в систему, иначе загрузка будет невозможна
sudo chown - R ron : ron / data
Загрузите папку публикации в папку / data / sites / demo, только что созданную на сервере. Я использую SecureFx здесь, это просто и грубо, просто скопируйте и загрузите
2.2 Запуск теста
После успешной загрузки не беспокойтесь о записи служебного файла, сначала проверьте, можно ли его запустить, сначала используйте консоль для проверки, введите команду, чтобы найти папку публикации
cd / data / sites / demo / publish
// Запускаем, потому что мы хотим прослушивать порт, и мы не используем пользователя root, здесь нам нужно использовать sudo для повышения привилегий, если вам будет предложено ввести пароль, введите пароль текущего пользователя, вошедшего в систему
sudo dotnet Deploy . Linux . dll
Тест начался успешно. Информация, представленная выше, показывает, что с нашим выпуском проблем нет. Давайте сначала разберемся с приведенной выше информацией.
Hosting environment : Production
Content root path : /data/ sites / demo / publish
// Прослушивание адреса и порта
// Подскажите навыки выключения, Ctrl + C может выключить этот хост
Application started . Press Ctrl + C to shut down .
Информации немного, все просто и понятно.Фактически, теперь мы получили доступ к сайту через порт 80, но как служба, она должна работать в памяти, а не закрывать окно и останавливать сайт.
2.3 Создание резидентской службы
Итак, теперь мы напишем файл сценария для размещения сайта в службе Linux. На официальном сайте этого файла сценария есть примеры. Мы можем использовать его напрямую. Но сначала нам нужно создать служебный файл kestrel-dotnet в системе. .служба
Перейдите в папку / etc / systemd / system, введите команду
sudo vi kestrel - dotnet . service
// Нажмите i, чтобы переключить редактор в режим ввода
// Копируем следующий контент в текущий редактор
Description = Example . NET Web Site running on Centos
WorkingDirectory = /data/ sites / demo / publish
ExecStart = /usr/ bin / dotnet Deploy . Linux . dll
SyslogIdentifier = dotnet - example
Environment = ASPNETCORE_ENVIRONMENT = Production
Environment = DOTNET_PRINT_TELEMETRY_MESSAGE = false
WantedBy = multi - user . target
// Нажмите клавишу esc, чтобы выйти из режима редактирования, введите команду: wq! Сохранить и выйдите
После указанной выше волны операций вы получите служебный файл kestrel-dotnet.service, который является стандартным файлом конфигурации службы Linux.
После указанной выше серии операций студенты, не знакомые с Linux, уже немного устали.
Теперь зарегистрируйте созданный служебный файл в системе, затем запустите его и введите по очереди следующие команды
sudo systemctl enable kestrel - dotnet . service
sudo systemctl start kestrel - dotnet . service
Заключительные замечания
Нам нужен VPS сервер. Я использую яндекс.облако. Они пока что дают 2 месяца бесплатного использования. Для экспериментов думаю вполне достаточно.
Как добавить виртуальную машину в яндекс облаке.
Если у вас есть другой VPS пропустите этот блок.
- Если вы уже зарегистрировались и активировали пробную версию.
2. Перейдем во вкладку compute cloud
4. Введем простую конфигурацию ВМ
5. Добавим SSH-ключ
Запустите cmd.exe или powershell.exe . И введите следующую команду.
ssh-keygen -t rsa -b 2048
В папке /c/Users/username/.ssh/id_rsa у вас появится файлы id_rsa и id_rsa.pub
Добавим содержимое файла id_rsa.pub в поле SSH-ключ
Подлючимся к VPS серверу и установим несколько компанентов.
На вашем VPS установим следующие компоненты.
Согласно официальной документации там же можно найти другие сборки под linux, windows, MacOS.
Сделаем сборку на разработческой машине. Я делаю сборку в VisualStudio 2019. Но вы можете воспользоваться командой dotnet publish. Естественно, чтобы данная команда сработала не забудьте установить SDK. Вы можете сделать сборку и на сервере.
dotnet publish --configuration Release
Результатом сборки это файлы .dll. Найдите .dll файл стартового проекта (startup project). Например MyProject.dll.
Запустим сборку на сервере командой
Попробуйте обратиться по ip вашего сервера с указанием порта, например 52.155.122.144:5000, приложение должно запуститься.
Но есть проблема. Если закрыть консоль, то приложение отключится. Чтобы эту проблему решить надо запустить приложение в фоновом режиме, как службу. К счастью для этого можно использовать сторонней софт superviser, который ставиться невероятно просто.
Читайте также: