IIS: Servidores Web rápidos e fáceis

Você pode instalar servidores Web com mais rapidez e facilidade com o Windows PowerShell para ajudá-lo.

Jason Helmick

Pense sobre quantas vezes você instala o IIS. Não muito? Realmente? Considere a plataformas como o Exchange e SharePoint que precisa do IIS como software de pré-requisito, implantações de farm da Web, teste de ambientes e ambientes de desenvolvimento. Você pode gastar mais tempo instalando o IIS do que você imagina.

Adicione a isso a necessidade de automação de recuperação de desastres. Você pode trazer seu farm da Web on-line em minutos? Instalando e Configurando o IIS junto com seus Web sites são uma tarefa simples. É um processo longo e chato se você tem um monte de servidores.

Ninguém quer passar fins de semana Configurando servidores. Você quer gerenciar seu farm da Web, Web sites e todos os que a Web "coisas" segunda a sexta-feira, nove para cinco. Você deseja aproveitar todas as oportunidades para acelerar e automatizar as tarefas de seu trabalho.

Este guia passo a passo irá ajudá-lo a implantar o IIS e o padrão sites da Web para um grupo de servidores, tudo de uma só vez, em cerca de quatro minutos. Você não pode fazer isso com a ferramenta GUI Server Manager e o GUI o Gerenciador do IIS. Na verdade, o GUI é parte do problema. Como você pode fazer essas coisas mágicas? Windows PowerShell. Observação: Isso se aplica ao IIS 7.5 e 8 IIS.)

Comunicação remota do PowerShell

Antes de começarmos, você tem Windows PowerShell Remoting ativado em seus servidores? Se não, você deve. Isso é como este plano vai funcionar. Antes de entrar para a parte rápida e fácil de implantar, vamos examinar como obter o Windows PowerShell Remoting ativado, caso você ainda não fez isso.

Há dois métodos para fazer isso. Se você estiver indo para tentar isso em um ambiente de teste, o primeiro método pode ser mais rápido. Há dois recursos de Windows PowerShell, que você precisará habilitar: Execução de script e Windows PowerShell Remoting. O primeiro método requer que você visite cada servidor que você deseja gerenciar. Você pode usar o Remote Desktop Protocol (RDP) ou rede de tênis e executar dois comandos.

1.   Abra um console do Windows PowerShell com privilégios administrativos e use o cmdlet Enable-PSRemoting para habilitar Windows PowerShell Remoting em cada servidor:

PS> Enable-PSRemoting -Force

2.   Você vai querer usar alguns dos módulos adicionais de cmdlets armazenados nesses servidores. Para usar isso mais tarde, você precisará ser capaz de executar scripts — que, por padrão, não permitem que o Windows PowerShell. Então, vamos mudar isso:

PS> Set-ExecutionPolicy RemoteSigned –Force

Neste ponto, você estará pronto para implantar e gerenciar servidores IIS. Se você tiver centenas de servidores para gerenciar, você vai querer emitir uma diretiva de grupo para efetuar essas alterações. Correr ao redor para todos os servidores é um ridículo desperdício de tempo, por isso aqui estão as etapas para habilitar Windows PowerShell Remoting com um objeto de política de grupo (GPO):

  1. Habilite "Permite configuração automática de ouvintes" e defina IPv4 e IPv6 para "*". Você encontrará a chave em: Computador configuração Administrativos\Componentes do Windows\Windows remoto Management\WinRM Server.
  2. Habilitar a execução de script sob "Virar na execução do Script" e defina a configuração de diretiva "Permitir apenas assinado scripts de" ou "Permitir scripts locais e remotos scripts assinados". Você encontrará a chave em: Computador configuração Administrativos\Componentes do Windows\Windows PowerShell.
  3. Defina o serviço Windows Remote Management (WinRM) para iniciar automaticamente, esta chave: Configuração do computador configurações do Windows \ serviços.

Se você tiver o Firewall do Windows em execução nesses computadores, você precisará uma regra de entrada porque o WinRM escuta na porta 5985. Você encontrará a chave em: Computador Configuration\Policies\Windows Settings\Windows Firewall com segurança avançada.

Implantar os servidores de Web

Agora vem a diversão. Isso é bastante simples, como leva apenas algumas linhas únicas de Windows PowerShell para fazer a mágica acontecer.

1.   Armazene uma lista de todos os nomes de servidor que estão indo para ser parte da implantação de uma variável. Você pode criar uma lista no bloco de notas se você deseja e, em seguida, usa o Windows PowerShell para ler essa lista:

PS> $servers= get-content c:\servers.txt

Isso é um pouco desleixado, especialmente quando se lida com uma lista de grandes servidores. É melhor para que o Windows PowerShell faça todo o trabalho. Você sabia que Active Directory cmdlets que você pode obter uma lista de nomes de computador? Para usar os cmdlets do Active Directory, você precisará o ferramentas de administração de servidor remoto (RSAT) para o Active Directory instalado. Se você sabe o segredo para arquitetura de comunicação remota implícita do Windows PowerShell, você pode usar que sem instalar os cmdlets localmente. Com o RSAT instalado, a primeira tarefa é importar o módulo dos cmdlets do Active Directory:

PS> Import-Module ActiveDirectory

Depois de importado, você pode usar o cmdlet Get-ADComputer para pegar os nomes de computador de sua escolha. Neste exemplo, os computadores aos quais nós vai implantar IIS todos os começam com o nome "Web". O cmdlet Get-ADComputer para encontrar somente os computadores que começam com o nome "Web" e canalizar para Select-Object para pegar somente o nome do computador do filtro:

PS> $servers= Get-ADComputer -filter 'name -like "web*"' | Select-Object -ExpandProperty name

2.   Agora é hora de usar o poder do Windows PowerShell Remoting para fazer levantamento do que normalmente seria um longo e chato processo fácil. Vamos implantar o IIS. Em primeiro lugar, nós vamos construir uma sessão para todos os servidores foram coletados:

PS> $session=New-PSSession -ComputerName $servers

3.   O próximo passo é importar o módulo do Gerenciador do servidor em computadores remotos. Este módulo tem os cmdlets que irão instalar e remover funções de servidor e os recursos. Estamos usando o cmdlet Invoke-Command com um parâmetro para a sessão que criamos anteriormente. A coisa interessante sobre isso é que todos os servidores receberão imediatamente quaisquer instruções enviadas dentro do bloco de script {}:

PS> Invoke-Command -Session $session {Import-module ServerManager}

Esta próxima etapa não é necessária no processo. Este apenas verifica se o IIS já estiver instalado nos computadores remotos. O cmdlet Get-WindowsFeature faz um bom trabalho do presente:

PS> invoke-command -Session $session {Get-WindowsFeature web-server} | format-table -AutoSize

Vamos falar sobre a instalação do IIS por alguns instantes antes de nós mergulhar os comandos. O IIS tem uma instalação padrão que permite somente páginas estáticas da Web. Isso é ótimo para razões de segurança, mas a maioria de nós terá alguns dos componentes adicionais para as nossas próprias necessidades de aplicativo.

Quando você estiver usando a GUI de instalação, os componentes são listados e você pode simplesmente a caixa de seleção. Com o Windows PowerShell, você tem que dizer os computadores remotos especificamente quais componentes você gostaria. Se você está sentado em qualquer computador Windows Server 2008 R2 ou o Windows Server 8, por exemplo, você pode usar o Get-WindowsFeature para listar todos os componentes disponíveis para o IIS (Observe que você deve importar o módulo ServerManager primeiro):

PS> Get-WindowFeature *web*

Depois que você souber os nomes dos componentes, você pode usar o Add-WindowsFeature para instalá-los. Comece com o servidor Web e, em seguida, adicione cada componente, separado por vírgulas:

PS> Add-WindowsFeature Web-Server, ASP

Você pode instalar todos os componentes do IIS sem digitar uma longa seqüência deles. Tenha em mente que instalar tudo não é uma boa idéia por razões de segurança, mas o cmdlet Add-WindowsFeature tem um parâmetro que vai ajudar:

PS> Add-WindowsFeature Web-Server -IncludeAllSubFeature

Agora de volta à nossa implantação remota do IIS. Queremos a instalação padrão e os componentes adicionais para o ASP e ASP.NET. Mais uma vez, vamos usar o cmdlet Invoke-Command. Uma vez que executar este comando, todos os servidores irão instalar o IIS:

PS> Invoke-command -Session $session {Add-WindowsFeature web-server,web-asp,web-asp-net}

4.   Para fins de teste, nós vamos implantar um conjunto de páginas da Web para os novos servidores de Web. Vamos usar um arquivo de testpage.asp e um Default. htm. Mapeamento de unidades para os servidores e copiar os arquivos para o site padrão tomaria muito tempo. Em vez disso, nós usaremos o Windows PowerShell e a lista de servidores para fazer a cópia.

Neste exemplo, os arquivos da Web estão localizados em c:\Arquivos. Copiá-los com o cmdlet Copy-Item para um destino que é um caminho UNC. UNC tem o nome do servidor. Passamos a lista de servidores (servidores de $) para o cmdlet Foreach-Object. Foreach will iterar através de cada nome de servidor no servidor de $. Para corrigir o caminho UNC para que nós não temos que digitar os nomes de servidor, use a variável especial do Windows PowerShell "$ _". Essa variável contém o nome do servidor atual de $Server:

PS> $servers | foreach{copy-item -Path c:\files\*.* -Destination "\\$_\c$\inetpub\wwwroot"}

Temos apenas implantado IIS e um site da Web padrão para um grupo de servidores em cerca de quatro minutos. Para testar os sites da Web, inicie o Internet Explorer usando a técnica descrita anteriormente. Este comando irá lançar um novo navegador para cada servidor e exibir a página de teste:

PS> $servers | foreach{Start-Process iexplore "http://$_/testpage.asp"}

Para fechar todos os navegadores, voltar ao Windows PowerShell e tente o seguinte:

PS> Stop-Process –Name iexplore

Remover servidores Web

Se você está testando implantações para recuperação de desastres, ou apenas testar essa técnica, você pode querer remover Tudo adicionamos e começar de novo de um ambiente limpo. Aqui é como remover arquivos do site Web e o servidor Web e executar uma reinicialização dos computadores:

PS> $servers | foreach{remove-item -Path "\\$_\c$\inetpub\wwwroot\*.*"} PS> Invoke-command -Session $session {Remove-WindowsFeature web-server,web-asp,web-asp-net} PS> Restart-Computer –Computername $servers -Force

A solução de script

A melhor parte sobre o Windows PowerShell é que assim que tiver feito algo no console, você pode copiá-lo em um arquivo de texto e torná-lo um script. Nenhum barulho, sem programação — automação pura. Se você quiser ser capaz de executar essa implantação a qualquer momento para recuperação de desastres e testes adicionais, copie os comandos detalhados aqui em um arquivo de texto chamado IISDeploy.ps1. Você só pode executar esse script quando você precisará implantar.

Este tipo de técnica abre todo um novo conjunto de possibilidades. Você pode automatizar implantar vários sites em um Web farm, gerar no farm de teste de carga ou até mesmo usar estas técnicas para outras funções e recursos no Windows.

Verifique no módulo paraadministração no IIS possui cmdlets para criar e configurar sites da Web, pools de aplicativo e muito mais. Se você precisar automatizar algo, Windows PowerShell fará seu trabalho muito mais fácil e mais rápido.

Jason Helmick  tem mais de 20 anos como consultor empresarial, instrutor e autor. Como o diretor de tecnologias do Windows PowerShell na Interface de formação técnica, ele se concentra na automação com o Active Directory e o IIS. Você pode ver mais sobre o IIS no seu próximo livro de Manning Publications, "Aprenda Windows IIS em um mês de almoços." Contatá-lo no JasonHelmick@gmail.com.

Conteúdo relacionado