Cara Deploy Aplikasi Java ke DigitalOcean
Pada tulisan kali ini kita akan belajar tahapan-tahapan proses deployment aplikasi Java sederhana ke cloud server Iaas dari DigitalOcean. Tahap pertama tentu saja yaitu menyiapkan aplikasi Java yang akan di Deploy. Sebagai contoh, disini kita buat aplikasi web sederhana menggunakan framework spring-boot
, berikut potongan kodenya:
@RestController
public class WebController {
@Value("${APP_NAME}")
private String name;
@Value("${APP_MESSAGE}")
private String message;
@GetMapping("/")
public String index(){
return "<h1>java-deployment</h1><b>Hello, " + name + "!</b><p>" + message + "</p>";
}
}
program diatas hanya berupa mapping sederhana yang akan menampilkan beberapa parameter yaitu APP_NAME
dan APP_MESSAGE
, yang dimana parameter tersebut akan kita set melalui environment variable.
Setelah aplikasi sudah siap, selanjutnya adalah membundle aplikasi kita beserta semua dependency menjadi satu file .jar
. Untuk membuat file jar menggunakan Maven, berikut perintahnya:
mvn clean package
File distribusi .jar
berhasil dibuat dan terletak di dalam direktori /target
. Untuk memastikan aplikasi berjalan dengan baik, mari kita coba running file .jar
tersebut. Berikut perintahnya:
java -jar -DAPP_NAME="John Wick" -DAPP_MESSAGE="I'm back!" .\target\java-deployment-0.0.1-SNAPSHOT.jar
Create Droplet
Droplet merupakan istilah yang digunakan DigitalOcean untuk layanan cloud server. Ketika membuat Droplet terdapat beberapa pilihan OS yang bisa digunakan, dan juga pilihan spesifikasi hardware, hingga lokasi region datacenter yang bisa kita pilih sesuai kebutuhan.
Ingin dapat free credit $100 di DigitalOcean? Silakan signup menggunakan kode referral ini. ^^
Pada bagian Authentication sangat disarankan menggunakan SSH Keys karena jauh lebih aman. SSH disini digunakan untuk mengakses server Droplet yang telah dibuat. Caranya terlebih dahulu kita generate SSH keypair dari laptop/komputer kita dengan menggunakan perintah ssh-keygen
:
ssh-keygen -f [file_name] -t rsa
hasilnya akan muncul 2 file yaitu public key yang berekstensi .pub
beserta secret key. Salin isi dari file public key kedalam form Authentication:
Jika sudah silakan tekan tombol Create Droplet dan hasilnya seperti berikut:
IP address diatas merupakan public IP dari Droplet yang kita buat.
Masuk ke Server Droplet
Untuk masuk ke server Droplet kita harus menggunakan SSH key yang sebelumnya sudah di daftarkan pada pembuatan Droplet.
ssh -i [path/to/rsa_filename] root@188.166.189.133
Selanjutnya adalah menyiapkan segala kebutuhan environment di server Droplet untuk menjalankan aplikasi yang kita buat, yaitu salah satunya adalah menginstall JRE
. Berikut perintahnya:
sudo apt update
sudo apt install openjdk-11-jre-headless
java -version
Upload file Jar
Jika semua kebutuhan environment siap, selanjutnya adalah meng-upload file .jar
ke Droplet. Namun sebelumnya kita akan membuat direktori bernama /app
pada root direktori. Berikut perintahnya:
mkdir /app
scp i- [path/to/rsa_filename] [path/to/jar-file] root@188.166.189.133:/app
Run Service
Kita akan menjalankan aplikasi yang telah diupload melalui systemd, Caranya yaitu sebelumnya kita akan membuat suatu script dengan ekstensi .service
. Script ini berisi perintah untuk menjalankan aplikasi kita pada system Linux. Berikut isi script-nya:
[Unit]
Description=java-deployment simple service
After=syslog.target network.target
[Service]
SuccessExitStatus=143
User=root
Type=simple
ExecStart=/usr/bin/java -jar -DAPP_NAME="John Wick" -DAPP_MESSAGE="Im back!" /app/java-deployment.jar
ExecStop=/bin/kill -15 $MAINPID
[Install]
WantedBy=multi-user.target
Selanjutnya upload file .service
tersebut ke dalam server Droplet dengan lokasi direktori /etc/systemd/system
.
scp i- [path/to/rsa_filename] [path/to/systemd-file] root@[droplet public IP]:/etc/systemd/system
Terakhir jalankan service tersebut:
systemctl start service-filename.service
systemctl enable service-filename.service
Proses deployment sudah selesai. Untuk mengakses aplikasi Java yang sudah di deploy gunakan public IP dari Droplet sebelumnya diikuti dengan port dari spring-boot yaitu 8080
:
http://188.166.189.133:8080/
ref: