Skip to content

Instantly share code, notes, and snippets.

@icavalheiro
Created July 7, 2020 20:04
Show Gist options
  • Select an option

  • Save icavalheiro/b5dddd7720b1a0dfa3ad99c40c0684dc to your computer and use it in GitHub Desktop.

Select an option

Save icavalheiro/b5dddd7720b1a0dfa3ad99c40c0684dc to your computer and use it in GitHub Desktop.

Criar o arquivo de serviço

Crie o arquivo de definição de serviço:

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

A seguir, um exemplo de arquivo de serviço para o aplicativo:

[Unit]
Description=Example .NET Web API App running on Ubuntu

[Service]
WorkingDirectory=/var/www/helloapp
ExecStart=/usr/bin/dotnet /var/www/helloapp/helloapp.dll
Restart=always
# Restart service after 10 seconds if the dotnet service crashes:
RestartSec=10
KillSignal=SIGINT
SyslogIdentifier=dotnet-example
User=www-data
Environment=ASPNETCORE_ENVIRONMENT=Production
Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false

[Install]
WantedBy=multi-user.target

No exemplo anterior, o usuário que gerencia o serviço é especificado pela User opção. O usuário ( www-data ) deve existir e ter a propriedade adequada dos arquivos do aplicativo. Use TimeoutStopSec para configurar a duração do tempo de espera para o aplicativo desligar depois de receber o sinal de interrupção inicial. Se o aplicativo não desligar nesse período, o SIGKILL será emitido para encerrá-lo. Forneça o valor como segundos sem unidade (por exemplo, 150), um valor de duração (por exemplo, 2min 30s) ou infinity para desabilitar o tempo limite. TimeoutStopSec é revertido para o valor padrão de DefaultTimeoutStopSec no arquivo de configuração do gerenciador (systemd-system.conf, system.conf.d, systemd-user.conf e user.conf.d). O tempo limite padrão para a maioria das distribuições é de 90 segundos.

# The default value is 90 seconds for most distributions.
TimeoutStopSec=90

O Linux tem um sistema de arquivos que diferencia maiúsculas de minúsculas. Definir ASPNETCORE_ENVIRONMENT para "Production" resulta em uma pesquisa pelo arquivo de configuração appsettings.Production.json, e não appsettings.production.json. Alguns valores (por exemplo, cadeias de conexão de SQL) devem ser escapadas para que os provedores de configuração leiam as variáveis de ambiente. Use o seguinte comando para gerar um valor corretamente com caracteres de escape para uso no arquivo de configuração:

$ systemd-escape "<value-to-escape>"

Separadores do tipo dois-pontos (:) não são compatíveis com nomes de variáveis de ambiente. Use um sublinhado duplo (__) no lugar de dois-pontos. O provedor de configuração de Variáveis de Ambiente converte caracteres de sublinhado duplo em dois-pontos quando as variáveis de ambiente são lidas na configuração. No exemplo a seguir, a chave de cadeia de conexão ConnectionStrings:DefaultConnection está definida no arquivo de definição de serviço como ConnectionStrings__DefaultConnection:

Environment=ConnectionStrings__DefaultConnection={Connection String}

Salve o arquivo e habilite o serviço.

$ sudo systemctl enable kestrel-helloapp.service

Inicie o serviço e verifique se ele está em execução.

$ sudo systemctl start kestrel-helloapp.service
$ sudo systemctl status kestrel-helloapp.service
◝ kestrel-helloapp.service - Example .NET Web API App running on Ubuntu
    Loaded: loaded (/etc/systemd/system/kestrel-helloapp.service; enabled)
    Active: active (running) since Thu 2016-10-18 04:09:35 NZDT; 35s ago
Main PID: 9021 (dotnet)
    CGroup: /system.slice/kestrel-helloapp.service
            └─9021 /usr/local/bin/dotnet /var/www/helloapp/helloapp.dll

Com o proxy reverso configurado e o Kestrel gerenciado por meio de systemd, o aplicativo Web está totalmente configurado e pode ser acessado em um navegador no computador local em http://localhost. Ele também é acessível por meio de um computador remoto, bloqueando qualquer firewall que o possa estar bloqueando. Inspecionando os cabeçalhos de resposta, o cabeçalho Server mostra o aplicativo ASP.NET Core sendo servido pelo Kestrel.

HTTP/1.1 200 OK
Date: Tue, 11 Oct 2016 16:22:23 GMT
Server: Kestrel
Keep-Alive: timeout=5, max=98
Connection: Keep-Alive
Transfer-Encoding: chunked
@icavalheiro
Copy link
Copy Markdown
Author

Extracted from https://docs.microsoft.com/pt-br/aspnet/core/host-and-deploy/linux-nginx?view=aspnetcore-3.1
to be preserved since Microsoft documentation websites are not reliable for long-term

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment