Następująca konfiguracja jest wymagana w pliku build.gradle w projektach Spring Boot.
build.gradle
jar {
baseName = 'your-app'
version = version
}
springBoot {
buildInfo()
executable = true
mainClass = "com.shunya.App"
}
plik wykonywalny = prawda
Jest to wymagane do utworzenia w pełni wykonywalnego jar w systemie Unix (Centos i Ubuntu)
Utwórz plik .conf
Jeśli chcesz skonfigurować niestandardowe właściwości JVM lub argumenty uruchamiania aplikacji Spring Boot, możesz utworzyć plik .conf o tej samej nazwie co nazwa aplikacji Spring Boot i umieścić go równolegle do pliku jar.
Biorąc pod uwagę, że twoja-app.jar jest nazwą twojej aplikacji Spring Boot, możesz utworzyć następujący plik.
JAVA_OPTS="-Xms64m -Xmx64m"
RUN_ARGS=--spring.profiles.active=prod
LOG_FOLDER=/custom/log/folder
Ta konfiguracja ustawi 64 MB pamięci RAM dla aplikacji Spring Boot i aktywuje profil prod.
Utwórz nowego użytkownika w systemie Linux
Aby zwiększyć bezpieczeństwo, musimy utworzyć konkretnego użytkownika, aby uruchomić aplikację Spring Boot jako usługę.
Utwórz nowego użytkownika
sudo useradd -s /sbin/nologin springboot
W systemie Ubuntu / Debian zmodyfikuj powyższe polecenie w następujący sposób:
sudo useradd -s /usr/sbin/nologin springboot
Ustaw hasło
sudo passwd springboot
Ustaw Springboot właścicielem pliku wykonywalnego
chown springboot:springboot your-app.jar
Zapobiegaj modyfikacji pliku jar
chmod 500 your-app.jar
Spowoduje to skonfigurowanie uprawnień jar tak, że nie będzie można go zapisać i będzie można go odczytać lub wykonać tylko przez springboot właściciela.
Opcjonalnie możesz ustawić plik jar jako niezmienny za pomocą polecenia zmiany atrybutu (chattr).
sudo chattr +i your-app.jar
Należy również ustawić odpowiednie uprawnienia dla odpowiedniego pliku .conf. .conf wymaga tylko dostępu do odczytu (Octal 400) zamiast dostępu do odczytu + wykonania (Octal 500)
chmod 400 your-app.conf
Utwórz usługę 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
Automatycznie uruchom ponownie proces, jeśli zostanie zabity przez system operacyjny
Dodaj poniższe dwa atrybuty (Restart i RestartSec), aby automatycznie ponownie uruchomić proces w przypadku awarii.
/etc/systemd/system/your-app.service
[Service]
User=springboot
ExecStart=/var/myapp/your-app.jar
SuccessExitStatus=143
Restart=always
RestartSec=30
Zmiana spowoduje ponowne uruchomienie aplikacji Spring Boot w przypadku awarii z opóźnieniem 30 sekund. Jeśli zatrzymasz usługę za pomocą polecenia systemctl, ponowne uruchomienie nie nastąpi.
Zaplanuj usługę przy uruchomieniu systemu
Aby oflagować aplikację, aby uruchamiała się automatycznie podczas rozruchu systemu, użyj następującego polecenia:
Włącz aplikację Spring Boot podczas uruchamiania systemu
sudo systemctl enable your-app.service
Uruchom usługę Zatrzymaj usługę
Systemctl może być używany w Ubuntu 16.04 LTS i 18.04 LTS do uruchamiania i zatrzymywania procesu.
Rozpocznij proces
sudo systemctl start your-app
Zatrzymaj proces
sudo systemctl stop your-app
Bibliografia
https://docs.spring.io/spring-boot/docs/current/reference/html/deployment-install.html