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:
Sintaxe | Serve para |
-verb:sync | A 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) |
-replace | Caso desejamos alterar algum conteúdo ao executar a sincronia |
apphostconfig | Para informar o aplicativo, no IIS |
package | Para 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 te ajudado e estaremos sempre 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.