Triển khai Spring Boot: JAR, Systemd, Nginx Reverse Proxy
Chào mừng bạn đến với bài viết thứ 14 trong series về Spring và Spring Boot! Hôm nay, chúng ta sẽ cùng nhau khám phá cách đưa ứng dụng Spring Boot của bạn "lên sóng". Chúng ta sẽ sử dụng server Linux, file JAR, systemd và Nginx reverse proxy. Mục tiêu là có một ứng dụng chạy ổn định, bảo mật và dễ dàng quản lý.
1. Chuẩn bị Ứng Dụng Spring Boot
Đầu tiên, bạn cần có một ứng dụng Spring Boot đã được đóng gói thành file JAR. Hãy đảm bảo rằng ứng dụng của bạn hoạt động tốt trên môi trường phát triển. Sử dụng Maven hoặc Gradle để build ứng dụng thành file JAR có thể thực thi.
2. Cài Đặt Java Runtime Environment (JRE)
Server Linux của bạn cần có Java Runtime Environment (JRE) để chạy file JAR. Bạn có thể cài đặt OpenJDK bằng lệnh sau:
sudo apt update
sudo apt install openjdk-17-jre
Hãy thay đổi `openjdk-17-jre` nếu bạn muốn sử dụng phiên bản Java khác.
3. Chạy File JAR bằng Systemd
Systemd là một hệ thống quản lý dịch vụ phổ biến trên Linux. Chúng ta sẽ sử dụng systemd để đảm bảo ứng dụng Spring Boot của bạn tự động khởi động lại khi gặp sự cố hoặc sau khi reboot server.
3.1. Tạo File Service
Tạo một file service trong thư mục `/etc/systemd/system/`. Ví dụ, bạn có thể đặt tên file là `myapp.service`. Sử dụng trình soạn thảo văn bản yêu thích của bạn (ví dụ: `nano` hoặc `vim`) để tạo và chỉnh sửa file.
sudo nano /etc/systemd/system/myapp.service
3.2. Cấu Hình File Service
Thêm nội dung sau vào file `myapp.service`:
[Unit]
Description=My Spring Boot Application
After=network.target
[Service]
User=your_user
WorkingDirectory=/opt/myapp
ExecStart=/usr/bin/java -jar myapp.jar
Restart=on-failure
[Install]
WantedBy=multi-user.target
Hãy thay thế `your_user` bằng tên người dùng mà bạn muốn ứng dụng chạy dưới quyền. Thay thế `/opt/myapp` bằng đường dẫn đến thư mục chứa file JAR. Thay thế `myapp.jar` bằng tên file JAR của bạn.
3.3. Kích Hoạt và Khởi Động Service
Sau khi lưu file service, bạn cần kích hoạt và khởi động nó:
sudo systemctl daemon-reload
sudo systemctl enable myapp.service
sudo systemctl start myapp.service
3.4. Kiểm Tra Trạng Thái Service
Bạn có thể kiểm tra trạng thái của service bằng lệnh sau:
sudo systemctl status myapp.service
Nếu mọi thứ hoạt động tốt, bạn sẽ thấy trạng thái là `active (running)`.
4. Cấu Hình Nginx Reverse Proxy
Nginx là một web server và reverse proxy rất mạnh mẽ. Chúng ta sẽ sử dụng Nginx để xử lý SSL (HTTPS) và điều hướng request đến ứng dụng Spring Boot của bạn.
4.1. Cài Đặt Nginx
Nếu bạn chưa cài đặt Nginx, hãy cài đặt nó bằng lệnh sau:
sudo apt update
sudo apt install nginx
4.2. Tạo File Cấu Hình Nginx
Tạo một file cấu hình Nginx mới trong thư mục `/etc/nginx/sites-available/`. Ví dụ, bạn có thể đặt tên file là `myapp`.
sudo nano /etc/nginx/sites-available/myapp
4.3. Cấu Hình File Nginx
Thêm nội dung sau vào file `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;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
# Redirect HTTP to HTTPS
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name your_domain.com;
ssl_certificate /etc/ssl/certs/your_domain.crt;
ssl_certificate_key /etc/ssl/private/your_domain.key;
location / {
proxy_pass http://localhost:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
Hãy thay thế `your_domain.com` bằng tên miền của bạn. Thay thế `/etc/ssl/certs/your_domain.crt` và `/etc/ssl/private/your_domain.key` bằng đường dẫn đến file chứng chỉ SSL của bạn. Nếu ứng dụng Spring Boot của bạn chạy trên cổng khác 8080, hãy thay đổi `http://localhost:8080` cho phù hợp.
4.4. Tạo Symbolic Link và Khởi Động Lại Nginx
Tạo một symbolic link từ file cấu hình trong `sites-available` đến thư mục `sites-enabled`:
sudo ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/
Xóa file cấu hình mặc định:
sudo rm /etc/nginx/sites-enabled/default
Khởi động lại Nginx để áp dụng các thay đổi:
sudo systemctl restart nginx
4.5. Lấy Chứng Chỉ SSL (Let's Encrypt)
Bạn có thể sử dụng Let's Encrypt để lấy chứng chỉ SSL miễn phí. Cài đặt certbot bằng lệnh sau:
sudo apt install certbot python3-certbot-nginx
Chạy certbot để lấy chứng chỉ:
sudo certbot --nginx -d your_domain.com
Certbot sẽ tự động cấu hình Nginx để sử dụng chứng chỉ SSL.
5. Kiểm Tra Ứng Dụng
Mở trình duyệt web và truy cập vào tên miền của bạn (ví dụ: `https://your_domain.com`). Nếu mọi thứ hoạt động tốt, bạn sẽ thấy ứng dụng Spring Boot của bạn.
Kết luận
Vậy là chúng ta đã hoàn thành việc triển khai ứng dụng Spring Boot lên server Linux! Chúng ta đã sử dụng systemd để quản lý ứng dụng và Nginx để xử lý SSL và điều hướng request. Hy vọng bài viết này hữu ích cho bạn. Hãy thử áp dụng các bước này và chia sẻ kinh nghiệm của bạn ở phần bình luận bên dưới!
0 Bình luận
Vui lòng đăng nhập để gửi bình luận.