/blog/*

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

Run on localhost

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.

Create Droplet

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:

Add public SSH key

Jika sudah silakan tekan tombol Create Droplet dan hasilnya seperti berikut:

Droplet instance

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: