Игорь Шаститко: родился 31 октября 1974 г. в СССР (ныне Украина)... Закончил школу, университет (по специальности компьютеры и сети)... Женат, замечательная жена... Проживаю в г.Киев, Украина.
Работаю экспертом по ИТ-инфраструктуре в департаменте стратегических технологий Майкрософт Украина. Собственно, этот блог - дань моему увлечению работой :)
Twitter @iwalker2000 или Facebook. Все новое оперативно кидаю туда, как и анонсы постов блога/мероприятий/вебкастов, да и просто - о жизни и "делах наших скорбных покалякаем". Так что добро пожаловать в Followers или друзья/подписчики - пообщаемся в "почти" реале :)
Кроме работы (собственно компьютеров и ПО) имеются другие увлечения, как то - путешествия, фотография, электронные гаджеты (об этом всем смотри мой личный блог на Wordpress.com, не имеющий никакого отношения к работе ;) ); авиация (увы, от летающих многометровых радиоуправляемых монстров перешел исключительно на стендовое моделирование от Italeri и Ravell); автомобили (чувствую себя плохо, если не прокачусь с ветерком 2000км в месяц по просторам автобанов), масштабные модели железных дорог (Marklin scale Z 1:220) и многое другое, на что хватает времени...
Недавно мне в роли консультанта пришлось выполнять небольшой проект, связанный с IIS7. Задача, в принципе, тривиальная - в рамках конкурсной программы для студентов по ASP.NET обеспечить хостинг сайтов всем желающим принять участие в таком конкурсе. Казалось бы - чего проще? - запускай IIS и создавай там сайты по мере необходимости. Но, как оказалось, не смотря на поднятую в ВУЗе, где все это планировалось делать, сеть под управления Active Directory, ответственным за поддержку сайтов был назначен со стороны ВУЗа, казалось бы, вполне подходящий на эту роль человек - системный администратор, занимающийся поддержкой сетей (Cisco) и веб-порталов (внутреннего и внешнего, на Linux). Нет, он не коим образом не был настроен против Windows Server 2008 и IIS7, просто для него лично это была лишняя, совершенно не нужная нагрузка - изучать новые технологии и все такое. Поэтому, посидев за пивком (первая итерация была назначена на выходные) мы достаточно быстро пришли к консенсусу, что идеальным выходом из ситуации было бы решение, которое позволяло ему простым скриптом создавать сайты на IIS7, базу данных для проекта на MS SQL Server 2005 и предоставлять доступ к вновь созданному сайту/базе через создаваемую отдельную учетную запись пользователя посредством ftp или консоли MS SQL. Итак, требовалось нечто, обеспечивающее простой провижининг в IIS, не вдаваясь во все тонкости процесса управления IIS со стороны плохо подготовленного админа. Вообще-то, у Microsoft есть решение для разработки систем провижининга под названием Microsoft Provisioning System Software Development Kit, но уж сильно оно мощное и всеохватывающее для такой небольшой задачи, да еще и требующее программинга, чего делать абсолютно не хотелось.
С другой стороны, на сайте сообщества IIS.NET есть серия статей, посвещенных планированию и провижинингу инфраструктуры IIS7 для общего хостинга сайтов. Эти материалы помогли не сколько с конкретными скриптами, сколько действительно с принятием решений относительно будущей архитеткуры моего маленького сценария работы. Итак, после чтения RTFM решение сложилось в голове довольно быстро и выглядело вполне лаконично.
Вот, собственно, и .CMD файл, для работы которого используются 4 входящих парамера: алиас будущей учетной записи для управления сайтом пользователем, ID создаваемого сайта, полное имя пользователя в AD, пароль пользователя:
mkdir c:\userweb\IT\%1 rem создать каталог пользователя (по алиасу). IT - имя домена, с:\userweb - корневой калатог ftp сайта. пользователи будут получать свои каталоги как имя домана\алиас dsadd user "cn=%3,ou=Web Users,dc=it,dc=root,dc=edu,dc=ua" -samid %1 -pwd %4 rem создать пользователя в контейнере Web Users поддомена root.edu.ua icacls c:\userweb\IT\%1 /grant IT\%1:(M) rem предоставить права созданной учетной записи на работу с каталогом appcmd.exe set config -section:system.applicationHost/sites /+"[name='%1',id='%2']" /commit:apphost rem создать новый веб-сайт в IIS7 с именем по алиасу пользователя и указанным ID appcmd.exe set config -section:system.applicationHost/sites /+"[name='%1',id='%2'].bindings.[protocol='http',bindingInformation='*:80:%1.university.edu.ua']" /commit:apphost rem привязать к созданному сайту протокол HTTP, порт 80 и доменное имя ввиде <алиас>.university.edu.ua appcmd.exe set config -section:system.applicationHost/sites /+"[name='%1',id='%2'].[path='/',applicationPool='DefaultAppPool']" /commit:apphost rem привязать созданный сайт к пулу приложений по умолчанию appcmd.exe set config -section:system.applicationHost/sites /+"[name='%1',id='%2'].[path='/',applicationPool='DefaultAppPool'].[path='/',physicalPath='c:\userweb\IT\%1']" /commit:apphost rem привязать к созданному сайту как домашний каталог ранее созданный каталог c:\userweb\IT\<алиас>, который доступен пользователю по ftp для редактирования содержимого сайта sqlcmd -v dbname="%1" username="IT\%1" username2="%1" pwd="%4" -i createdb.sql -S dbserver rem при помощи sqlcmd выполнить ранее сгенерированный консолью управления SSMS скрипт createdb.sql, создающий базу для пользователя и передать в нее значения
mkdir c:\userweb\IT\%1 rem создать каталог пользователя (по алиасу). IT - имя домена, с:\userweb - корневой калатог ftp сайта. пользователи будут получать свои каталоги как имя домана\алиас
dsadd user "cn=%3,ou=Web Users,dc=it,dc=root,dc=edu,dc=ua" -samid %1 -pwd %4 rem создать пользователя в контейнере Web Users поддомена root.edu.ua
icacls c:\userweb\IT\%1 /grant IT\%1:(M) rem предоставить права созданной учетной записи на работу с каталогом
appcmd.exe set config -section:system.applicationHost/sites /+"[name='%1',id='%2']" /commit:apphost rem создать новый веб-сайт в IIS7 с именем по алиасу пользователя и указанным ID
appcmd.exe set config -section:system.applicationHost/sites /+"[name='%1',id='%2'].bindings.[protocol='http',bindingInformation='*:80:%1.university.edu.ua']" /commit:apphost rem привязать к созданному сайту протокол HTTP, порт 80 и доменное имя ввиде <алиас>.university.edu.ua
appcmd.exe set config -section:system.applicationHost/sites /+"[name='%1',id='%2'].[path='/',applicationPool='DefaultAppPool']" /commit:apphost rem привязать созданный сайт к пулу приложений по умолчанию
appcmd.exe set config -section:system.applicationHost/sites /+"[name='%1',id='%2'].[path='/',applicationPool='DefaultAppPool'].[path='/',physicalPath='c:\userweb\IT\%1']" /commit:apphost rem привязать к созданному сайту как домашний каталог ранее созданный каталог c:\userweb\IT\<алиас>, который доступен пользователю по ftp для редактирования содержимого сайта
sqlcmd -v dbname="%1" username="IT\%1" username2="%1" pwd="%4" -i createdb.sql -S dbserver rem при помощи sqlcmd выполнить ранее сгенерированный консолью управления SSMS скрипт createdb.sql, создающий базу для пользователя и передать в нее значения
Все, администратору осталось только подключиться удаленно терминалом или через winrs к серверу с IIS и вполнить скрипт с нужными параметрами...
Файлы .cmd и вызываемый из него .sql смотрите во вложении к посту. Если же кому-то будет необходимо автоматизировать какие-то сценарии для работы с IIS7 - рекомендую сразу устанавливать AdminPack - он позволит вам на основе ваших предыдущих действий сгенерировать различные скрипты - как с применением appcmd, использованных в моем примере, так и, например, на C# коде, что позволит встраивать их в собственный код.
Об использовании AdminPack для автоматизации управления IIS7 я напишу в ближайшее время в продолжении данного поста. Кроме того, хочу заметить, что не смотря на использование AdminPack с его неплохими средствами визуализации статистики, на следующем этапе я воспользовался LogParser для сбора и визуализации статистики отдельных сайтов через веб. Об общих возможностях LogParser вы можете почитать в моей статье здесь, а о применении в конкретном примере я напишу вслед за постом об AdminPack.
Мой коллега опубликовал свой опыт по автоматизированному управлению сайтами, доступом к содержимому и
Для сайтов нужно создавать DNS записи, или IIS сам всё сделает?
DnsCmd <ServerName> /RecordAdd <Zone> <NodeName> [/Aging] [/OpenAcl] [<Ttl>] <RRType> <RRData>
конечно не сделает - не барское это дело, чтобы IIS управлял DNS. Но фишка в том, что DNS под линухом у товарищей, а DNSCMD, хоть программа и отличная, с линухами не очень дружит. потому просили DNS не трогать. хотя в общем случае - было бы очень полезно :)
Итак, в предыдущем посте, посвященном провижинингу сайтов под управлением IIS7 , я упомянул о таком интересном
Увы, оказывается, протестировать производительность решений в виртуализации вообще и Microsoft Hyper-V
Вопрос с DNS можно решить так - просто настроить запись *.edu.ua в зоне учебного заведения на ваш IIS и все.
В случае нахождения такого сайта - будет показываться сам сайт, обработчик для отсутствия также тривиален.
Коллеги и друзья! Хочу напомнить, что с 22 октября 2008 по 26 ноября 2008 года Майкрософт Украина проводит