Установка net на linux

Установка net на linux

Доброго дня, господа. Сегодня мы затронем тему, за обсуждение которой ещё два года назад сожгли бы на костре — запуск ASP.NET приложения под linux. В данной статье будет использоваться Ubuntu 16.04

Подготовка окружения

Для начала, добавим dotnet-репозиторий:

На выходе получаем примерно следующее:

Теперь обновим индекс наших пакетов:

Далее, мы можем просто установить dotnet-пакет при помощи apt-get:

Теперь можем смело приступать к созданию приложения

Создание приложения

При помощи команды dotnet new мы можем создать шаблон для нашего приложения, подобно шаблонам из Visual Studio. Подробная документация к команде.

На текущий момент (07.2017), команда dotnet new поддерживает следующие шаблоны:

Мы создадим веб-приложение ASP.NET Core:

На выходе консоль выдаст нам следующее сообщение:

Чтобы убедиться, что шаблон сгенерировался правильно, заглянем в содержимое папки при помощи команды ls -la .

Все необходимые папки для сборки приложения на месте, приступим! Для начала, восстановим все пакеты при помощи dotnet restore .

Теперь можем собрать приложение:

Запустим приложение с помощью:

Консоль говорит нам, что приложение запустилось по адресу localhost:5000/. Проверим:

Желающих подробнее узнать, как работает web-сервер отсылаю к официальному источнику.

Теперь убьём процесс нажав Ctrl + C и опубликуем приложение командой dotnet publish. Эта команда упаковывает приложение и все его зависимости для дальнейшего развёртывания (желающим интимных подробностей сюда).

В случае проблем с правами доступа Вам поможет команда sudo chmod и эта страница документации.

Развертывание на сервере.

Если мы хотим развернуть наше приложение под linux-сервером, необходимо настроить прокси и демонизировать процесс запуска приложения. Для проксирования мы будем использовать nginx, для демонизации процесса systemd. Краткое описание утилиты

Как следует из документации выше, с asp.net core в коробке идет kestrel — веб-сервер для asp.net приложений. Зачем нам тогда нужен прокси-сервер? Ответ даётся на официальной странице Microsoft:

Если вы выставляете ваше приложение в интернет, Вы должны использовать IIS, Nginx или Apache как обратный прокси-сервер.

Обратный прокси-сервер получает HTTP запросы из сети и направляет их в Kestrel после первоначальной обработки, как показано на след диаграмме:

Главная причина, по которой следует использовать обратный прокси сервер — безопасность. Kestrel относительно нов и ещё не имеет полного комплекта защиты от атак.

Ещё одна причина, по которой следует использовать обратный прокси-сервер — наличие на сервере нескольких приложений, использующих один порт. Kestrel не поддерживает разделение одного порта между несколькими приложениями.

Так же, использование обратного прокси-сервера может облегчить распределение нагрузки и поддержку SSL.

Как говорилось выше, в качестве прокси-сервера мы будем использовать nginx.

Т.к. в качестве прокси-сервера у нас используется не IIS, следует добавить следующие строки в метод Configure файла Startap.cs.

Здесь мы включаем поддержку ForwardedHeaders мидлвера из пакета. Microsoft.AspNetCore.HttpOverrides, который будет вставлять в Http-запрос заголовки X-Forwarded-For и X-Forwarded-Proto, использующиеся для определения исходного IP адреса клиента и передачи его прокси-серверу. Определение мидлверов и практическое использование так же будет рассмотрено в дальнейших частях этого гайда.

Если у Вас nginx не установлен, выполните следующую команду.

и запустите его командой:

Далее, нам необходимо сконфигурировать nginx для проксирования http-запросов.

Создадим файл /etc/nginx/sites-available/aspnetcore.conf. Папка sites-avalible укахывает nginx-у, какие веб-сайты доступны на текущем сервере для обработки. Добавим в него следующие строки:

Создадим символическую ссылку на aspnetcore.conf в папку sites-enabled, в которой отражаются запущенные nginx-ом сайты.

Nginx настроен на то, чтобы принимать запросы с localhost:8888. Перезапускаем nginx командой sudo service nginx restart , чтобы созданные нами конфигурационные файлы вступили в силу. Проверяем:

502-я ошибка говорит, что сервер перенаправляет нас в другое место и в этом месте что-то пошло не так. В нашем случае — я убил процесс с нашим веб-приложением, которое было ранее запущено командой dotnet run. Потому что могу 🙂

На самом деле, потому что запускать dotnet run в консоли и вечно держать эту вкладку открытой грустно. Именно поэтому процесс будем демонизировать, то есть настроем автозапуск после перезагрузки и автоматическую работу в фоне с помощью systemd.

Читайте также:  Как открыть замок eltis без ключа

Для этого создадим файл в директории /etc/systemd/system/ с расширением .service

Назовём его kestrel-test:

И положим в него следующее содержимое:

[Unit]
Description=Example .NET Web API Application running on Ubuntu

[Service]
WorkingDirectory=/home/robounicorn/projects/asp.net/core/test-lesson/bin/Debug/netcoreapp1.1/publish #путь к publish папке вашего приложения
ExecStart=/usr/bin/dotnet /home/robounicorn/projects/asp.net/core/test-lesson/bin/Debug/netcoreapp1.1/publish/test-lesson.dll # путь к опубликованной dll
Restart=always
RestartSec=10 # Перезапускать сервис через 10 секунд при краше приложения
SyslogIdentifier=dotnet-example
User=root # пользователь, под которым следует запускать ваш сервис
Environment=ASPNETCORE_ENVIRONMENT=Production

Теперь включим и запустим сервис при помощи следующих команд:

Проверим статус сервиса:

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

Перейдём по ссылке ещё раз:

Ну вот, дело в шляпе. Спасибо за внимание!

Вы можете помочь и перевести немного средств на развитие сайта

Серия контента:

Этот контент является частью # из серии # статей: Работаем с Mono

Этот контент является частью серии: Работаем с Mono

Следите за выходом новых статей этой серии.

ASP.NET — новая технология, созданная компанией Microsoft в рамках идеологии .NET для создания высоко функциональных Web-приложений. Одной из основных задач технологии ASP.NET является создание динамических Web-страниц. Текущая реализация Mono полностью поддерживает ASP.NET версии 1.1 и большинство возможностей ASP.NET версии 2.0.

С одной стороны кажется, что разработка приложений с использованием ASP.NET для использования на платформе Linux не имеет практического смысла, так как существует большое количество «родных» технологий, применяемых в области разработки динамических Web-страниц. Однако иногда возможны ситуации, когда необходимо обеспечить работу существующего ASP.NET Web-приложения на сервере, работающем под управлением ОС Linux.

Серверы, поддерживающие технологию ASP.NET

Основным сервером для запуска ASP.NET-приложений является Microsoft Internet Information Server (IIS), предназначенный исключительно для использования на ОС семейства MS Windows. Однако на платформе Linux существуют не менее мощные Web-серверы, например, возможно, самый известный Web-сервер — Apache. Web-сервер Apache поддерживает расширение функциональности с помощью плагинов. Для совместного использования Apache и Mono был разработан плагин mod_mono, который позволяет использовать ASP.NET на Linux-системах.

Другим вариантом является сервер XSP. XSP — это облегченный Web-сервер, предназначенный для разработки и тестирования Web-приложений. Сервер XSP не рекомендуется использовать для развертывания коммерческих проектов в силу ограниченной функциональности, однако он незаменим в ходе разработки. Web-сервер XSP, написанный на C#, входит в комплект инструментов Mono. С его помощью можно просматривать ASP.NET-страницы непосредственно из среды разработки MonoDevelop в режиме отладки. Если этот Web-cервер не установлен, то его можно установить следующей командой:

Web-сервер Apache можно использовать для развертывания ASP.NET-приложений и без подключения плагина mod_mono, заменив этот плагин на комбинацию плагинов mod_proxy и mod_proxy_http и Web-сервер XSP. Однако такой способ не рекомендуется разработчиками Mono по ряду причин, среди которых снижение быстродействия и тот факт, что Web-сервер XSP не поддерживает все возможности стандарта HTTP 1.1.

Настройка Web-сервера Apache для работы с ASP.NET-приложениями

Существуют два способа настройки сервера Apache для работы с ASP.NET-приложениями. Самым простым вариантом является автоматическая настройка, для которой достаточно установить на Web-сервер плагин mod_mono. Перед установкой mod_mono следует проверить наличие плагина для работы с PHP и в случае, если он установлен — удалить, так как данные плагины несовместимы между собой.

Установка и настройка mod_mono может немного отличаться для различных Linux-дистрибутивов Linux. В данной статье будет использоваться дистрибутив Ubuntu 10.10 (Maverick Meerkat) с уже установленным Web-сервером Apache.

Сначала потребуется установить пакеты libapache2-mod-mono и mono-apache-server2 (все приведенные команды должны выполняться от имени суперпользователя root):

Пакет libapache2-mod-mono содержит плагин mod_mono для Apache, который распознает файлы, относящиеся к приложениям ASP.NET, и передает их mono-серверу, находящемуся в пакете mono-apache-server2. После этого необходимо установить пакет mono-devel, содержащий некоторые инструменты, которые могут потребоваться для работы приложений:

После подключения модуля потребуется перезапустить Web-сервер Apache, как показано ниже:

В листинге 1 приведен исходный код демонстрационной ASP.NET-страницы.

Листинг 1. ASP.NET-страница для проверки правильности установки mod_mono

Код страницы необходимо сохранить в файле sample.aspx и скопировать его в папку /var/www/. Для просмотра получившегося результата в адресной строке Web-браузера следует ввести следующий URL: http://localhost/sample.aspx. Если установка пакета mod_mono прошла успешно, то будет показана HTML-страница, изображенная на рисунке 1.

Читайте также:  Конвертер цифр в текст
Рисунок 1. Результат открытия страницы sample.aspx

Второй вариант установки требует «ручной» конфигурации пакета mod_mono. Если на целевой системе уже был применен первый вариант, то следует отключить автоматическое конфигурирование и перезапустить Web-сервер Apache, как показано ниже:

Как и в первом случае, сначала потребуется установить пакеты libapache2-mod-mono и mono-apache-server2. Затем необходимо будет снова активировать поддержку mod_mono (но без поддержки автоматической конфигурации):

После этого в конфигурационном файле /etc/apache2/mods-available/mod_mono.conf необходимо будет определить версию ASP.NET, которая будет поддерживаться сервером. Для поддержки ASP.NET версии 2.0 в данном файле должна быть строка:

Для поддержки версии 1.1 потребуется другая запись:

Далее необходимо сконфигурировать ASP.NET приложение, создав конфигурационный файл Web-сервера в каталоге /etc/apache2/sites-available/, и активировать его командой a2ensite, указав в качестве параметра имя конфигурационного файла. После этого останется только перезапустить сервер, как было показано выше.

Вопросы создания конфигурационных файлов для Web-сервера Apache выходят за рамки данной статьи, поэтому необходимую информацию можно найти в документации сервера Apache или на ресурсе, посвященном плагину mod_mono.

Создание ASP.NET-приложения в среде разработки MonoDevelop

Среда разработки MonoDevelop поддерживает создание ASP.NET-приложений. Для создания приложения необходимо создать новый проект (solution) и выбрать тип проекта C# -> ASP.NET -> Web Application, как показано на рисунке 2.

Рисунок 2. Создание ASP.NET проекта в MonoDevelop IDE

Если не выбирать вариант с созданием пустого проекта (опция Empty Web Application), то MonoDevelop IDE создаст проект, содержащий ASP.NET-страницу с кнопкой, изменяющей при нажатии текст с Click Me на You clicked me.

Рисунок 3. ASP.NET-проект, открытый в среде разработки MonoDevelop

Процесс разработки ASP.NET приложений — это тема отдельной (а может и не одной) статьи, поэтому в данной статье в исходный пример будут внесены минимальные изменения, необходимые для демонстрации принципов работы с ASP.NET на платформе Mono. Так, когда пользователь нажмет на кнопку, уже имеющуюся на странице, то вместо текста будут выведены текущие значения даты и времени. Для этого необходимо изменить метод button1Clicked в файле Default.aspx.cs, как показано в листинге 2.

Листинг 2. Модифицированный метод button1Clicked

Для запуска приложения в оконном меню Run (запуск) необходимо выбрать опцию Run. После этого приложение запустится при помощи сервера xsp2 и откроется в окне Web-браузера. Результат запуска приложения показан на рисунке 4.

Рисунок 4. Результат запуска ASP.NET-приложения

После проверки работоспособности приложения необходимо развернуть его в виде самостоятельного Web-сайта, работающего на Web-сервере Apache. Для этого необходимо скомпилировать проект в режиме Release, затем создать каталог ASP_HelloWorld в каталоге /var/www/ и скопировать туда файлы ./bin/ASP_HelloWorld.dll, Default.aspx, web.config. Конфигурационный файл создается при помощи специальной утилиты.

Листинг 3. Конфигурационный файл для Web-сайта ASP_HelloWorld

Этот файл необходимо сохранить в каталоге /etc/apache2/sites-available под именем ASP_HelloWorld и добавить в файл /etc/hosts строку:

Осталось только активировать созданный Web-сайт на сервере Apache и перезапустить его, как показано ниже:

Проверить развертывание приложения можно, введя в адресную строку Web-браузера следующий URL-адрес: http://ASP_HelloWorld. При успешном развертывании проекта будет показана HTML-страница, изображенная на рисунке 5.

Рисунок 5. ASP.NET-приложение, развернутое на Web-сервере Apache

Проблемы, возникающие при миграции ASP.NET-приложений на платформу Mono

Как неоднократно отмечалось, технология .NET является кроссплатформенной, и Mono — это реализация технологии .NET для определенного семейства систем. Поэтому приложение, разработанное в Microsoft Visual Studio, может быть без особых проблем перенесено в Mono, если не использовать специальных сборок, которые существуют только для систем семейства Microsoft.

Однако при миграции приложений на Mono необходимо учесть несколько важных моментов. Общие проблемы миграции приложений уже рассматривались в статье Работаем с Mono. Часть 5: Перенос приложения на основе WinForms на платформу Mono. Вся информация, приведенная в этой статье, относится и к ASP.NET-приложениям.

Однако для ASP.NET приложений существует возможность игнорировать различие регистра символов в именах файлов путем установки переменной окружения MONO_IOMAP. Для включения этого режима в конфигурационный файл Apache необходимо добавить строку:

Читайте также:  Видеокарта gigabyte gv nx85t512hp

Также следует упомянуть про работу с базами данных. В среде Microsoft Windows чаще всего используются продукты семейства MS SQL Server. В Linux-сообществе доступно гораздо больше систем управления базами данных, как бесплатных open source СУБД, так и коммерческих продуктов.

Поэтому структуру базы данных и запросы, использующиеся в приложении, следует изменить так, чтобы они поддерживались выбранной СУБД (например, PostgreSQL или MySQL). Еще может потребоваться внести изменения в код приложения, которое работает с СУБД. В будущем работе с базами данных будет посвящена отдельная статья.

Поддержка новых версий ASP.NET

На момент написания данной статьи последней вышедшей версией Mono была версия 2.10.2 с поддержкой технологий ASP.NET 4.0 и MVC2. Однако в репозиториях наиболее распространенных дистрибутивов пока не появилась даже версия 2.8. Так, например, в репозиториях Ubuntu 10.10 самой свежей версией Mono является 2.6.7. Возможно, что версия Mono 2.10 не появится и в репозиториях Ubuntu 11.04. Таким образом, по умолчанию поддерживаются только версии 1.1 и 2.0 технологии ASP.NET.

Для поддержки новых версий ASP.NET потребуется самостоятельно выполнить сборку Mono. Для облегчения задачи можно воспользоваться сценарием с Web-сайта Integrated WebSystems LLC. Однако в тексте на указанной странице присутствует ошибка (рассматривается сценарий для версии 2.8), поэтому ниже приведена правильная последовательность команд:

Данный сценарий скачивает необходимые библиотеки и исходный код Mono и выполняет сборку и установку. После запуска сценария к переменной окружения PATH в файле /etc/environment необходимо добавить путь к новой версии: /opt/mono-2.10/bin. Для проверки корректности установки следует перезапустить систему и посмотреть версию Mono следующей командой:

Вывод данной команды должен совпадать с выводом, изображенным на рисунке 6.

Рисунок 6. Проверка версии платформы Mono

Заключение

В данной статье рассматривались настройка Linux-платформы для запуска приложений на основе технологии ASP.NET. Как было показано, технология Mono позволяет легко перенести ASP.NET-приложения с платформы MS Windows на платформу Linux и отказаться от закрытого коммерческого ПО в пользу свободных продуктов.

Сам процесс разработки ASP.NET-приложений и их структура практически не обсуждались, но так как технология ASP.NET обладает исключительно обширными возможностями, возможно, в ближайшем будущем появится отдельный цикл статей, посвященный разработке ASP.NET-приложений.

Ресурсы для скачивания

Похожие темы

  • Работаем с Mono. Часть 1.
  • Работаем с Mono. Часть 2.
  • Работаем с Mono. Часть 3.
  • Работаем с Mono. Часть 4.
  • Работаем с Mono. Часть 5.
  • Работаем с Mono. Часть 6.
  • Работаем с Mono. Часть 7.
  • Работаем с Mono. Часть 8.
  • Работаем с Mono. Часть 9.
  • Работаем с Mono. Часть 10.

Комментарии

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

Смешались в кучу кони, люди.

Господа, которые отвечают, ну вы бы что ли изучили матчасть и не вводили человека в заблуждение, а то вот так и рождаются мифы.

Во-первых, GUI можно делать не только c использованием WinForms/WPF, а с помощью любой библиотеки для которой есть байндинги. Более того, внезапно существуют вполне себе "родные" для .NET кроссплатформенные GUI-фреймворки: Gtk# и AvaloniaUI, и, если первый, честно говоря, специфичен, то со вторым зная WPF и XAML разобраться не составляет большого труда;

Во-вторых, это, правда уже совсем Rocket Science, писать GUI можно вообще без фреймворка;

Ну и в-третьих: говорить, что возможности C# ограничиваются возможностями ASP.NET Core в корне неверно, потому как ASP.NET Core — это веб-фреймворк, написанный на C#, рантаймами для которого являются .NET Core и .NET Framework.

Касательно же ограничений, они по большому счету сводятся к тому, что, если Вы пишете кроссплатформенное ПО, то вынуждены использовать только кроссплатформенные библиотеки и API, к которым, например, вышеупомянутый WPF не относится. Если же Вы планируете разрабатывать ПО только под Линукс, то ограничений по большому счету нет.

Ссылка на основную публикацию
Умный браслет с функцией измерения давления
Вы посвящаете свою жизнь спорту или просто стараетесь всеми возможными способами следить за своим здоровьем? Придерживаетесь того, что во время...
Тонны в сутки в кг в секунду
Сколько Килограмм в секунду в Метрическая тонна в сутки: 1 Килограмм в секунду = 86.4 Метрическая тонна в сутки 1...
Тонер для заправки картриджей canon 725
Совместимость: Картридж Canon 728 подходит к принтерам MF-4410, 4430, 4450, 4550, 4570, 4580, 4730, 4750, 4780, 4870, 4890. Аналог —...
Умный выключатель zigbee aqara
Протокол передачи данных в домашних системах автоматизации. Реле Xiaomi Aqara Xiaomi Aqara wireless relay Систему "Умного дома" сложно представить без...
Adblock detector