ASP.NET Core на Ubuntu 14.04 в облаке koding.com

Решил попробовать странного – ASP.NET Core. В еще более странном окружении – Ubuntu 14.04 на VDS в облаке koding.com.

Казалось бы, что тема ASP.NET Core уже разжевана достаточно и что могло бы пойти не так? А вот и могло. Как всегда. Если что-то может пойти не так, то пойдет именно не так (закон Мёрфи никогда еще не подводил).

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

koding.com

В первую очередь – необходимо зарегистрироваться на koding.com. Далее, необходимо убедиться, что на вашем VDS есть достаточно свободного места (в конце эксперимента у меня было занято в сумме 2.37 Gb из 3 Gb доступных на бесплатном аккаунте).

.NET Core, CoreCLR, етц

Дальше начнется самое веселье – установку .NET Core, Core CLR, DNVM и еще вороха различных штук. Но обо всём по порядку.

Устанавливаем всё, о чем говориться в официальной инструкции по установке ASP.NET 5 на Linux. Особое внимание следует уделить пункту “Install the .NET Execution Environment (DNX)”: я установил только .NET Core.

Далее делаем sudo apt-get update для обновления всего и вся.

Следом потребуется установить libunwind8: sudo apt-get install libunwind8. Если не установить этот пакет, то “никакого чуда не произойдет” (с).

Yeoman и generator-aspnet

Я не стал заморачиваться с созданием проекта руками и нашел на официальном сайте ASP.NET 5 замечательный тул generator-aspnet – генератор Yeoman для проектов ASP.NET 5 (если раньше не сталкивались с Yeoman – ничего страшного – он простой как тапок).

Однако, что-то может пойти не так при установке Yeoman. Например, node js, установленный на VDS “слишком стар для всего этого дерьма”, как получилось в моём случае. Эту проблему мне удалось побороть довольно быстро (stackoverflow всему голова):

sudo npm cache clean -f # 1. чистим кеш npm
sudo npm install -g n # 2. устанавливаем вспомогательный пакет 'n'
sudo n stable # 3. устанавливаем последнюю стабильную версию node js

Далее следуем инструкция по установке в репозитории generator-aspnet:

npm install -g yo # 1. установить Yeoman
npm install -g generator-aspnet # 2. установить generator-aspnet

Теперь, для того чтобы создать проект ASP.NET 5, можно воспользоваться командой yo aspnet, которая выдаст мастер, который создаст все необходимые файлы для выбранного типа проекта (в моем случае – Web Application).

В этот момент я почти ощутил дзен, но, выполнив всё, что сказал мне мастер yo (dnu restore и затем dnu build) мне стало грустно. Грустно от того, что чуда не произошло – проект не собирается. От слова “совсем”.

Логи dnu build как бы намекали, что что-то пошло не так сообщениями вида Unable to resolve dependency fx/mscorlib. Сжав зубы в кулак, пошел в google. Как и ожидалось, подобные проблемы возникли не у меня одного. Ответ нашел в issue в репозитории ASP.NET на github: в dnu build требуется указать framework равным dnxcore50. Т.е. работающая команда будет выглядеть следующим образом: dnu build --framework dnxcore50. Таким образом проект у меня взлетел на ура.

Ну теперь то, думал я, точно ничего меня не остановит от того, чтобы запустить своё первое ASP.NET Core приложение на Ubuntu. Но, нет.

Следуя инструкции от мастера yo выполнил dnx web. Подождав несколько секунд терминал выдал сообщение, что, мол, всё отлично и ты, хозяин, можешь открыть сайт по адресу http://localhost:5000. Ага, конечно. Ничего так просто не бывает.

Магия пятитысячного порта

Начну с того, что localhost здесь значит немного (совсем) не то (ну то есть то, но “свой”, VDS-ный, localhost). Чтобы найти реальный адрес, по которому располагается сайт, необходимо зайти в настройки VDS: в самой левой панели есть список из виртуальных машин вида koding-vm-0 и жмём на кнопку (которая появляется только при наведении курсора на имя ВМ) справа от имени ВМ (круглая с тремя точками). В окне настроек на вкладке General есть настройка Assigned URL – это и есть адрес виртуальной машины (в моем случае адрес был ufkk0ebd3cf6.feeeper.koding.io). Т.е. сайт, который запускали через dnx web должен был быть по адресу ufkk0ebd3cf6.feeeper.koding.io:5000. “Ну теперь-то точно всё?” – задавал я себе вопрос открывая новую вкладку браузера и вводя туда адрес сайта. Однако, Chrome сказал мне, что всё плохо и ничего здесь нет.

К счастью у меня уже было предположение, как решается эта проблема – аналогичная ситуация на koding.com у меня была с сайтом на Django. Проблема решилась явным указанием 8000 порта (похоже, что 5000-ый порт чем-то не угодил) при запуске сервера. Окей, решил я, узнаем, как указать нужный порт при запуске dnx web.

В очередной раз мне помог issue на github: для того, чтобы сервер поднимался на необходимом порту требуется указать в project.json в разделе commands для команды web нужный порт: "web": "Microsoft.AspNet.Server.Kestrel --server.urls=http://*:8000/".

А вот теперь – запускаем еще раз dnx web ждем несколько секунд и видим, что теперь сайт доступен на 8000 порту. Открываем новую вкладку с адресом вашей ВМ и указанием 8000го порта (типа http://ufkk0ebd3cf6.feeeper.koding.io:8000) и видим главную страницу вашего первого ASP.NET Core приложения, развернутого на Ubuntu 14.04.

Итого

С такой-то матерью и горсткой потраченных нервов мне все таки удалось заставить работать “Hello, World!” ASP.NET Core проект на Ubuntu. Радует, что есть подвижки в сторону более открытых платформ со стороны Microsoft, однако учитывая сколько при этом требуется сделать лишних движений (в сравнении с родной для ASP.NET ОС – Windows), становится немного грустно. Но, мне кажется, что это временные неудобства и совсем скоро будет всем щастье и здоровье.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s