В документации ASP.NET Core есть раздел описывающий установку и запуск приложений под Linux . Однако большое количество вводимых команд и некоторые неожиданные моменты делают эту задачу не совсем простой. Это будет особенно актуально при отсутствии опыта работы с Linux. Поэтому давайте рассмотрим этот процесс подробнее и, по возможности, упростим его. |
Поскольку в ASP.NET Core начиная с версии RC2 были сделаны большие изменения, то данная информация актуальна только для версий RC1 и младше.
Для создания тестовой среды отлично подойдет использование виртуальной машины (VM) на компьютере разработчика. В качестве операционных систем можно использовать Debian или Ubuntu.
Разворачиваем ОС на виртуальной машине
Загрузить дистрибутивы ОС можно с официальных сайтов:
Для тестирования работы веб-приложений лучше всего подойдет или серверная версия Ubuntu или Debian без GUI, т.к. они компактны и требуют меньше ресурсов. Особого преимущества от установки GUI для решаемой задачи нет, т.к саму разработку все равно удобнее вести в Visual Studio. Кроме того, плюсом будет получение навыков работы с терминалом Linux.
На момент написания статьи, запустить CoreCLR и Mono на Ubuntu 15 не получилось, поэтому далее используется 14-ая версия этой ОС.
Сама установка ОС достаточно простая и быстрая, но стоит отметить некоторые моменты:
-
для VM выделите 1024 MB памяти изначально и включите Dynamic Memory;
-
для установки и запуска Debian под VM необходимо выключить Secure Boot;
-
для Ubuntu параметр Secure Boot можно или отключить или установить в значение "Microsoft UEFI Certificate Authority";
-
можно установить только ядро ОС (без дополнительных пакетов).
В процессе установки и дальнейшей настройки желательно периодически фиксировать текущее состояние VM (checkpoint). В дальнейшем это позволит переключаться между ними. Например, можно создать варианты с CoreCLR и с Mono.
Перед сохранением состояния необходимо завершить работу Linux и выключить VM командой: sudo shutdown now –P
Проблемы с Debian
После установки Debian 8.2.0 было обнаружено отсутствие утилиты sudo, которая требуется для запуска команд с привилегиями супер пользователя. Для установки sudo необходимо выполнить следующие действия:
user@server:~$ su
root@server:~$ apt-get install sudo
root@server:~$ adduser <userName> sudo
root@server:~$ exit
user@server:~$ exit
Это загрузит утилиту sudo и разрешит указанному пользователю <userName> ее запускать. Обратите внимание на две команды exit в завершении. Это не опечатка. Для вступления изменений в силу необходимо перезапустить терминал текущего пользователя.
CoreCLR vs Mono
Можно возникнуть вопрос, что выбрать для разработки: CoreCRL или Mono. Все зависит от самого проекта. Вот какие факторы нужно учесть при выборе run-time:
- CoreCLR занимает гораздо меньше места по сравнению Mono.
- CoreCLR на данный момент содержит меньше функциональности, чем Mono. Но догонит его в перспективе.
- Компилятор в CoreCLR более современный и поддерживает все новые возможности. Здесь уже Mono в догоняющих.
Таким образом, логично будет ориентироваться на CoreCLR. Mono подойдет для случая, когда уже сейчас необходимы возможности, которых еще нет в CoreCLR .
Проблемы с установкой CoreCLR и Mono
CoreCRL
Ничего сложно в установке CoreCLR для Linux нет. Но официальная документация содержит достаточно большое количество команд, которые предлагается вводить вручную. Вариант упрощения напрашивается сам собой – скрипт.
Mono
С Mono ситуация немного сложнее. Согласно документации все что необходимо – это установить пакет mono-complete и сам run-time. Однако, кроме этого так же потребуется:
- добавить источники пакетов для загрузки Mono;
- установить сертификаты сайтов, используемых для восстановления пакетов NuGet.
А это все потребует ввода новых команд, которых к тому же нет в документации ASP.NET. Решение проблемы то же самое, что и в первом случае: написать скрипт.
Устанавливаем CoreCLR и Mono с помощью скрипта
В дальнейшем предполагается что у пользователя Linux есть права записи с текущую директорию. Такой является его домашняя директория /home/<UserName>, в которую он обычно попадает после запуска терминала. Самостоятельно перейти в нее можно c помощью команды cd /home/<UserName>, где <UserName> это логин пользователя.
Нажатие кнопки Tab в процессе набора команды, показывает варианты ее завершения или подставляет текст, когда остается только один вариант. Например, удобно вводить путь до директории, указывая 1 или 2 начальные буквы и нажимая Tab для завершения имении.
Проект с вспомогательными скриптами для установки .NET расположен на GitHub по адресу: https://github.com/VeselovAndrey/dotnet-install
На данный момент он содержит два скрипта:
- debian-dotnet-install.sh – устанавливает CoreCLR, Mono, Node.js на Debian и Ubuntu
- samba-share-dir.sh – создает директорию и открывает к ней доступ по сети
Загрузить их можно 2 способами:
Этот способ подходит если необходимо загрузить только один скрипт. Например: debian-dotnet-install.sh. В терминале необходимо выполнить следующие 2 команды (они записаны в одной строке через &&):
user@server:~$ wget -N https://raw.githubusercontent.com/VeselovAndrey/dotnet-install/master/debian-dotnet-install.sh && chmod +x debian-dotnet-install.sh
Утилита wget предназначена для загрузки файлов из сети. Поскольку в параметрах нет особых указаний, данные будут сохранены в текущую директорию. Если в ней уже существует файл с таким именем, то wget его перезапишет (ключ "-N"). После загрузки скрипту будут добавлены права на запуск (chmod +x).
- Загрузка скриптов с помощью git
Поскольку проект размещён на GitHub его можно просто клонировать.
user@server:~$ sudo apt-get install git
user@server:~$ git clone git://github.com/VeselovAndrey/dotnet-install.git ~/dotnet-install
user@server:~$ cd dotnet-install
user@server:~/dotnet-install$ chmod +x *.sh
Здесь выполняются следующие действия:
- sudo позволяет запускать команды с привилегиями супер пользователя.
- apt-get это менеджер пакетов Linux. Используя его, в систему добавляем git.
- С помощью git клонируем проект в директорию "/home/<UserName>/dotnet-install".
- Переходим в директорию проекта.
- Разрешаем запуск всех скриптов вызовом chmod.
Устанавливаем CoreCLR и/или Mono
После того как загрузка завершена можно запустить установку .NET с помощью вызова debian-dotnet-install.sh. Скрипт всегда устанавливает CoreCLR, а так же ряд других компонентов, определяемых параметрами:
- --coreclr – устанавливает CoreCLR.
- --mono – устанавливает Mono.
- --nodejs – устанавливает Node.js.
- --help – выводит список доступных параметров.
Пример вызова скрипта для установки CoreCLR, Mono и Node.js:
user@server:~$ ./debian-dotnet-install.sh --coreclr --mono --nodejs
Обратите внимание: в начале указывается "./" для вызова скрипта из текущей директории.
По завершению установки необходимо перезапустить терминал, выйдя из него командой exit. Так же, при установке Mono, потребуется подтверждение добавления сертификатов сайтов. К сожалению, ключ для автоматизации данного процесса у утилиты certmgr отсутствует.
Дополнительно: настройка директории для обмена файлами
Второй скрипт, samba-add-shared-dir.sh, помогает решить простую задачу – обмен файлами с компьютером разработчика. Например, это пригодиться для копирования проекта на тестовый сервер. Все что нужно – запустить скрипт с указанием имени директории. Она будет автоматически создана в каталоге /home/<UserName> и открыта для доступа по сети:
user@server:~$ ./samba-add-shared-dir.sh [имя директории] [сетевое имя]
Второй параметр опционален и используется для задания сетевого имени, отличного от имени самой директории. Доступ осуществляется с авторизацией. При этом используется учетная запись пользователя запустившего скрипт. При этом скрипт запросит пароль для директории, который можно задать отличным от пароля для входа в систему (последний при этом изменен не будет).
Запускаем текстовый проект
Для проверки работоспособности можно клонировать и запустить демонстрационный проект с GitHub.
Для того, чтобы узнать адрес VM/сервера c Linux можно использовать команду ifconfig.
user@server:~$ git clone git://github.com/aspnet/home.git ~/aspnet-home
user@server:~$ cd aspnet-home/samples/1.0.0.-rc1-update1/HelloMvc
user@server:~/aspnet-home/samples/1.0.0-rc1-update1/HelloMvc$ dnu restore
user@server:~/aspnet-home/samples/1.0.0-rc1-update1/HelloMvc$ dnx web
Последняя команда запускает веб-сервер. При этом будет выведен адрес порта для соединения. Остается только запустить браузер и убедиться что сайт работает.