Пользователь
0,0
рейтинг
20 ноября 2014 в 17:29

Разработка → ASP.NET vNext приложение под Ubuntu из песочницы

C#*, .NET*
Я хочу рассказать про мой опыт развертывания ASP.NET vNext под Ubuntu 14.04. Сам я долгое время разрабатываю под Windows и дела с Unix системами если и имел, то вскользь и незаметно для меня и для Unix систем. Но, несмотря на это, новости о переводе части .Net в OpenSource с поддержкой Unix меня порадовали как повод для дальнейшего развития и расширения границ знаний.

В результате недолгих мучений и исследований различных форумов и issue трекеров мне удалось то, что раньше казалось немыслимым. Код написанный на C#, который запускается в среде придуманной и разработанной в MS, который представляет из себя ASP.NET MVC приложение (!) заработал.

Для начала нужно скачать и установить саму операционку. Я брал образ с официального сайта.

http://www.ubuntu.com/download/desktop/contribute/?version=14.04.1&architecture=amd64


Далее этот образ я развернул на VirtualBox, поскольку это был просто эксперимент.

Чтобы запустить приложение на ASP.NET vNext под Ubuntu нам необходимо две вещи: проект оформленный в новом стиле ASP.NET vNext и развернутый и запущенный KRuntime с возможностью поднятия веб сервера Kestrel.

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


Первая задача решается просто. Можно взять готовый очень простой пример с гитхаба:

https://github.com/aspnet/Home/tree/master/samples/HelloWeb.

Если гит еще не установлен, устанавливаем его:

sudo apt-get install git

Затем клонируем себе репозиторий с примерами:

git clone https://github.com/aspnet/Home.git


Инфраструктура


Вторая задача посложнее, но тоже решаема. Процесс состоит из следующих этапов:

  1. Установка Mono

    wget http://download.mono-project.com/repo/xamarin.gpg
    sudo apt-key add xamarin.gpg
    echo "deb http://download.mono-project.com/repo/debian wheezy main" | sudo tee --append /etc/apt/sources.list.d/mono-xamarin.list
    sudo apt-get update
    sudo apt-get install mono-complete
    

  2. Установка KRuntime

    Разрешаем kvm лазить на свои сайты по своим сертификатам.
    sudo certmgr -ssl -m https://go.microsoft.com
    sudo certmgr -ssl -m https://nugetgallery.blob.core.windows.net
    sudo certmgr -ssl -m https://nuget.org
    mozroots --import --sync
    

    Скачиваем скрипт установки kvm и запускаем его, после чего запускаем kvm upgrade. Теперь все, что нужно, у нас уже установлено:

    curl https://raw.githubusercontent.com/aspnet/Home/master/kvminstall.sh | sh && source ~/.kre/kvm/kvm.sh && kvm upgrade
    

    Вытягиваем все зависимости KRuntime:

    kpm restore
    

  3. Установка Bower

    Если не установлен NPM, устанавливаем:

    sudo apt-get install npm
    

  4. Запуск Web-сервера

    Компилим libuv, и (жесткий хак), копируем сборку в папки KRuntime, поскольку там лежат по умолчанию несовместимые версии, поскольку MS еще не работали над поддержкой Linux.

    На данный момент KRuntime необходима версия 1.0.0-rc1 и сам KRuntime находится в версии 1.0.0-beta1. Все это очень быстро меняется, поэтому всегда необходимо знать какие версии линковались между собой последний раз. (Скрипт был взят и немного поправлен отсюда).

    wget http://dist.libuv.org/dist/v1.0.0-rc1/libuv-v1.0.0-rc1.tar.gz 
    tar -xvf libuv-v1.0.0-rc1.tar.gz
    cd libuv-v1.0.0-rc1/
    ./gyp_uv.py -f make -Duv_library=shared_library
    make -C out
    sudo cp out/Debug/lib.target/libuv.so /usr/lib/libuv.so.1.0.0-rc1
    sudo cp out/Debug/lib.target/libuv.so ~/.kpm/packages/Microsoft.AspNet.Server.Kestrel/1.0.0-beta1/native/darwin/universal/libuv.dylib
    sudo ln -s libuv.so.1.0.0-rc1 /usr/lib/libuv.so.1
    

    Вся работа с KRuntime выполняется над приложением, соответственно мы должны находится в директории с проектом, где лежит project.json. В нашем случае делаем:

    cd Home/samples/HelloWeb/
    


    Запускаем наше приложение на сервере kestrel (все настройки в файле project.json):

    k kestrel
    

    Открываем браузер и переходим по адресу:

    http://localhost:5004
    

    Ну или другой адрес указанный в project.json рядом с kestrel:

Процесс очень непривычный, многое изменилось, но радует само развитие. Приятно и то, что ограничений становится все меньше и границы стираются.
@AlexzundeR
карма
8,0
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Спецпроект

Самое читаемое Разработка

Комментарии (35)

  • –8
    Linux is not Unix
    • +7
      Linux is like Unix!
    • –7
      Это вы так расшифровали Linux? Linux Is Not UniX?
      Открою вам секрет, Linux происходит от имени авора — Linus, а X на конце как раз обозначает принадлежность к миру Unix и наследование этих принципов.
    • +3
      ха, адепты *nix всё равно найдут чем возмутиться

      интересно как эти новшества скажутся на продажах Windows Server
      • 0
        Спасибо за описание технической части процесса «сделать хорошо .Asp.Net'у под linux».

        А про новшества — хотел написать много текста про вылизанную интеграцию компонентов и взаимодополнение серверов и сервисов инфраструктуры Microsoft между собой, но как-то это будет не сюда, как мне кажется.
        • –1
          А мне кажется было бы интересно это рассмотреть. Тем более MS не акцентирует внимание на это в своих официальных постах.
          • +1
            Рассмотреть, простите что? глубоко интегрированную и связанную экосистему разнообразных продуктов Microsoft и вариант unix-way как умею, так и вяжу, в которой вон, холивары на тему systemd на всю сеть?
            Да, я с 1996 года готовлю Microsoft, с 2007 успел наготовить bsd, Linux и активно готовлю обе экосистемы в зависимости от бизнес задач.
            Да, меня как разработчика на Asp.Net радует такая подвижка в сторону андроида, macos и линукса. Но, простите, что-то я до сих пор не знаю аналога тех же групповых политик под управление unix системами в пользовательском режиме. Да, есть системы управления серверами, сервисами, но пытаться настроить унифицированное окружение — в нашумевшем проекте ПриватБанка этим занимаются не одна сотня людей…
            • –2
              А с чего вы взяли, что Linux OS должны быть GPO? Вы выше правильно написали, есть chef/puppet/ansible которые выполняют свои задача практически на 100% и утверждать, что отсутствие GPO в Linux это как минус, совершенно не правильно.
              • +2
                групповые политики — это не только ценных мех для настройка серверов, как раз для которых есть chef/puppet/ansible а и четкая настройка рабочих мест пользователей — принтера, сетевые шары, списки избранного, параметры прокси сервера и еще вагон параметров, а эта часть в end-user профиле нормальному контролю не поддаётся.
                • –2
                  Все что вы перечислили, вышеупомянутые инструменты удовлетворяют все потребности. Linux на столько гибкая ОС, что на ней можно настроить практически любой функционал. И не надо мне рассказывать, что принтеры, сетевые шары и т.д. в линухе настраиваются с большим трудом.
                  • +2
                    Я говорю НЕ о сложности настройки, а о ЦЕНТРАЛИЗОВАННОМ управлении этим всем бардаком, когда у меня не офис из 5 человек, а пару тысяч, десятков тысяч человек, раскиданных в офисах по всей стране, и надо не забыть всем прописать подключение нужного принтера, сетевой шары, нужный прокси и все то прочее, для чего собственно групповые политики и предназначены.
                    В варианте MSAD + GPO это все решается групповой политикой на организационную единицу и потом все, что нужно сделать чтобы у учётной записи всё это настроилось или перенастроилось пре переходе в другой отдел/офис — добавить/перенести учётную запись в нужную OU/группу.
                    • –1
                      Эти продукты как раз таки и предназначены для ЦЕНТРАЛИЗОВАННОГО УПРАВЛЕНИЯ
                      • 0
                        Вы вообще читаете что Вам пишут?
                        Вам пишут про управление настройками учетных записей ВНУТРИ пользовательского окружения для конкретного пользователя, а не для управления системным уровнем. Или Вам эта разница не понятна?
                        • 0
                          Я то понимаю, и мне пишете только Вы. Я еще раз Вам напишу, с помощью этих продуктов точно так же можно настраивать пользовательский энвайремент.
      • 0
        никак, если надо будет ломать голову над скриптами, подобными тем, что указаны выше
      • 0
        интересно как эти новшества скажутся на продажах Windows Server

        А никак не скажутся.
        Потребитель Windows Server — это enterprise, где на времени разработчика можно сэкономить больше (если остаться на Windows) чем экономия на железе и лицензиях.
        Для небольших приложений действительно перенос будет стоить «почти ничего», для более-менее серьёзной системы — стоимость тестирования и мелких правок ещё и под *nix — это уже ощутимые потери.
  • +2
    Повторил. По шагам. Что там внутри происходило при вызове команд — по ощущениям магия какая-то, но с нехитрым бубном оно заработало. Один важный комментарий:
    kpm restore
    

    надо вызывать в папке с веб-приложением, которое будет запускаться в веб-сервере.
    Пример с Mvc тоже работает (после второго «рестора»). Пока не совсем понял что была за картинка из примера HelloWeb, видимо, что-то зашитое в AspNet. Остро ощущается нехватка Visual Studio что называется «на месте».
    • 0
      Да, очень дельный комментарий, понял это уже, когда был по пути домой. Но к счастью kpm говорит нам, что не видит файл проекта.
  • 0
    У меня оно упорно не могло получить доступ к реестру (который в /etc/mono), пришлось один раз от рута запускать.
    • –1
      А на какой версии убунты, mono запускали?
  • 0
    У меня вопрос: какова цель постройки этого троллейбуса, в контексте того, что родная для ASP.NET платформа имеет «вылизанную интеграцию компонентов и взаимодополнение серверов и сервисов инфраструктуры Microsoft между собой»?
    • +2
      Занять нишу, забороть mono, напомнить о себе, дать попробовать широкому скептически настроенному кругу людей попользоваться неплохим продуктом. То, что мы видим сейчас ранняя бета, никто не может сказать, что будет дальше.
      • –6
        ASP.NET такая технология, которая с одной стороны имеет мало смысла без остальной майкрософтовской экосистемы, а с другой — без этой самой экосистемы выглядит очень бледно на фоне более традиционных для *nix решений. Но эксперимент удался тем не менее забавный.
        • –1
          Да, согласен, но только пока что, хоть и выглядит это не более чем «смотрите как круто! Я могу запускать asp.net под linux».
          Но дальнейшее развитие это даст, я уверен. Даже сейчас можно сказать, что подобные решения снимают ограничения на сертификацию разного рода продукции MS для использования во многих сферах например в гос. учреждениях.
          • +1
            Майкрософт и раньше неоднократно публиковала пресс-релизы о начале движения в правильном направлении, чтобы потом так же непринуждённо включить заднюю и всё отменить. Давайте дождёмся production ready релиза для начала. Mono и до этого с грехом пополам что-то сишарповое могла запускать и как-то выполнять.
        • +2
          Ну не знаю. Вот хотите вы использовать asp.net mvc, потому что он вполне себе хороший, но не использовать IIS, потому что он не такой хороший—и вот теперь пожалуйста. Или, к примеру, на ваших любимых облаках IIS не работает (не знаю, правда, много ли таких).
    • +1
      Для нового ASP.NET линукс — это тоже вполне себе родная платформа (понятно, что в пререлизе это не так, но цель именно такова).
  • +19
    На хабре началась неделя статей «Как запустить .NET Framework на ______ операционке». Для участия в конкурсе вы должны скопипастить мануал с официального репозитория. Проект должен запускать Хеллоу Ворлд от Майкрософт, который они опубликовали 6 месяцев назад. Изменять копипаст запрещается.

  • 0
    Кажется, ошибка в строке установки KRE.
    Вместо
    source ~/.kre/kvm/kvm.sh

    у меня получился путь
    source ~/.k/kvm/kvm.sh
    • 0
      На всякий случай репост об ошибке, которая у меня случалась (из-за неустановленного unzip)
      см. Ишуй на гитхабе
      FWIW @KaBaJIeP — I had this same issue when trying to install kvm. My first attempt failed due to 'unzip' not being installed, which resulted in a broken install with the error message you described.

      After installing unzip, I removed the ~/.kre directory and reinstalled kvm, and everything is working as I would expect now.

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