Andrey on .NET | Разворачиваем собственный сервер NuGet

Разворачиваем собственный сервер NuGet

NuGet logoСамый простой способ создать свой источник установочных пакетов NuGet – использовать общую папку. Как это сделать подробно описано в статье "Локальный репозиторий". Однако это далеко не всегда лучший вариант. Например, если необходимо обеспечить доступ через интернет. Давайте рассмотрим как можно быстро развернуть свой NuGet-сервер.

Создание и развертывание NuGet Server

Для создания и развертывания собственного сервера NuGet потребуются:

  • Microsoft IIS (желательно 7.0 и выше).
  • Visual Studio 2010 или Visual Web Developer 2010 Express с установленным NuGet.

Разберем весь процесс по шагам:

  1. Создаем новый проект: ASP.NET Empty Web Application (не MVC) с любым названием.
  2. Добавляем в проект NuGet.Server.  Для этого можно или воспользоваться диалогом Manage NuGet Packages или в Package Manager Console ввести следующую команду:
    PM> Install-Package NuGet.Server
  3. По умолчанию добавлять установочные пакеты можно только вручную (например, через FTP). Чтобы разрешить их публикацию из командной строки с помощью nuget.exe, необходимо установить пароль (API key) в файле web.config (обратите внимание – он будет один для всех разработчиков):
    <add key="apiKey" value="секретный-api-key" />
  4. NuGet.Server использует для хранения установочных пакетов папку Packages, расположенную в корне созданного проекта. Указать свой вариант можно с задав параметр packagesPath:
    <add key="packagesPath" value="путь-до-места-хранения-пакетов" />
  5. Если уже есть готовые пакеты, то копируем их в папку Packages (или определенную выше, если она находится внутри папки проекта). Чтобы при публикации веб-сайта они были перенесены на сервер, необходимо для них всех в окне Properties установить параметр Action в значение Content.
  6. Публикуем проект на рабочем сервере. Самый оптимальный способ – воспользоваться пунктом Publish в контекстом меню проекта. После окончания переноса файлов сервер NuGet готов к работе.
  7. Вместе с NuGet.Server в проект устанавливается библиотека ELMAH. Она предназначена для ведения журнала ошибок. Просмотреть его можно введя в адресную строку браузера "http://[адрес-сайта]/elmah.axd". При необходимости можно разрешить удаленный просмотр журнала с помощью установки параметра allowRemoteAccess в значение "yes" (файл web.config):
    <elmah>
      <security allowRemoteAccess="yes" />
    </elmah>

Возможные проблемы при уст��новке

  • Если включена поддержка публикации установочных пакетов из командной строки пакетов, то необходимо дать веб-приложению права на запись в папку, где они будут размещаться. Это особенно актуально для виртуальных площадок (shared hosting).
  • Иногда требуется установка параметра multipleSiteBindingsEnabled в значение true:
    <system.serviceModel>
        <serviceHostingEnvironment aspNetCompatibilityEnabled="true" 
                                   multipleSiteBindingsEnabled="true" />
    </system.serviceModel>
  • NuGet ServerНа некоторых серверах возникала ошибка, если в настройках IIS было включено несколько вариантов аутентификации. Чтобы избежать этого, необходимо оставить только один из них, используя IIS Manager (раздел Authentication). Как правило это "Anonymous Authentication". Ниже будет также рассмотрен вариант с "Windows Authentication".
  • Если на сервере установлен модуль WebDAV, то возможны проблемы с публикацией установочных пакетов из командной строки. Это происходит из-за того, что nuget.exe использует метод PUT. В результате сервер сообщает об ошибке 405 "Method Not Allowed". Самый простой и эффективный путь решения – удалить указанный модуль. Для этого на виртуальных площадках необходимо обратиться в техническую поддержку. На выделенных или собственных серверах можно воспользоваться пунктом Roles > Web Server (IIS) > Remove Role Services в панели Server Manager. Необходимо отметить, что просто отключение WebDAV в этом случае не помогает.

Публикация установочных пакетов

Как уже было отмечено, по умолчанию можно публиковать установочные пакеты только вручную. Для этого нужно скопировать их в соответствующую папку на сервере. При этом можно использовать любой доступный способ – менеджер файлов в панели управления хостингом, FTP или удаленный доступ. Никаких дополнительных действий после этого не требуется. Сервер самостоятельно заметит изменения и обновит список пакетов.

Для публикации файлов с помощью утилиты NuGet для командной строки, необходимо установить параметр apiKey в web.config. Тогда разработчики смогут добавлять установочные пакеты командой:

nuget.exe push {имя-установочного-пакета} –s {адрес-сервера} {apiKey}

Например: nuget.exe push mycompany.mylib.0.1.1.1 -s http://repository.mycompany.ru/ superPassword

Есть один важный момент при совместном использовании описанных вариантов публикации установочных пактов. Файлы, добавленные вручную, могут не иметь разрешения для изменения их веб-сервером. Поэтому при попытке перезаписать их с помощью nuget.exe будет выведено сообщение об ошибке. Для устранения этой ситуации необходимо назначить соответствующие права самостоятельно.

Настройка NuGet в Visual Studio

NuGet ServerПосле запуска сервера и публикации на нем установочных пакетов, остается только произвести настройку дополнения NuGet в Visual Studio на рабочих местах. Для этого в диалоге Package Sources, который доступен через меню Tools > Options > Package Manager, нужно добавить адрес нового сервера в формате: http://[server.com]/nuget

Теперь он, наряду с остальными заданными там, будет использоваться для поиска и загрузки установочных пакетов. Перезапуска Visual Studio не требуется. Для проверки сделанной настройки можно вывести список доступных библиотек командой в Package Manager Console:

PM> Get-Packages –ListAvailable –Source 'имя-нового-источника-пакетов'

Дополнительная информация

Более подробно процесс использования NuGet и создания установочных пакетов для него описан в статьях, опубликованных в разделе NuGet.

Контроль доступа

Созданный NuGet.Server не содержит собственных средств для контроля доступа. Поэтому любой пользователь, знающий адрес сервера, может обратиться к нему и загрузить установочные пакеты. Это не всегда приемлемо. Например, если хранилище должно быть доступно из интернета, но при этом в нем размещены библиотеки, не предназначенные для распространения.

При использовании выделенного или собственного сервера наиболее простой путь это включение аутентификации Windows. При этом будем считать, что необходимые учетные записи на нем уже созданы.

В IIS Manager необходимо открыть раздел Authentication и выбрать в качестве единственного способа авторизации "Windows Authentication". После этого при попытке подсоединения для публикации или загрузки установочных пакетов будет выводиться запрос имени пользователя и пароля.

На рабочих местах, где вероятность доступа посторонних минимальна, можно упростить доступ к такому серверу. Для этого адрес сервера, имя пользователя и пароль необходимо внести в Windows Vault, который доступен в Панели Управления (Control Panel > Credential Manager). После этого NuGet сможет использовать их при загрузке и публикации установочных пакетов, не задавая дополнительного вопроса.

Добавить комментарий