Spring Boot Deployment Documentation
This guide explains how to package, deploy, and run a Spring Boot application on Linux using systemd, including production setup and security.
Package JAR
# Using Maven
mvn clean package
# Output file
target/app.jar
mvn clean package
# Output file
target/app.jar
Run JAR Manually
java -jar target/app.jar
Move JAR to Server Directory
sudo mkdir -p /opt/myapp
sudo cp target/app.jar /opt/myapp/app.jar
sudo cp target/app.jar /opt/myapp/app.jar
Create Service User
sudo useradd -r -s /bin/false springuser
sudo chown -R springuser:springuser /opt/myapp
sudo chown -R springuser:springuser /opt/myapp
Create systemd Service
sudo nano /etc/systemd/system/myapp.service
[Unit]
Description=Spring Boot App
After=network.target
[Service]
User=springuser
WorkingDirectory=/opt/myapp
ExecStart=/usr/bin/java -jar /opt/myapp/app.jar
SuccessExitStatus=143
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
[Unit]
Description=Spring Boot App
After=network.target
[Service]
User=springuser
WorkingDirectory=/opt/myapp
ExecStart=/usr/bin/java -jar /opt/myapp/app.jar
SuccessExitStatus=143
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
Enable Service (Auto Start)
sudo systemctl daemon-reload
sudo systemctl enable myapp
sudo systemctl start myapp
sudo systemctl enable myapp
sudo systemctl start myapp
Manage Service
sudo systemctl start myapp
sudo systemctl stop myapp
sudo systemctl restart myapp
sudo systemctl stop myapp
sudo systemctl restart myapp
Spring Profiles (Production)
java -jar app.jar --spring.profiles.active=prod
Change Application Port
java -jar app.jar --server.port=8081
Allow Port in Firewall
sudo ufw allow 8080
sudo ufw reload
sudo ufw reload
Access Application
http://server-ip:8080
Setup Nginx Reverse Proxy
sudo apt install nginx
sudo nano /etc/nginx/sites-available/myapp
server {
listen 80;
server_name your-domain.com;
location / {
proxy_pass http://localhost:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
sudo ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/
sudo systemctl restart nginx
sudo nano /etc/nginx/sites-available/myapp
server {
listen 80;
server_name your-domain.com;
location / {
proxy_pass http://localhost:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
sudo ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/
sudo systemctl restart nginx
Security Tips
# Do not run as root
# Use firewall rules
# Enable HTTPS with SSL
# Keep system updated
# Use firewall rules
# Enable HTTPS with SSL
# Keep system updated
View Logs
journalctl -u myapp -f
Check Service Status
sudo systemctl status myapp