Introdução: Por que o VPS é a solução ideal para aplicações C#?
O desenvolvimento em C# e na plataforma .NET deixou de ser privilégio exclusivo de servidores Windows. Com o lançamento do .NET Core (e agora .NET 5/6/7/8), os desenvolvedores ganharam a capacidade de executar suas aplicações no Linux, o que abriu acesso a servidores VPS baratos e de alto desempenho. Implantar uma aplicação C# em VPS não é apenas uma economia de orçamento, mas também controle total sobre a infraestrutura: desde a escolha do SO até a configuração de segurança.
Neste guia, abordaremos o ciclo completo de implantação de uma aplicação ASP.NET Core em um servidor remoto. Você aprenderá como preparar o servidor, configurar o proxy reverso Nginx, executar a aplicação através do Kestrel e protegê-la com um certificado SSL. Todas as etapas são acompanhadas de exemplos de código e comandos de console.
1. Preparação do servidor e instalação do .NET Runtime
Escolha do SO e conexão via SSH
Para implantar uma aplicação C# em VPS, recomenda-se usar a distribuição Ubuntu 22.04 LTS ou Debian 11. Após alugar o servidor, conecte-se a ele via SSH:
ssh root@seu_IP_do_servidorAtualize o gerenciador de pacotes e instale os utilitários necessários:
apt update && apt upgrade -yapt install curl wget git -yInstalação do .NET SDK ou Runtime
Para executar uma aplicação pronta, basta instalar o ASP.NET Core Runtime. Se você planeja compilar o código diretamente no servidor, instale o SDK. Adicionaremos o repositório Microsoft e instalaremos o .NET 8:
wget https://packages.microsoft.com/config/ubuntu/22.04/packages-microsoft-prod.deb -O packages-microsoft-prod.debdpkg -i packages-microsoft-prod.debapt updateapt install aspnetcore-runtime-8.0 -yVerifique a instalação:
dotnet --list-runtimesA saída deve conter uma linha com a versão do ASP.NET Core 8.0.x.
2. Preparação e publicação da aplicação
Configuração do projeto para produção
No seu projeto ASP.NET Core, abra o arquivo Program.cs e certifique-se de que a aplicação está ouvindo a URL correta. Para funcionar através do Kestrel, definiremos a porta 5000:
var builder = WebApplication.CreateBuilder(args);builder.WebHost.UseUrls("http://0.0.0.0:5000");var app = builder.Build();app.MapGet("/", () => "Hello from VPS!");app.Run();Adicione também em appsettings.json uma seção para logs e strings de conexão com o banco de dados, se forem utilizados.
Publicação da aplicação (Self-contained ou Framework-dependent)
Escolha o método de publicação. Self-contained inclui todas as dependências, o que é conveniente se o servidor não tiver .NET Runtime. Framework-dependent requer o Runtime instalado. Execute o comando na pasta do projeto:
dotnet publish -c Release -o ./publishApós a conclusão, todos os arquivos necessários estarão na pasta publish. Compacte-os:
tar -czf app.tar.gz ./publishUpload para o servidor
Use SCP ou SFTP para transferir o arquivo. Exemplo via SCP (executado na máquina local):
scp app.tar.gz root@seu_IP:/var/www/myapp/No servidor, descompacte o arquivo:
mkdir -p /var/www/myapptar -xzf /var/www/myapp/app.tar.gz -C /var/www/myapp/3. Configuração do Kestrel e criação do serviço systemd
Execução da aplicação através do Kestrel
Kestrel é o servidor web embutido do ASP.NET Core. Para um teste de execução, faça:
cd /var/www/myapp/publishdotnet YourAppName.dllA aplicação deve iniciar na porta 5000. Verifique com curl http://localhost:5000. Se tudo funcionar, pare o processo (Ctrl+C).
Criação do arquivo de unidade systemd
Para que a aplicação inicie automaticamente na inicialização do sistema e seja reiniciada em caso de falhas, criaremos um serviço systemd. Crie o arquivo:
nano /etc/systemd/syst