Share

Quay lại
Trang chủ / Kiến thức / Công nghệ và xu hướng / Deploy ứng dụng Spring boot lên Server Ubuntu [Hướng dẫn chi tiết]

Deploy ứng dụng Spring boot lên Server Ubuntu [Hướng dẫn chi tiết]

15/12/2023
28/03/2022
Deploy ứng dụng Spring boot lên Server Ubuntu [Hướng dẫn chi tiết]

Công việc tiếp theo sau khi đã hoàn thành coding (viết mã) đó là deployment (triển khai) ứng dụng lên server để các tính năng bạn code ra được public. Có nhiều cách để deploy ứng dụng Spring Boot như: chạy trực tiếp file jar, chạy trên tomcat server, sử dụng Gradle bootRun. 

Bài viết dưới đây sẽ bao gồm các bước để deploy ứng dụng Spring Boot bằng cách chạy trực tiếp file jar.

Có thể bạn quan tâm: Spring framework là gì, vì sao nên sử dụng để phát triển ứng dụng web?

Bước 1: Cài đặt môi trường trên Ubuntu Server

Bước đầu tiên cần thực hiện đó là cài đặt các môi trường cần thiết phục vụ cho việc build cũng như run file jar gồm có:

  • Môi trường Java: Open JDK

  • Tool build file jar: Gradle hoặc Maven

Cụ thể trình tự thực hiện như sau:

- Tải Open JDK:

Ở đây tôi lấy ví dụ với phiên bản Java 11 được dùng phổ biến hiện nay:

~$ wget https://github.com/AdoptOpenJDK/openjdk11-binaries/releases/download/jdk-11.0.10%2B9/OpenJDK11U-jdk_x64_linux_hotspot_11.0.10_9.tar.gz

Còn đối với các phiên bản khác của AdoptOpenJDK, các bạn có thể tham khảo tại đây.

Kết quả sau khi tải xong, ta được file OpenJDK11U-jdk_x64_linux_hotspot_11.0.10_9.tar.gz, tiến hành giải nén file này: 

~$  tar -xf OpenJDK11U-jdk_x64_linux_hotspot_11.0.10_9.tar.gz

- Tải tool build file jar

Tải Gradle:

~$  wget https://services.gradle.org/distributions/gradle-6.8.1-all.zip

Kết quả sau khi tải xong, ta được file gradle-6.8.1-all.zip, tiến hành giải nén file này:

~$  unzip gradle-6.8.1-all.zip

Lưu ý nếu server của bạn chưa cài đặt tool để unzip, có thể cài đặt thông qua câu lệnh:

~$  sudo apt-get install unzip

Còn đối với các Maven Project, câu lệnh để tải Maven như sau:

~$  wget https://dlcdn.apache.org/maven/maven-3/3.8.4/binaries/apache-maven-3.8.4-bin.tar.gz

Kết quả sau khi tải xong, ta được file apache-maven-3.8.4-bin.tar.gz, tiến hành giải nén file này: 

~$  tar -xf apache-maven-3.8.4-bin.tar.gz

Bước 2: Tải source code và build file jar

Bước tiếp theo trong quá trình deploy đó là tải source code Spring Boot về server để build file jar từ source code này. Bước này nên thực hiện trên server thay vì phía local bởi lẽ sẽ giúp các bạn chủ động và tiết kiệm thời gian cho các lần deploy tiếp theo.

- Cài đặt git:

 ~$  sudo apt-get -y install git-core

- Clone source code:

 ~$  git clone https://your_repository

- Tạo script build file jar:

Ở đây tôi đặt tên cho file chứa script là build.sh, đặt trong folder chứa source code /your_repository:

Script build gradle:

 ~$  cd  /your_repository

 ~$  vim build.sh

export JAVA_HOME=/home/ubuntu/path_to_jdk

export PATH=$PATH:$JAVA_HOME/bin

export PATH=$PATH:/home/ubuntu/path_to_gradle/bin

gradle build -x test

Script build maven:

 ~$  cd  /your_repository

 ~$  vim build.sh

export JAVA_HOME=/home/ubuntu/path_to_jdk

export PATH=$PATH:$JAVA_HOME/bin

export M2_HOME=/home/ubuntu/path_to_maven

export M2=$M2_HOME/bin

export PATH=$M2:$PATH

mvn clean install -DskipTests

- Cấp quyền để file build.sh có quyền thực thi:

 ~$  chmod 755 build.sh

- Build file jar:

 ~$  ./build.sh

Kết quả sau khi build xong, tại folder /your_repository sẽ thấy file jar cho ứng dụng của bạn, tôi ví dụ spring_boot_demo-0.0.1.jar.

Bước 3: Cấu hình folder để run file jar

Sau khi đã hoàn tất việc build file jar, bước tiếp theo đó là tạo folder riêng để file jar hoạt động trong folder này và thêm các file cấu hình cần thiết.

- Tạo folder running:

 ~$  mkdir running

 ~$  cd  running

- Copy file jar mới build vào folder running:

Gradle project:

 ~$  cp ../your_repository/build/libs/spring_boot_demo-0.0.1.jar ./

Maven project:

 ~$  cp ../your_repository/target/spring_boot_demo-0.0.1.jar ./

- Tạo folder chứa file log:

 ~$  mkdir log_daily

Để tiện cho việc theo dõi log hoạt động của ứng dụng, trong project Spring Boot của bạn cần cấu hình ghi log thông qua file logback.yml.

Cấu hình ghi log cho ứng dụng Java Spring Boot

- Thêm file cấu hình project application.yml ở trong folder running:

Cấu trúc file này giống với file cấu hình project mà bạn chạy phía local, tuy nhiên các giá trị config sẽ khác ví dụ như config database, redis, port, …

Bước 4: Tạo service system để bắt đầu hoặc dừng ứng dụng Spring Boot

Đã đến bước cuối cùng trong các bước deployment. Ở bước này, việc tạo service trong systemd để chạy ứng dụng Java Spring Boot sẽ có các ưu điểm như:

  • Khi chạy file jar dưới dạng service của hệ thống, ứng dụng Java sẽ hoạt động tốt hơn.

  • Trong trường hợp không phải do chủ động tắt mà service bị kill thì sẽ tự động khởi động lại được.

 ~$  cd /etc/systemd/system

 ~$  sudo vim spring_boot_demo.service

[Unit]

Description=Manage Spring boot app demo service

[Service]

WorkingDirectory=/home/ubuntu/path_to_folder_running

ExecStart=/home/ubuntu/path_to_jdk/bin/java -Xms500m -Xmx1000m -jar spring_boot_demo-0.0.1-SNAPSHOT.jar

User=ubuntu

Type=simple

Restart=on-failure

RestartSec=10

[Install]

WantedBy=multi-user.target

Trong đó

[Unit]: Chứa các thông tin mô tả chung về service.

[Service]: Chứa các thông tin khai báo, câu lệnh chạy service.

WorkingDirectory: Thư mục chứa file jar, file log, file cấu hình

ExecStart: Câu lệnh sẽ chạy khi start service, lưu ý 2 giá trị -Xms và -Xmx tương ứng là lượng RAM tối thiểu và tối đa mà hệ điều hành cấp cho ứng dụng Java

Type: Dùng kiểu chạy mặc định 

Restart: Nếu service bị kill sẽ tự khởi động lại  

RestartSec: Đợi 10s rồi khởi động lại

[Install]: Chứa các thông tin cài đặt.

- Reload daemon để systemd nhận service

~$  sudo systemctl daemon-reload

- Start service

~$  sudo systemctl start spring_boot_demo.service

- Stop service

~$  sudo systemctl stop spring_boot_demo.service

- Restart service

~$  sudo systemctl restart spring_boot_demo.service

Việc deploy bây giờ hoàn tất, để xem được log hoạt động của ứng dụng bạn cần di chuyển vào thư mục log_daily đã tạo ở bước trên:

~$  cd /running/log_daily

~$  tail -f spring_boot_demo_debug_yyyy-MM-dd.log

Kết luận

Ở lần đầu deploy tốn khá nhiều công sức tuy nhiên từ các lần tiếp theo bạn có thể thực hiện qua file build.sh và restart service là được.

Với những chia sẻ trên, hy vọng chúng tôi đã hỗ trợ được bạn trong công việc. Nếu có bất kỳ thắc mắc hãy để lại bình luận bên dưới bài viết, đội ngũ kỹ sư của chúng tôi sẽ giải đáp sớm nhất có thể.

Để đọc thêm nhiều bài viết về chủ đề Deployment nói riêng và công nghệ nói chung, bạn có thể truy cập vào kênh tri thức của Rabiloo tại đây.

 

Share


Cập nhật bài viết mới nhất từ chuyên gia

Không được để trống
Không được để trống
Không được để trống
Không được để trống
Tìm kiếm
Tags
Website là gì? Khái niệm, cấu tạo, phân loại các Website hiện nay
24/11/2023
21/12/2023
Website là gì? Khái niệm, cấu tạo, phân loại các Website hiện nay

Gặp gỡ và lắng nghe

Không được để trống
Không được để trống
Không được để trống
Không được để trống