Pull to refresh

Настройка виндового веб-сервера без RDP

Reading time4 min
Views5K
Совсем недавно понадобилось настроить очередной веб-сервер. Как раз в это время у меня было весеннее обострение PowerShell. В общем, в качестве небольшой разминки, я решил настроить веб-сервер без RDP.

Итак задача: есть машина с Windows 2008 R2, которая находится где-то в Англии, нужно установить IIS, .NET 4.0 и настроить пару веб-сайтов. Есть несколько вариантов как это сделать удаленно и из командной строки, но сегодня спонсором будет PowerShell Remoting. Для того, чтобы быль стала явью, надо совсем немного, собственно, включить PowerShell Remoting.

Настройка PowerShell Remoting на сервере


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

Enable-PsRemoting -Confirm

Если все хорошо, то теперь на машине всегда будет PowerShell Remoting. На этом месте RDP можно выключать. Этот рудимент графических интерфейсов нам больше не понадобится. Следующий шаг — это настройка клиента.

Настройка PowerShell Remoting на клиенте


Как по мне, так PowerShell писали параноики. Запрещено все что можно и не можно. Вот и подключаться к серверам тоже запрещено. Это я конечно немного утрирую. Если все находится в одном домене, то все будет прозрачно. Но в моей ситуации машина вне домена и даже не в одной сети. В общем, я решил что буду аккуратным и разрешу любые внебрачные связи.

set-item wsman:localhost\client\trustedhosts -value * -force
restart-service WinRm


Вот и подошли к самому интересному. Подключаемся к серверу.

enter-pssession -ComputerName 192.0.32.10 -Credential "WS0114\Administrator"

Вы себе представить не можете как я ждал этого момента. Нервничал, ночи не спал. А тут бац, и без барабанного боя я уже в командной строке на машине где-то на другом конце земли. В целом да. Самый нервный этап мы прошли. Мы на удаленной машине. И осталось совсем немного.

Инсталляция IIS


Тут все просто:

Import-Module ServerManager
Add-WindowsFeature Web-Server


Это правда поставит кучу всякого ненужного, поэтому я бы посоветовал выполнить Get-WindowsFeature, и поставить только нужные фитчи.

Инсталляция .NET 4.0


А вот тут фейл номер два. Простой команды чтобы установить .NET 4.0 пока что нет. Зато есть несколько непростых. Свой вариант я опишу чуть ниже, а для отчетности, вкратце расскажу про наверное более правильный. У Microsoft существует с десяток всяких «центральных» репозитариев. Так и для веб-серверов есть Web Platform Installer. И у этой штуки есть Command Line интерфейс. Если не задаваться вопросом инсталляции WebPi Command Line, то установка .NET 4.0 выглядела бы как:

WebpiCmdline /Products: NETFX4RTM /AcceptEula

Но вернемся лучше к моему варианту. Если решать задачу в лоб, то это два простых шага. Скачать инсталлятор и запустить его из командной строки. Основная проблема с первым шагом. В PowerShell нет нормальных средств для скачивания файлов. Поэтому я написал маленький модуль который оборачивает .NET WebClient. Правда, меня поджидала новая проблема. Для того что-бы установить PsUrl, его надо скачать. Круг замкнулся. Но меня было уже не остановить(обострение). Почувствовав в себе силы создать еще один велосипед, я решил что неплохо было бы иметь инсталлятор модулей. Бумс и интернеты пополнились еще одним проектом.

Теперь вопрос скачивания решается так:

# Устанавливаем PsGet
(new-object Net.WebClient).DownloadString("https://github.com/chaliy/psget/raw/master/GetPsGet.ps1")  | Invoke-Expression
# Устанавливаем PsUrl
install-module https://github.com/chaliy/psurl/raw/master/PsUrl/PsUrl.psm1
# Скачиваем .NET 4.0
get-url http://download.microsoft.com/download/9/5/A/95A9616B-7A37-4AF6-BC36-D6EA96C8DAAE/dotNetFx40_Full_x86_x64.exe -ToFile dotNetFx40_Full_x86_x64.exe
# Устанавливаем .NET 4.0
start-process .\dotNetFx40_Full_x86_x64.exe -ArgumentList "/q /norestart" -Wait


Тут следует заметить, что PsGet и PsUrl теперь у вас в модулях, но при этом они не импортируются при старте профиля.

Настраиваем сайты


Импортнем все что надо:
Import-Module WebAdministration
На этом сервере все приложения будут под .NET 4.0, поэтому:

Set-WebConfigurationProperty /system.applicationHost/applicationPools/applicationPoolDefaults -name managedRuntimeVersion -value v4.0

Поднимем тестовый сайт:

New-Item "C:\inetpub\example" -ItemType Directory
New-WebSite Example -Port:8080 -PhysicalPath:"C:\inetpub\example"
Get-Url http://example.com -ToFile "C:\inetpub\example\index.html"
Get-Url http://localhost:8080/


Вот собственно и все.

Exit-PsSession

Если что, можно все одним скриптом. В целом меня процес более или менее удовлетворил. Фейлов не так и много. «Подводные камни» удалось обойти. Кстати, о «подводных камнях». Их достаточно много, я не стал их описывать в этом топике, но если возникнут проблемы, спрашивайте.

P.S. Весеннее обострение продолжается.

[Upadate]

Оказалось что я немого соврал. Простите. Скачивание файлов в PowerShell есть. Причем с плюшками: докачиванием, асинхронным скачиванием, менджером скачиваний и тп. Собственно использует компонент Винды — BITS. Микрософт традиционно лажанул с названием поэтому модуль называется BitsTransfer.

Import-Module BitsTransfer
# Скачиваем .NET 4.0
Start-BitsTransfer http://download.microsoft.com/download/9/5/A/95A9616B-7A37-4AF6-BC36-D6EA96C8DAAE/dotNetFx40_Full_x86_x64.exe
# Устанавливаем .NET 4.0
start-process .\dotNetFx40_Full_x86_x64.exe -ArgumentList "/q /norestart" -Wait
Tags:
Hubs:
+41
Comments56

Articles

Change theme settings