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