Migrar aplicações no IIS (Internet Information Services) pode ser um processo complexo e desafiador, mas aqui faremos um POST sobre como migrar sites e aplicativos de forma simples, facilitando esta tarefa. Não vamos entrar aqui em questões de segurança de pacotes (por exemplo, se por segurança deve-se instalar ou não o .NET Framework 3.5). Nosso foco será demonstrar e apoiar como migrar aplicações e sites do IIS de um ambiente para outro.

Criação do novo ambiente

    Configurações do IIS

    No ambiente novo, instale a role do IIS. Dentre algumas práticas, sugerimos ter a aplicação em um disco diferente do sistema operacional, para isso sugerimos que leia e excute nosso posso sobre como Alterar o local do IIS. Também sugerimos olhar nosso post para Criar uma rotina de limpeza dos Logs do IIS.

    Roles e Features do Windows

    Durante a criação do novo ambiente verifique os pacotes instalados no ambiente atual, para isso abra o PowerShell e execute o comando:

    Get-WindowsFeature | ft -autosize

    Obtenha a lista de pacotes instalados, verificando o Display Name e o Name . Em seguida, no novo servidor, repita o comando acima e verifique (se guiando pela coluna Display Name) o que irá instalar, para cada pacote a ser instalado obtenha a coluna Name neste novo ambiente (poder ser diferente) e instale as funcionalidades, com o comando abaixo (alterando a parte em cinza pelo Name obtido do comando acima):

    Install-WindowsFeature Name

    Uma dica importante: Dependendo da diferença entre os ambientes antigo e novo (por exemplo se for migrado do Windows Server 2012 para o Windows Server 2016) pode existir uma diferença nas Roles e nas Features a serem instaladas (tais como Application Server e o .NET Framework 3.5). Se for este o caso veja a forma de instalação no seu ambiente novo.

    Pacotes e requisitos adicionais ao ambiente

      Procure programas específicos (no painel de controle, nos serviços do Windows) que existem no ambiente atual que sejam usados em sua aplicação (como Redis, Crystal Reports, etc.). Para cada um desses programas, instale e configure no ambiente novo.

      Migrando sites com o WebDeploy

      Usaremos a ferramenta Web Deploy para a migração de sites, para isso faça os procedimentos descritos aqui tanto no ambiente antigo e no novo.

      Faça o download e instale o Web Deploy. Dentro da instalação, instale todos os componentes.

      Nas roles do servidor, expanda Web Server(IIS) > Management Tools e instale as funções Management Service e IIS Management Scripts and Tools. Se possível, reinicie o servidor.

      Realizando o backup e restore de um site

      Abra a console do IIS (se já estava aberta, feche e abra novamente) e:

      • Para Backup: escolha um site que deseja migrar, clique com o botão direito, clique no menu Deploy e escolha Export Configuration. Na primeira tela do Wizard clique em Advanced Settings e defina uma senha, execute o resto do Wizarda e defina um local para salvar.
      • Para Restore: Abra o servidor (aguarde carregar), clique com o botão direito sobre o servidor, clique no menu Deploy e escolha Import Server os Site Package. Na primeira tela do Wizard clique em Advanced Settings e escolha o arquivo que deseja recuperar

      Realizando o backup e restore por linha de comando

      Para executar por linha de comando é necessário o PATH do programa, para ele ser executado de qualquer lugar, para isso abra o Windows Explorer, acesse C:\Program Files\IIS e acesse a pasta que está o executável msdeploy.exe, copie o caminho exato de onde se localiza o msdeploy.exe e abra as propriedades do sistema (por exemplo executando o comando sysdm.cpl), vá em Advanced system settings e clique em Environment Variables. Vá em System Variables, clique em Path e adicione (no fim da linha colocando ; antes), o caminho da pasta onde se localiza o msdeploy.exe. Por fim, clique em OK para confirmar, abra o PowerShell e tente executar o comando msdeploy.exe de qualquer pasta.

      Antes de executar é importante entender como usar por linha de comando, ao executar o comando msdeploy.exe irá lhe listar as possíveis sintaxes que podem ser usadas. Usaremos aqui as seguintes variáveis no comando:

      SintaxeServe para
      -verb:syncA ação será de sincronizar (copiar o conteúdo entre) a origem e o destino
      -source:A origem (no nosso caso pode ser apphostconfig para site ou package para arquivo)
      -dest:O destino (da mesma forma, pode ser apphostconfig para site ou package para arquivo)
      -replaceCaso desejamos alterar algum conteúdo ao executar a sincronia
      apphostconfigPara informar o aplicativo, no IIS
      packagePara informar o arquivo e a senha

      Backup

      Para fazer a cópia (sincronização) de um site para um arquivo (backup), no ambiente antigo, execute:

      MSDeploy.exe -verb:sync -enableLink:AppPoolExtension -source:appHostConfig=nomedosite_no_iis -dest:package=C:\temp\nomedosite.seudominio.com.br.zip,encryptPassword=SenhaDesseArquivo

      Caso queira fazer isso para todos os sites que parados no servidor IIS, defina uma senha, liste os sites parados e crie um loop para cada site encontrado, com o seguinte comando:

      $BkpFolder = "C:\temp"
      $Password = "SenhaDesseArquivo"
      Get-Website | Where-Object State -EQ "Stopped" | ForEach-Object {
          $IISSite = $_.Name
          MSDeploy.exe -verb:sync -enableLink:AppPoolExtension -source:appHostConfig="$IISSite" -dest:package="$BkpFolder$IISSite.zip,encryptPassword=$Password"
      }

      Restore

      Para fazer a cópia (sincronização) de um arquivo para um site (restore), no novo ambiente, copie o arquivo e execute:

      msdeploy.exe -verb:sync -source:package=C:\temp\nomedosite.seudominio.com.br.zip,encryptPassword=SenhaDesseArquivo -dest:apphostconfig=nomedosite_no_iis -replace:objectName=virtualDirectory,scopeAttributeName=physicalPath,match="c:\\",replace="e:\"

      Para restaurar o site, no novo ambiente, mas colocando em um novo disco (no exemplo abaixo, em vez de C:\inetpub\wwwroot será no E:\inetpub\wwwroot ) execute:

      msdeploy.exe -verb:sync -source:package=C:\temp\nomedosite.seudominio.com.br.zip,encryptPassword=SenhaDesseArquivo -dest:apphostconfig=nomedosite_no_iis -replace:objectName=virtualDirectory,scopeAttributeName=physicalPath,match="c:\\",replace="e:\"

      Finalizando a migração

      Uma sugestão é que, no ambiente novo, o nome do site seja também sua URL (o nome da conexão bind). Sendo assim, no ambiente novo, em vez de nomedosite_no_iis pode-se usar nomedosite.seudominio.com.br.

      Feito a migração, teste o site (pode-se alterar o arquivo host para o nome apontar para o novo ambiente) e, estando tudo correto, finalize a migração sobre a parte de infraestrutura (proxy, nat, dns, etc.)

      Fontes/Referências

      NVLAN – Alterar o local do IIS
      NVLAN – Criar uma rotina de limpeza dos Logs do IIS

      https://iis.net/downloads/microsoft/web-deploy
      https://serverfault.com/questions/815025/how-to-install-application-server-role-on-windows-server-2016
      https://techcommunity.microsoft.com/t5/iis-support-blog/simple-steps-in-migration-of-websites-using-webdeploy/ba-p/343083

      Mais Informações

      Esperamos ter ajudado e estamos a disposição para mais informações.

      Se você tem interesse em algum assunto específico, tem alguma dúvida, precisa de ajuda, ou quer sugerir um post, entre em contato conosco pelo e-mail equipe@nvlan.com.br.

      NVLAN - Consultoria