A seguinte configuração é necessária no arquivo build.gradle nos projetos do Spring Boot.
build.gradle
jar {
baseName = 'your-app'
version = version
}
springBoot {
buildInfo()
executable = true
mainClass = "com.shunya.App"
}
executável = true
Isso é necessário para criar jar totalmente executável no sistema unix (Centos e Ubuntu)
Crie um arquivo .conf
Se você deseja configurar propriedades personalizadas da JVM ou argumentos de execução do aplicativo Spring Boot, é possível criar um arquivo .conf com o mesmo nome que o nome do aplicativo Spring Boot e colocá-lo paralelo ao arquivo jar.
Considerando que your-app.jar é o nome do seu aplicativo Spring Boot, você pode criar o seguinte arquivo.
JAVA_OPTS="-Xms64m -Xmx64m"
RUN_ARGS=--spring.profiles.active=prod
LOG_FOLDER=/custom/log/folder
Essa configuração definirá 64 MB de RAM para o aplicativo Spring Boot e ativará o perfil do produto.
Crie um novo usuário no linux
Para maior segurança, precisamos criar um usuário específico para executar o aplicativo Spring Boot como um serviço.
Crie um novo usuário
sudo useradd -s /sbin/nologin springboot
No Ubuntu / Debian, modifique o comando acima da seguinte maneira:
sudo useradd -s /usr/sbin/nologin springboot
Configurar senha
sudo passwd springboot
Tornar o springboot o proprietário do arquivo executável
chown springboot:springboot your-app.jar
Impedir a modificação do arquivo jar
chmod 500 your-app.jar
Isso configurará as permissões do jar para que ele não possa ser gravado e só possa ser lido ou executado por seu proprietário, springboot.
Opcionalmente, você pode tornar seu arquivo jar imutável usando o comando change attribute (chattr).
sudo chattr +i your-app.jar
Permissões apropriadas também devem ser definidas para o arquivo .conf correspondente. .conf requer apenas acesso de leitura (Octal 400) em vez de acesso de leitura + execução (Octal 500)
chmod 400 your-app.conf
Criar serviço Systemd
/etc/systemd/system/your-app.service
[Unit]
Description=Your app description
After=syslog.target
[Service]
User=springboot
ExecStart=/var/myapp/your-app.jar
SuccessExitStatus=143
[Install]
WantedBy=multi-user.target
Reinicie o processo automaticamente se for morto pelo sistema operacional
Anexe os dois atributos abaixo (Reiniciar e RestartSec) para reiniciar automaticamente o processo em caso de falha.
/etc/systemd/system/your-app.service
[Service]
User=springboot
ExecStart=/var/myapp/your-app.jar
SuccessExitStatus=143
Restart=always
RestartSec=30
A alteração fará com que o aplicativo Spring Boot seja reiniciado em caso de falha com um atraso de 30 segundos. Se você parar o serviço usando o comando systemctl, a reinicialização não ocorrerá.
Agendar serviço na inicialização do sistema
Para sinalizar o aplicativo para iniciar automaticamente na inicialização do sistema, use o seguinte comando:
Habilitar o aplicativo Spring Boot na inicialização do sistema
sudo systemctl enable your-app.service
Iniciar uma parada do serviço
O systemctl pode ser usado no Ubuntu 16.04 LTS e 18.04 LTS para iniciar e parar o processo.
Iniciar o processo
sudo systemctl start your-app
Pare o processo
sudo systemctl stop your-app
Referências
https://docs.spring.io/spring-boot/docs/current/reference/html/deployment-install.html