ASP.NET Implantação da Web usando o Visual Studio: Implantando em produção
por Tom Dykstra
Esta série de tutoriais mostra como implantar (publicar) um aplicativo Web ASP.NET em Serviço de Aplicativo do Azure Aplicativos Web ou em um provedor de hospedagem de terceiros, usando o Visual Studio 2012 ou o Visual Studio 2010. Para obter informações sobre a série, consulte o primeiro tutorial da série.
Visão geral
Neste tutorial, você configurará uma conta do Microsoft Azure, criará ambientes de preparo e produção e implantará seu aplicativo Web ASP.NET nos ambientes de preparo e produção usando o recurso de publicação com um clique no Visual Studio.
Se preferir, você pode implantar em um provedor de hospedagem de terceiros. A maioria dos procedimentos descritos neste tutorial são os mesmos para um provedor de hospedagem ou para o Azure, exceto que cada provedor tem sua própria interface do usuário para gerenciamento de conta e site. Você pode encontrar um provedor de hospedagem na galeria de provedores no site do Microsoft.com.
Lembrete: se você receber uma mensagem de erro ou algo não funcionar durante o tutorial, não deixe de marcar página Solução de problemas nesta série de tutoriais.
Obter uma conta do Microsoft Azure
Se você ainda não tiver uma conta do Azure, poderá criar uma conta de avaliação gratuita em apenas alguns minutos. Para obter detalhes, consulte Avaliação gratuita do Azure.
Criar um ambiente de preparo
Observação
Desde que este tutorial foi escrito, Serviço de Aplicativo do Azure adicionado um novo recurso para automatizar muitos dos processos para criar ambientes de preparo e produção. Confira Configurar ambientes de preparo para aplicativos Web no Serviço de Aplicativo do Azure.
Conforme explicado no tutorial Implantar no Ambiente de Teste, o ambiente de teste mais confiável é um site no provedor de hospedagem que é exatamente como o site de produção. Em muitos provedores de hospedagem, você teria que avaliar os benefícios disso em relação a um custo adicional significativo, mas no Azure você pode criar um aplicativo Web gratuito adicional como seu aplicativo de preparo. Você também precisa de um banco de dados e a despesa adicional para isso em relação às despesas do banco de dados de produção será nenhuma ou mínima. No Azure, você paga pela quantidade de armazenamento de banco de dados usada em vez de por cada banco de dados, e a quantidade de armazenamento adicional que você usará no preparo será mínima.
Conforme explicado no tutorial Implantar no Ambiente de Teste, no preparo e na produção, você implantará seus dois bancos de dados em um banco de dados. Se você quisesse mantê-los separados, o processo seria o mesmo, exceto que você criaria um banco de dados adicional para cada ambiente e selecionaria a cadeia de caracteres de destino correta para cada banco de dados ao criar o perfil de publicação.
Nesta seção do tutorial, você criará um aplicativo Web e um banco de dados a serem usados para o ambiente de preparo e implantará no preparo e teste lá antes de criar e implantar no ambiente de produção.
Observação
As etapas a seguir mostram como criar um aplicativo Web no Serviço de Aplicativo do Azure usando o portal de gerenciamento do Azure. Na versão mais recente do SDK do Azure, você também pode fazer isso sem sair do Visual Studio usando o Servidor Explorer. No Visual Studio 2013, você também pode criar um aplicativo Web diretamente na caixa de diálogo Publicar. Para obter mais informações, consulte Criar um aplicativo Web ASP.NET no Serviço de Aplicativo do Azure.
No Portal de Gerenciamento do Azure, clique em Sites e em Novo.
Clique em Site e, em seguida, clique em Criar Personalizado.
O assistente Novo Site – Criação Personalizada é aberto. O assistente de Criação Personalizada permite que você crie um site e um banco de dados ao mesmo tempo.
Na etapa Criar Site do assistente, insira uma cadeia de caracteres na caixa URL a ser usada como a URL exclusiva para o ambiente de preparo do aplicativo. Por exemplo, insira ContosoUniversity-staging123 (incluindo números aleatórios no final para torná-lo exclusivo caso ContosoUniversity-staging seja usado).
A URL completa consistirá no que você digitar aqui mais o sufixo que você vê ao lado da caixa de texto.
Na lista suspensa Região , escolha a região mais próxima de você.
Essa configuração especifica em qual data center seu aplicativo Web será executado.
Na lista suspensa Banco de dados , escolha Criar um novo banco de dados SQL.
Na caixa Nome da Cadeia de Conexão do Banco de Dados, deixe o valor padrão , DefaultConnection.
Clique na seta que aponta para a direita na parte inferior da caixa.
A ilustração a seguir mostra a caixa de diálogo Criar Site com valores de exemplo. A URL e a Região que você inseriu serão diferentes.
O assistente avança para a etapa Especificar configurações do banco de dados .
Na caixa Nome , insira ContosoUniversity mais um número aleatório para torná-lo exclusivo, por exemplo ContosoUniversity123.
Na caixa Servidor, selecione Novo servidor Banco de Dados SQL.
Insira um nome de administrador e uma senha.
Você não está inserindo um nome e uma senha existentes aqui. Você digitará um novo nome e senha que você está definindo agora para usar mais tarde ao acessar o banco de dados.
Na caixa Região , escolha a mesma região que você escolheu para o aplicativo Web.
Manter o servidor Web e o servidor de banco de dados na mesma região oferece o melhor desempenho e minimiza as despesas.
Clique na marca marcar na parte inferior da caixa para indicar que você terminou.
A ilustração a seguir mostra a caixa de diálogo Especificar configurações de banco de dados com valores de exemplo. Os valores inseridos podem ser diferentes.
O Portal de Gerenciamento retorna à página Sites e a coluna Status mostra que o aplicativo Web está sendo criado. Após um tempo (normalmente menos de um minuto), a coluna Status mostra que o aplicativo Web foi criado com êxito. Na barra de navegação à esquerda, o número de aplicativos Web que você tem em sua conta aparece ao lado do ícone Sites e o número de bancos de dados aparece ao lado do ícone bancos de dados SQL .
O nome do aplicativo Web será diferente do aplicativo de exemplo na ilustração.
Implantar o aplicativo no preparo
Agora que você criou um aplicativo Web e um banco de dados para o ambiente de preparo, você pode implantar o projeto nele.
Observação
Estas instruções mostram como criar um perfil de publicação baixando um arquivo .publishsettings , que funciona não apenas para o Azure, mas também para provedores de hospedagem de terceiros. O SDK do Azure mais recente também permite que você se conecte diretamente ao Azure do Visual Studio e escolha entre uma lista de aplicativos Web que você tem em sua conta do Azure. No Visual Studio 2013, você pode entrar no Azure na caixa de diálogo Publicar na Web ou na janela Explorer servidor. Para obter mais informações, consulte Criar um aplicativo Web ASP.NET no Serviço de Aplicativo do Azure.
Baixar o arquivo .publishsettings
Clique no nome do aplicativo Web que você acabou de criar.
Em Visão rápida na guia Painel , clique em Baixar perfil de publicação.
Esta etapa baixa um arquivo que contém todas as configurações necessárias para implantar um aplicativo em seu aplicativo Web. Você importará esse arquivo para o Visual Studio para não precisar inserir essas informações manualmente.
Salve o arquivo .publishsettings em uma pasta que você pode acessar do Visual Studio.
Aviso
Segurança – o arquivo .publishsettings contém suas credenciais (não codificadas) que são usadas para administrar suas assinaturas e serviços do Azure. A melhor prática de segurança para este arquivo é armazená-lo temporariamente fora dos diretórios de origem (por exemplo, na pasta Libraries\Documents) e, em seguida, excluí-la após a conclusão da importação. Um usuário mal-intencionado que obtém acesso ao arquivo .publishsettings pode editar, criar e excluir seus serviços do Azure.
Criar um perfil de publicação
No Visual Studio, clique com o botão direito do mouse no projeto ContosoUniversity no Gerenciador de Soluções e selecione Publicar no menu de contexto.
O assistente de Publicar Web é aberto.
Clique na guia Perfil .
Clique em Importar.
Navegue até o arquivo .publishsettings que você baixou anteriormente e clique em Abrir.
Na guia Conexão , clique em Validar Conexão para verificar se as configurações estão corretas.
Quando a conexão é validada, uma marca de marcar verde é mostrada ao lado do botão Validar Conexão.
Para alguns provedores de hospedagem, ao clicar em Validar Conexão, você poderá ver uma caixa de diálogo Erro de Certificado . Se você fizer isso, verifique se o nome do servidor é o esperado. Se o nome do servidor estiver correto, selecione Salvar este certificado para sessões futuras do Visual Studio e clique em Aceitar. (Esse erro significa que o provedor de hospedagem optou por evitar a despesa de comprar um certificado SSL para a URL na qual você está implantando. Se você preferir estabelecer uma conexão segura usando um certificado válido, entre em contato com seu provedor de hospedagem.)
Clique em Próximo.
Na guia Configurações , expanda Opções de Publicação de Arquivos e, em seguida, selecione Excluir arquivos da pasta App_Data.
Para obter informações sobre as outras opções em Opções de Publicação de Arquivos, consulte o tutorial implantando no IIS . A captura de tela que mostra o resultado dessa etapa e as etapas de configuração do banco de dados a seguir estão no final das etapas de configuração do banco de dados.
Em DefaultConnection na seção Bancos de dados, configure a implantação de banco de dados para o banco de dados de associação.
-
Selecione Atualizar banco de dados.
A caixa Cadeia de conexão remota diretamente abaixo de DefaultConnection é preenchida com a cadeia de conexão do arquivo .publishsettings. A cadeia de conexão inclui SQL Server credenciais, que são armazenadas em texto sem formatação no arquivo .pubxml. Se você preferir não armazená-los permanentemente lá, poderá removê-los do perfil de publicação depois que o banco de dados for implantado e armazená-los no Azure. Para obter mais informações, consulte Como manter as cadeias de conexão de banco de dados ASP.NET seguras ao implantar no Azure da Fonte no blog de Scott Hanselman. 2. Clique em Configurar atualizações de banco de dados. 3. Na caixa de diálogo Configurar banco de dados Atualizações, clique em Adicionar Script SQL. 4. Na caixa Adicionar Script SQL , navegue até o script aspnet-data-prod.sql que você salvou anteriormente na pasta da solução e clique em Abrir. 5. Feche a caixa de diálogo Configurar banco de dados Atualizações.
Em SchoolContext, na seção Bancos de Dados, selecione Executar Migrações do Code First (execuções no início do aplicativo).
O Visual Studio exibe Executar Migrações do Code First em vez de Atualizar Banco de Dados para
DbContext
classes. Se você quiser usar o provedor dbDacFx em vez de Migrações para implantar um banco de dados acessado usando umaDbContext
classe, consulte Como fazer implantar um banco de dados Code First sem Migrações? nas Perguntas frequentes sobre implantação da Web para Visual Studio e ASP.NET no MSDN.A guia Configurações agora se parece com o seguinte exemplo:
Execute as seguintes etapas para salvar o perfil e renomeá-lo para Preparo:
Clique na guia Perfil e clique em Gerenciar Perfis.
A importação criou dois novos perfis, um para FTP e outro para Implantação da Web. Você configurou o perfil de Implantação da Web: renomeie esse perfil para Preparo.
Feche a caixa de diálogo Editar Perfis de Publicação na Web .
Feche o assistente Publicar Web .
Configurar uma transformação de perfil de publicação para o indicador de ambiente
Observação
Esta seção mostra como configurar uma transformação Web.config para o indicador de ambiente. Como o indicador está no <appSettings>
elemento , você tem outra alternativa para especificar a transformação ao implantar no Serviço de Aplicativo do Azure. Para obter mais informações, consulte Especificando Web.config configurações no Azure.
Em Gerenciador de Soluções, expanda Propriedades e, em seguida, expanda PublishProfiles.
Clique com o botão direito do mouse em Staging.pubxml e clique em Adicionar Transformação de Configuração.
O Visual Studio cria o arquivo de transformaçãoWeb.Staging.config e o abre.
No arquivo de transformaçãoWeb.Staging.config , insira o código a seguir imediatamente após a marca de abertura
configuration
.<appSettings> <add key="Environment" value="Prod" xdt:Transform="SetAttributes" xdt:Locator="Match(key)"/> </appSettings>
Quando você usa o perfil de publicação preparo, essa transformação define o indicador de ambiente como "Prod". No aplicativo Web implantado, você não verá nenhum sufixo como "(Dev)" ou "(Test)" após o título "Contoso University" H1.
Clique com o botão direito do mouse no arquivo Web.Staging.config e clique em Visualizar Transformação para garantir que a transformação codificada produza as alterações esperadas.
A janela visualizaçãoWeb.config mostra o resultado da aplicação das transformações deWeb.Release.config e das transformações deWeb.Staging.config .
Impedir o uso público do aplicativo de teste
Uma consideração importante para o aplicativo de preparo é que ele estará ativo na Internet, mas você não quer que o público o use. Para minimizar a probabilidade de as pessoas encontrá-lo e usá-lo, você pode usar um ou mais dos seguintes métodos:
- Defina regras de firewall que permitem acesso ao aplicativo de preparo somente de endereços IP que você usa para testar o preparo.
- Use uma URL ofuscada que seria impossível de adivinhar.
- Crie um arquivorobots.txt para garantir que os mecanismos de pesquisa não rastreiem o aplicativo de teste e os links de relatório para ele nos resultados da pesquisa.
O primeiro desses métodos é o mais eficaz, mas não é abordado neste tutorial porque exigiria que você implantasse em um Serviço de Nuvem do Azure em vez de Serviço de Aplicativo do Azure. Para obter mais informações sobre Serviços de Nuvem e restrições de IP no Azure, consulte Opções de hospedagem de computação fornecidas pelo Azure e Impedir que endereços IP específicos acessem uma função Web. Se você estiver implantando em um provedor de hospedagem de terceiros, entre em contato com o provedor para descobrir como implementar restrições de IP.
Para este tutorial, você criará um arquivo robots.txt .
Em Gerenciador de Soluções, clique com o botão direito do mouse no projeto ContosoUniversity e clique em Adicionar Novo Item.
Crie um novo Arquivo de Texto chamado robots.txte coloque o seguinte texto nele:
User-agent: * Disallow: /
A
User-agent
linha informa aos mecanismos de pesquisa que as regras no arquivo se aplicam a todos os rastreadores da Web do mecanismo de pesquisa (robôs) e aDisallow
linha especifica que nenhuma página no site deve ser rastreada.Você deseja que os mecanismos de pesquisa catalogem seu aplicativo de produção, portanto, você precisa excluir esse arquivo da implantação de produção. Para fazer isso, você definirá uma configuração no perfil de publicação de produção ao criá-la.
Implantar no preparo
Abra o assistente Publicar Web clicando com o botão direito do mouse no projeto da Contoso University e clicando em Publicar.
Verifique se o perfil de preparo está selecionado.
Clique em Publicar.
A janela Saída mostra quais ações de implantação foram executadas e os relatórios da conclusão com êxito da implantação. O navegador padrão é aberto automaticamente para a URL do aplicativo Web implantado.
Testar no ambiente de preparo
Observe que o indicador de ambiente está ausente (não há "(Teste)" ou "(Dev)" após o título H1, o que mostra que a transformação Web.config para o indicador de ambiente foi bem-sucedida.
Execute a página Alunos para verificar se o banco de dados implantado não tem alunos.
Execute a página Instrutores para verificar se o Code First semeou o banco de dados com dados de instrutor:
Selecione Adicionar Alunos no menu Alunos , adicione um aluno e exiba o novo aluno na página Alunos para verificar se você pode gravar com êxito no banco de dados.
Na página Cursos , clique em Atualizar Créditos. A página Atualizar Créditos requer permissões de administrador, portanto, a página De logon é exibida. Insira as credenciais da conta de administrador que você criou anteriormente ("admin" e "prodpwd"). A página Atualizar Créditos é exibida, que verifica se a conta de administrador que você criou no tutorial anterior foi implantada corretamente no ambiente de teste.
Solicite uma URL inválida para causar um erro que o ELMAH rastreará e solicite o relatório de erro ELMAH. Se você estiver implantando em um provedor de hospedagem de terceiros, provavelmente descobrirá que o relatório está vazio pelo mesmo motivo pelo qual ele estava vazio no tutorial anterior. Você precisará usar as ferramentas de gerenciamento de conta do provedor de hospedagem para configurar permissões de pasta para permitir que o ELMAH escreva na pasta de log.
O aplicativo que você criou agora está em execução na nuvem em um aplicativo Web semelhante ao que você usará para produção. Como tudo está funcionando corretamente, a próxima etapa é implantar na produção.
Implantar para a produção
O processo para criar um aplicativo Web de produção e implantar em produção é o mesmo que para preparo, exceto que você precisa excluir o robots.txt da implantação. Para fazer isso, você edita o arquivo de perfil de publicação.
Criar o ambiente de produção e o perfil de publicação de produção
Crie o aplicativo Web de produção e o banco de dados no Azure, seguindo o mesmo procedimento usado para preparo.
Ao criar o banco de dados, você pode optar por colocá-lo no mesmo servidor criado anteriormente ou criar um novo servidor.
Baixe o arquivo .publishsettings .
Crie o perfil de publicação importando o arquivo .publishsettings de produção, seguindo o mesmo procedimento usado para preparo.
Não se esqueça de configurar o script de implantação de dados em DefaultConnection na seção Bancos de dados da guia Configurações .
Renomeie o perfil de publicação para Produção.
Configure uma transformação de perfil de publicação para o indicador de ambiente, seguindo o mesmo procedimento que você usou para preparo..
Edite o arquivo .pubxml para excluir robots.txt
Os arquivos de perfil de publicação são nomeados <profilename.pubxml> e estão localizados na pasta PublishProfiles. A pasta PublishProfiles está na pasta Propriedades em um projeto de aplicativo Web C#, na pasta Meu Projeto em um projeto de aplicativo Web de VB ou na pasta App_Data em um projeto de aplicativo Web. Cada arquivo .pubxml contém configurações que se aplicam a um perfil de publicação. Os valores inseridos no assistente publicar web são armazenados nesses arquivos e você pode editá-los para criar ou alterar as configurações que não são disponibilizadas na interface do usuário do Visual Studio.
Por padrão, os arquivos .pubxml são incluídos no projeto quando você cria um perfil de publicação, mas você pode excluí-los do projeto e o Visual Studio ainda os usará. O Visual Studio procura arquivos .pubxml na pasta PublishProfiles, independentemente de estarem incluídos no projeto.
Para cada arquivo .pubxml , há um arquivo .pubxml.user . O arquivo .pubxml.user contém a senha criptografada se você selecionou a opção Salvar senha e, por padrão, ela é excluída do projeto.
Um arquivo .pubxml contém as configurações que pertencem a um perfil de publicação específico. Se você quiser definir as configurações que se aplicam a todos os perfis, poderá criar um arquivo .wpp.targets . O processo de build importa esses arquivos para o arquivo de projeto .csproj ou .vbproj , para que a maioria das configurações que você possa configurar no arquivo de projeto possa ser configurada nesses arquivos. Para obter mais informações sobre arquivos .pubxml e arquivos .wpp.targets , consulte How to: Edit Deployment Settings in Publish Profile (.pubxml) Files and the .wpp.targets File in Visual Studio Web Projects.
Em Gerenciador de Soluções, expanda Propriedades e expanda PublishProfiles.
Clique com o botão direito do mouse em Production.pubxml e clique em Abrir.
Clique com o botão direito do mouse em Production.pubxml e clique em Abrir.
Adicione as seguintes linhas imediatamente antes do elemento de fechamento
PropertyGroup
:<ExcludeFilesFromDeployment> robots.txt </ExcludeFilesFromDeployment>
O arquivo .pubxml agora se parece com o seguinte exemplo:
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <PropertyGroup> <WebPublishMethod>MSDeploy</WebPublishMethod> <LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration> <LastUsedPlatform>Any CPU</LastUsedPlatform> <SiteUrlToLaunchAfterPublish>http://contosou-staging.azurewebsites.net</SiteUrlToLaunchAfterPublish> <ExcludeApp_Data>True</ExcludeApp_Data> <MSDeployServiceURL>waws-prod-bay-001.publish.azurewebsites.windows.net:443</MSDeployServiceURL> <DeployIisAppPath>contosou-staging</DeployIisAppPath> <RemoteSitePhysicalPath /> <SkipExtraFilesOnServer>True</SkipExtraFilesOnServer> <MSDeployPublishMethod>WMSVC</MSDeployPublishMethod> <UserName>[username]</UserName> <_SavePWD>True</_SavePWD> <PublishDatabaseSettings> <!-- database settings removed --> </PublishDatabaseSettings> <ExcludeFilesFromDeployment> robots.txt </ExcludeFilesFromDeployment> </PropertyGroup> <ItemGroup> <MSDeployParameterValue Include="$(DeployParameterPrefix)DefaultConnection-Web.config Connection String"> <ParameterValue>Data Source=tcp:sk0264hvc9.database.windows.net,1433;Initial Catalog=ContosoUniversity-staging;User Id=CU-staging-admin@sk0264hvc9;Password=</ParameterValue> </MSDeployParameterValue> <MSDeployParameterValue Include="$(DeployParameterPrefix)SchoolContext-Web.config Connection String"> <ParameterValue>Data Source=tcp:sk0264hvc9.database.windows.net,1433;Initial Catalog=ContosoUniversity-staging;User Id=CU-staging-admin@sk0264hvc9;Password=</ParameterValue> </MSDeployParameterValue> </ItemGroup> </Project>
Para obter mais informações sobre como excluir arquivos e pastas, consulte Posso excluir arquivos ou pastas específicos da implantação? nas Perguntas frequentes sobre implantação da Web para Visual Studio e ASP.NET no MSDN.
Implantar para a produção
Abra o assistente Publicar Web verifique se o Perfil de publicação de produção está selecionado e clique em Iniciar Visualização na guia Visualização para verificar se o arquivo derobots.txt não será copiado para o aplicativo de produção.
Examine a lista de arquivos que serão copiados. Você verá que todos os arquivos .cs , incluindo arquivos .aspx.cs, .aspx.designer.cs, Master.cs e Master.designer.cs , são omitidos. Todo esse código foi compilado nos arquivos ContosoUniversity.dll e ContosoUniversity.pdb que você encontrará na pasta bin . Como apenas o .dll é necessário para executar o aplicativo e você especificou anteriormente que somente os arquivos necessários para executar o aplicativo devem ser implantados, nenhum arquivo .cs foi copiado para o ambiente de destino. A pasta obj e os arquivos ContosoUniversity.csproj e .csproj.user são omitidos pelo mesmo motivo.
Clique em Publicar para implantar no ambiente de produção.
Teste em produção, seguindo o mesmo procedimento usado para preparo.
Tudo é idêntico ao preparo, exceto pela URL e pela ausência do arquivo robots.txt .
Resumo
Agora você implantou e testou com êxito seu aplicativo Web e ele está disponível publicamente pela Internet.
No próximo tutorial, você atualizará o código do aplicativo e implantará a alteração nos ambientes de teste, preparo e produção.
Observação
Enquanto o aplicativo estiver em uso no ambiente de produção, você deverá implementar um plano de recuperação. Ou seja, você deve fazer backup periodicamente de seus bancos de dados do aplicativo de produção para um local de armazenamento seguro e deve manter várias gerações desses backups. Ao atualizar o banco de dados, você deve fazer uma cópia de backup imediatamente antes da alteração. Em seguida, se você cometer um erro e não o descobrir até que o tenha implantado em produção, ainda poderá recuperar o banco de dados para o estado em que ele estava antes de ser corrompido. Para saber mais, confira Backup e restauração do Banco de dados SQL do Azure.
Observação
Neste tutorial, a edição SQL Server na qual você está implantando está SQL do Azure Banco de Dados. Embora o processo de implantação seja semelhante a outras edições do SQL Server, um aplicativo de produção real pode exigir código especial para SQL do Azure Banco de Dados em alguns cenários. Para obter mais informações, consulte Trabalhando com SQL do Azure banco de dados e Escolhendo entre SQL Server e banco de dados SQL do Azure.