Implantando app Standalone como Serviço

É possível implantar aplicativos Standalone Linux como um Serviço Linux. Isso garante que o servidor de aplicação web inicie com o SO e execute continuamente enquanto o servidor estiver ligado.

Este exemplo usa o demo FishFacts e o implanta como um serviço systemd.

Pré-requisito: abra um terminal no seu servidor Linux. O exemplo assume que você está como root; caso não esteja, anteponha sudo aos comandos.

1

1. Crie o arquivo de serviço

Mude para a pasta do systemd e crie um novo arquivo de serviço chamado <your_service_name>.service (o exemplo usa fishfacts.service):

cd /etc/systemd/system
nano fishfacts.service

Use um editor (aqui nano) para criar o arquivo.

2

2. Conteúdo de exemplo do arquivo de serviço

Cole o seguinte em fishfacts.service:

[Unit]

Description=FishFacts

After=network.target

[Service]

Type=simple

Restart=always

WorkingDirectory=/var/www/webapp

ExecStart=/var/www/webapp/fishfacts

ExecStop=/usr/bin/curl --max-time 10 http://127.0.0.1:8077/?action=terminate

ExecStop=/bin/sleep 5

[Install]

WantedBy=multi-user.target

Notas (linhas explicativas do exemplo original):

  • Description=FishFacts — Descreve o nome do seu serviço

  • After=network.target — Indica que o serviço deve ser executado após o subsistema de rede estar pronto

  • Type=simple — É um serviço simples

  • Restart=always — O serviço sempre reiniciará após uma falha ou terminação indesejada

  • WorkingDirectory=/var/www/webapp — Diretório de trabalho do seu serviço

  • ExecStart=/var/www/webapp/fishfacts — Caminho para o binário executável do seu serviço. Neste exemplo o binário de demonstração chamado fishfacts foi implantado em /var/www/webapp. O Linux diferencia maiúsculas de minúsculas.

  • ExecStop=/usr/bin/curl --max-time 10 http://127.0.0.1:8077/?action=terminate — Garante que o servidor web da aplicação será terminado corretamente. 8077 é a porta em que sua aplicação é executada; altere se sua app escutar em uma porta diferente.

  • ExecStop=/bin/sleep 5 — Aguarda 5 segundos após a parada

3

3. Salve e saia do editor

No nano: salve com CTRL+S, saia com CTRL+X.

4

4. Recarregue o systemd para que ele reconheça o novo serviço

systemctl daemon-reload
5

5. Habilite o serviço na inicialização

systemctl enable fishfacts.service
6

6. Inicie o serviço

systemctl start fishfacts
7

7. Verifique o status do serviço

service fishfacts status

Se tudo estiver OK você deve receber uma mensagem similar a:

● fishfacts.service - FishFacts

     Loaded: loaded (/etc/systemd/system/fishfacts.service; enabled; vendor preset: enabled)

     Active: active (running) since Mon 2020-11-0218:52:03 CET;1h 19min ago

Main PID:512(fishfacts)

      Tasks:7(limit:4657)

     Memory:32.5M

     CGroup:/system.slice/fishfacts.service

└─512/var/www/webapp/fishfacts

Nov 0218:52:03 vm.server.net systemd[1]: Started FishFacts.
8

8. Teste a aplicação web

Abra em um navegador web:

http://server-address:8077

9

9. Pare o serviço

systemctl stop fishfacts
10

10. Desabilite e remova o serviço

systemctl disable fishfacts.service
rm /etc/systemd/system/fishfacts.service
systemctl daemon-reload