Se requiere la siguiente configuración en el archivo build.gradle en los proyectos Spring Boot.
build.gradle
jar {
baseName = 'your-app'
version = version
}
springBoot {
buildInfo()
executable = true
mainClass = "com.shunya.App"
}
ejecutable = verdadero
Esto es necesario para hacer un jar totalmente ejecutable en un sistema Unix (Centos y Ubuntu)
Crear un archivo .conf
Si desea configurar propiedades JVM personalizadas o argumentos de ejecución de la aplicación Spring Boot, puede crear un archivo .conf con el mismo nombre que el nombre de la aplicación Spring Boot y colocarlo en paralelo al archivo jar.
Teniendo en cuenta que your-app.jar es el nombre de su aplicación Spring Boot, puede crear el siguiente archivo.
JAVA_OPTS="-Xms64m -Xmx64m"
RUN_ARGS=--spring.profiles.active=prod
LOG_FOLDER=/custom/log/folder
Esta configuración establecerá 64 MB de RAM para la aplicación Spring Boot y activará el perfil de producción.
Crea un nuevo usuario en Linux
Para mejorar la seguridad, debemos crear un usuario específico para ejecutar la aplicación Spring Boot como servicio.
Crea un nuevo usuario
sudo useradd -s /sbin/nologin springboot
En Ubuntu / Debian, modifique el comando anterior de la siguiente manera:
sudo useradd -s /usr/sbin/nologin springboot
Configurar la clave
sudo passwd springboot
Hacer que springboot sea el propietario del archivo ejecutable
chown springboot:springboot your-app.jar
Prevenir la modificación del archivo jar
chmod 500 your-app.jar
Esto configurará los permisos de jar para que no pueda escribirse y solo pueda leerlo o ejecutarlo su springboot propietario.
Opcionalmente, puede hacer que su archivo jar sea inmutable utilizando el comando change attribute (chattr).
sudo chattr +i your-app.jar
También se deben establecer los permisos apropiados para el archivo .conf correspondiente. .conf requiere solo acceso de lectura (Octal 400) en lugar de acceso de lectura + ejecución (Octal 500)
chmod 400 your-app.conf
Crear servicio 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
Reiniciar automáticamente el proceso si el sistema operativo lo mata
Agregue los dos atributos a continuación (Reiniciar y ReiniciarSec) para reiniciar automáticamente el proceso en caso de falla.
/etc/systemd/system/your-app.service
[Service]
User=springboot
ExecStart=/var/myapp/your-app.jar
SuccessExitStatus=143
Restart=always
RestartSec=30
El cambio hará que la aplicación Spring Boot se reinicie en caso de falla con un retraso de 30 segundos. Si detiene el servicio utilizando el comando systemctl, no se reiniciará.
Programar servicio al inicio del sistema
Para marcar la aplicación para que se inicie automáticamente en el arranque del sistema, use el siguiente comando:
Habilitar la aplicación Spring Boot al iniciar el sistema
sudo systemctl enable your-app.service
Comience y detenga el servicio
systemctl se puede usar en Ubuntu 16.04 LTS y 18.04 LTS para iniciar y detener el proceso.
Iniciar el proceso
sudo systemctl start your-app
Detener el proceso
sudo systemctl stop your-app
Referencias
https://docs.spring.io/spring-boot/docs/current/reference/html/deployment-install.html