C#

Como publicar uma aplicação .NET em Linux

Olá desenvolvedor! Como vai essa força?

Nesse artigo você vai encontrar um passo-a-passo de como publicar sua aplicação criada com .NET 6 em ambiente Linux, especificamente falando, em um Ubuntu Server.

É muito simples, ainda que existem várias “pegadinhas” dependendo do que a sua aplicação .NET utilize pra funcionar! Exemplo, será que a suite de componentes premium que você usa é suportada em todos os sistemas operacionais? Ou somente no Windows? Uma questão importante que voê deve ter a resposta antes de pensar publicar no Linux.

Bom, vamos ao passo-a-passo:

Primeira coisa, ou seja, o primeiro passo, é que você precisa ter um Ubuntu Linux instalado em algum lugar, pra executar os passos aqui descritos. 🙂 Existem várias possibilidades; dentre elas, posso destacar as seguintes:

  • Instalar o Ubuntu Linux em alguma máquina que você tenha na sua casa ou ambiente de trabalho, que sirva de server
  • Instalar o Ubuntu Linux em dual boot na sua própria máquina
  • Instalar uma VM (Virtual Machine) como o VirtualBox e instalar o Ubuntu Linux nela
  • Instalar uma imagem Docker na sua máquina com o Ubuntu Linux
  • Instalar o WSL, Windows Subsystem for Linux, que é uma tecnologia bem nova da Microsoft, que permite instalar um subsistema Linux dentro do seu Windows
  • Contratar uma cloud Linux, como a DigitalOcean, que permite criar servers Ubuntu Linux e usá-las para acesso externo na web

Como pode ver, você tem várias possibilidades! A que vou usar para esse artigo, é a opção com uma VM VirtualBox, já que tenho o VirtualBox instalado no meu Windows, mas você pode escolher a que preferir, já que os passos serão quase os mesmos

Continuando, o segundo passo é criar a configuração de publicação para Linux na aplicação .NET. Para fazer isso, você deve acessar o menu Publish, acessado ao clicar no projeto por dentro do Visual Studio e selecionar a opção Folder, conforme a imagem abaixo:

Ao finalizar, a tela abaixo será exibida

Basta configurar o target runtime para Linux-64, ficando assim:

Depois disso, você precisa publicar a aplicação, clicando no botão Publish.

Agora, você precisa acessar o server Ubuntu Linux. Se você estiver usando o WSL como eu e já instalado o Ubuntu Linux, basta executar o comando “ubuntu” abaixo no prompt de comandos:

Importante mencionar também que você precisa algum web server instalado no Ubuntu Linux e no caso, usamos o Nginx, que na minha opinião, é o melhor web server da atualidade. Para instalá-lo, basta usar o comando:

$ sudo apt install nginx

Agora, vamos instalar o .NET 6 no server com os comandos abaixo:

$ sudo wget https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb

$ sudo dpkg -i packages-microsoft-prod.deb

$ sudo rm packages-microsoft-prod.deb

$ sudo apt-get update

$ sudo apt-get install -y aspnetcore-runtime-6.0

O próximo passo, é que você copie os arquivos binários da aplicação para o server Ubuntu Linux. Como estou usando o WSL, temos um diretório que é compartilhado entre Windows e Linux (/mnt/c/), que no caso, vamos executar os seguintes comandos:

$ cd /mnt/c/dot-net-projects/webapi (onde meus projetos são publicados localmente)

$ sudo mkdir /var/www/webapi

$ sudo cp . -R /var/www/webapi

Como vamos publicar uma aplicação web, vamos colar no diretório /var/www/, mas caso seja um console, você pode instalar em outros diretórios.

Agora, você precisa dar os direitos corretos de acesso ao usuários do Nginx

$ sudo chown -R www-data:www-data /var/www/

Importante verificar se a aplicação está pronta para ser executada:

$ dotnet WebApi.dll

IMPORTANTE: deve exibir várias mensagens, incluindo algo como: “Now listening on: http://localhost:5000

Próximo passo é criar o arquivo do serviço da aplicação, para que a aplicação seja executada junto com o Linux.

$ sudo nano /etc/systemd/system/kestrel-webapi.service

[Unit]

Description=Web API

[Service]

WorkingDirectory=/var/www/webapi/

ExecStart=/usr/bin/dotnet /var/www/webapi/WebApi.dll

Restart=always

RestartSec=10

SyslogIdentifier=kestrel-webapi-service

User=www-data

KillSignal=SIGINT

Environment=ASPNETCORE_ENVIRONMENT=Development

Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false

[Install]

WantedBy=multi-user.target

Importante que estamos informando que o ambiente é o Development, ou seja, o ambiente de desenvolvimento, para execução da aplicação .NET.

Como próximo passo, você precisa recarregar e iniciar o serviço do Linux com o sistema:

$ sudo systemctl daemon-reload

$ sudo systemctl start kestrel-webapi.service

$ sudo systemctl enable kestrel-webapi.service

Finalmente, você precisa instalar o sistema no Nginx:

$ sudo nano /etc/nginx/sites-available/webapi

server {

                listen 80;

                listen [::]:80;

                server_name webapi.teste;

                location / {

                               proxy_pass http://localhost:5000;

                               proxy_http_version 1.1;

                               proxy_set_header Upgrade $http_upgrade;

                               proxy_set_header Connection keep-alive;

                               proxy_set_header Host $host;

                               proxy_cache_bypass $http_upgrade;

                               proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

                               proxy_set_header X-Forwarded-Proto $scheme;

                }

}

$ sudo ln -s /etc/nginx/sites-available/webapi /etc/nginx/sites-enabled/

$ sudo rm /etc/nginx/sites-enabled/default

$ sudo nginx -t

$ sudo systemctl restart nginx

Com isso, você tem a sua aplicação .NET 6 rodando num server Ubuntu Linux como proxy reverso do Nginx! O próximo passo, seria fazer com que esse serviço web seja acessado na sua máquina e, dependendo da maneira que você usou para instalar a aplicação, terá que tomar ações diferentes, como habilitar a porta HTTP 80 ou a HTTPS 443 no Firewall, caso tenha no servidor.

Perfect! Que tal você me contar se conseguiu acompanhar todos esses passos com sucesso? Algum deu problema? Me conte aqui também!

Related posts
C#

Vale a pena investir meu tempo para estudar C# e .NET? Possui mercado?

Sign up for our Newsletter and
stay informed

Deixe um comentário

O seu endereço de e-mail não será publicado.