Spring Boot
Sejak awal berdirinya, Jelastic PaaS telah mengedepankan ide untuk membuat proses deployment aplikasi menjadi semudah dan sesederhana mungkin. Mengikuti misi kami, hari ini kami dengan gembira memperkenalkan pendatang baru dalam keluarga teknologi berbasis Java yang sudah teruji - server Spring Boot untuk aplikasi mandiri dan berkluster atau microservices.
Dengan template stack Spring Boot dari Jelastic, Anda dapat dengan mudah menjalankan berbagai aplikasi berbasis Java di dalam cloud melalui antarmuka grafis yang mudah digunakan atau skrip otomatisasi. Jenis proyek Java berikut dapat di-host pada server ini:
- JAR - untuk aplikasi Java mandiri atau instance microservice stateless, yang dibuat menggunakan framework Spring Boot, Dropwizard atau Spark
- WAR - untuk aplikasi web dengan kontainer servlet yang terintegrasi
Dengan cara ini, Spring Boot memungkinkan Anda untuk tetap portabel, sementara Jelastic memastikan pengiriman aplikasi ke produksi secara cepat dan pengelolaan yang komprehensif melalui GUI, API, atau Cloud Scripting.
Pembuatan Lingkungan Spring Boot
Jadi, masuklah ke dashboard Jelastic Cloud Anda dan mari kita mulai.
1. Pertama-tama, Anda perlu membuat Lingkungan Baru - gunakan tombol yang sama untuk meluncurkan wizard topologi. Pindahlah ke tab bahasa Java dan pilih template Spring Boot dalam lapisan server aplikasi di panel sebelah kiri seperti yang ditunjukkan di bawah ini. Tetapkan jumlah sumber daya yang dialokasikan, ketik nama lingkungan Anda, dan klik Create untuk melanjutkan.
2. Ketika lingkungan baru Anda muncul di dashboard, Anda bisa mengklik Buka di Browser untuk meluncurkan sampel aplikasi Hello World yang sudah diinstal sebelumnya.
Dengan cara ini, Anda dapat memastikan instance Spring Boot Anda berfungsi dan berjalan.
Sekarang, mari kita pertimbangkan bagaimana mengintegrasikan aplikasi Java kustom Anda ke dalam lingkungan Spring Boot yang telah dibuat.
Deployment Aplikasi Java ke Spring Boot
Untuk meluncurkan proyek Spring Boot Anda di dalam Jelastic, Anda perlu terlebih dahulu mengemasnya ke dalam arsip eksekusi dengan semua kelas yang sudah dikompilasi dan sumber daya terkait di dalamnya (termasuk kontainer servlet yang terintegrasi untuk menangani aplikasi yang berdiri sendiri). Jenis arsip berikut didukung:
- JAR - jenis arsip Java yang paling umum; harus berisi manifest dengan kelas entry point yang dinyatakan atau dibangun sebagai JAR “fat” semua-dalam-satu atau file JAR yang tersemat
- ** WAR** - untuk deployment aplikasi dengan kontainer servlet terintegrasi; khususnya, harus digunakan untuk proyek berbasis JSP untuk mengatasi masalah dukungan yang dikenal dalam Spring Boot
Paket ZIP
Secara default, setiap file JAR eksekusi yang dibuat oleh Spring Boot, mengandung file properti dan pengaturan tambahan. Namun, dalam hal deployment produksi, lebih nyaman untuk mendistribusikan file-file ini di luar arsip yang dikemas. Misalnya, ini dapat diterapkan untuk file properti konfigurasi eksternal (application.property , application.yml) atau konfigurasi logging (log4j2.properties , logback.xml).
Untuk menyederhanakan deployment aplikasi dalam kasus ini, Jelastic mendukung deployment paket ZIP, yang dapat berisi file JAR eksekusi dan file atau direktori tambahan apa pun.
Saat membongkar paket ZIP, Jelastic memproses semua folder yang disertakan untuk mendeteksi JAR yang dapat dijalankan. Untuk dianggap sebagai titik eksekusi, file JAR harus berisi deklarasi Main-Class di dalam file manifest META-INF/MANIFEST.MF. Setelah file JAR ditemukan, Jelastic akan menjalankan JVM dengan parameter “java –jar /path/to/jar” di dalam direktori yang sesuai dengan folder root dari arsip yang dideploy.
Contoh
Di bawah ini adalah struktur direktori sampel dari paket ZIP yang dapat digunakan untuk deployment ke dalam Jelastic PaaS.
application.zip
|
+-config
| +-application.properties
| +-log4j.properties
+-lib
| +-my-springboot-app.jar
+-some_directory
| +-additional_file1
| +-additional_file2
+-additional_configuration.yml
Jika deploy arsip seperti itu, Jelastic akan menjalankan JVM dengan argumen “java -jar lib/my-springboot-app.jar” dari direktori yang sesuai dengan folder root dari arsip application.zip yang dibongkar.
Deployment Aplikasi
Jelastic menyediakan berbagai kemungkinan untuk deployment aplikasi Anda ke Cloud, memungkinkan Anda memilih yang paling disukai.
- Deployment Manual
Pendekatan yang paling jelas dan nyaman adalah melakukan ini secara manual melalui GUI Jelastic yang nyaman.
Sebagai contoh, coba proyek Spring Boot sampel, yang mewakili aplikasi sederhana untuk menyimpan pesan yang Anda buat - Anda dapat membangunnya dari sumber atau deploy kami JAR.
Untuk itu, Upload arsip dengan aplikasi Anda melalui Manager Deployment dan mulai deployment-nya dengan mengklik tombol Deploy to.
Dalam dialog yang terbuka, pilih lingkungan tujuan (sebelumnya dibuat spring-boot-app dalam kasus kami) dan konfirmasi Deploy dengan tombol yang sama. Tunggu hingga tugas yang sesuai selesai.
- Deploy Jarak Jauh via CLI
Sebagai alternatif, Anda dapat memanfaatkan Jelastic CLI untuk menge-deploy aplikasi Anda ke lingkungan Spring Boot target secara jarak jauh dengan perintah berikut:
~/jelastic/environment/control/deployapp --envName spring-boot-app --fileUrl http://link/to/archive --fileName my_springboot.jar --context ROOT
Memeriksa Log
Setelah deployment selesai, beri sistem beberapa waktu lagi untuk menjalankan layanan yang diperlukan (di mana penundaan bergantung langsung pada kompleksitas proyek Anda) - kemajuan operasi ini saat ini dapat dilacak secara real-time melalui run.log log server.
Setelah selesai, antarmuka web aplikasi Anda (jika dijalankan pada port 8080 default) dapat diakses dengan cara yang sama seperti Hello World yang sudah terinstal sebelumnya - dengan mengklik Open in Browser untuk environment Anda.
Cara Membangun Aplikasi Spring Boot
Untuk membuat file arsip yang sesuai untuk hosting aplikasi Anda di dalam Jelastic PaaS, alat build Gradle atau Maven bisa digunakan.
- Basis minimal untuk skrip build Gradle (build.gradle) terdaftar di bawah ini, di mana parameter dalam kurung kurawal harus diganti dengan nilai kustom Anda:
buildscript {
ext {
springBootVersion = '{X.X.X.RELEASE}'
}
repositories {
mavenLocal()
mavenCentral()
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
}
}
apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'org.springframework.boot'
sourceCompatibility = 1.8
targetCompatibility = 1.8
jar {
baseName = '{your_app_name}'
version = '{your_app_version}'
}
repositories {
mavenLocal()
mavenCentral()
}
dependencies {
compile("org.springframework.boot:spring-boot-starter")
}
task wrapper(type: Wrapper) {
gradleVersion = '{used_gradle_version}'
}
Untuk membangun file JAR eksekusi dengan skrip ini, gunakan perintah berikut:
./gradlew clean assemble
Arsip yang dihasilkan akan disimpan dalam jalur ..build/libs/{app_name}-{app-version}.jar.
- Basis minimal untuk pom.xml deskripsi proyek Maven termasuk parameter berikut (di mana parameter dalam kurung kurawal harus diganti dengan nilai kustom Anda):
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>{Х.Х.Х.RELEASE}</version>
</parent>
<groupId>org.springframework</groupId>
<artifactId>{your_app_name}</artifactId>
<version>{your_app_version}</version>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<!-- Compile -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
Untuk menghasilkan JAR eksekusi dengan Maven, jalankan perintah berikut:
mvn clean package
Arsip aplikasi Anda akan ditempatkan pada lokasi ...target/{app_name}-{app-version}.jar.
Plugin Maven Jelastic
Sebagai opsi build & deployment gabungan yang lebih nyaman, pertimbangkan untuk menggunakan Jelastic Maven plugin, yang bertujuan untuk memfasilitasi pengiriman aplikasi Anda ke Cloud. Integrasikan itu dalam konfigurasi pom.xml proyek Maven Anda dan dapatkan kemampuan untuk membangun arsip aplikasi dan langsung mendorongnya ke lingkungan target dengan perintah tunggal.
Alat CI/CD untuk Aplikasi Java di Cloud
Node Build Maven Khusus di Cloud
Jika Anda lebih suka bekerja melalui GUI, Anda dapat memanfaatkan node build Maven khusus yang disediakan oleh Jelastic PaaS. Diikutsertakan dalam suatu environment bersamaan dengan server aplikasi Java, dapat digunakan untuk mengambil, mengkompilasi, dan mendeploy aplikasi dari sumber di repository GIT/SVN yang ditentukan.
Add-On Otomatisasi CI/CD
Sebagai tambahan untuk semua opsi yang disebutkan di atas, Jelastic menawarkan add-on Git-Push-Deploy khusus untuk deployment aplikasi terus-menerus dari repository GitHub & GitLab melalui pipeline CI/CD yang terintegrasi secara otomatis. Hal ini dapat sangat berguna ketika proyek Anda berada di bawah pengembangan yang intensif, yang menyiratkan banyak commit berulang. Dengan solusi ini, aplikasi Anda akan secara otomatis dibangun kembali dan dikirim ke server target setelah ada perubahan dalam kode aplikasinya, sehingga versi terbaru dapat diakses melalui domain yang sesuai dalam hitungan menit.
Memelihara Server Spring Boot Anda
Mayoritas operasi manajemen server dasar dapat dilakukan langsung melalui UI Jelastic Cloud dengan alat yang terintegrasi dengan sesuai, misalnya:
- gunakan Configuration Manager bawaan untuk membuat atau mengunggah file baru, mengedit atau menghapus yang sudah ada, mengatur titik mount, dan mengelola data yang di-export dari server lain
- mengatur opsi dan argumen Java kustom untuk server Anda dengan menyesuaikan variabel lingkungan JAVA_OPTS dan JAVA_ARGS
- telusuri Logs server untuk mendapatkan detail tentang operasi-run untuk administrasi layanan yang efisien dan pemecahan masalah
- lacak Statistics pada sumber daya yang digunakan untuk mengetahui kapasitas yang sebenarnya dibutuhkan server Anda dan menentukan pendekatan terbaik untuk alokasinya
Untuk operasi pemeliharaan yang lebih kompleks, Anda dapat terhubung ke container Spring Boot Anda via SSH (baik menggunakan web atau local SSH client). Tips berikut ini bisa berguna ketika bekerja dengan server Spring Boot Anda:
- file aplikasi Anda dapat ditemukan di direktori /home/jelastic/APP, yang dianggap sebagai “current” atau “working” untuk proses Java
- parameter konfigurasi Java Virtual Machine (JVM) dapat disesuaikan dalam file _/home/jelastic/conf/variables.conf** _**(misalnya, untuk mengaktifkan debug jarak jauh atau melewatkan argumen tambahan ke JVM)
- untuk memeriksa file log, lihat direktori _/var/log_
- lokasi _/home/jelastic_ dianggap sebagai direktori home
- JDK terletak dalam direktori _/usr/java/latest** _**
- untuk memulai ulang aplikasi Anda, jalankan perintah _jem service restart_
Secara khusus, kemampuan untuk mengoperasikan server melalui console bisa sangat berguna ketika menangani aplikasi Spring Boot non-web.
Penentuan Skala Otomatis untuk Server Spring Boot
Platform Jelastic menyediakan elastisitas skala waktu-nyata yang tersedia langsung-out-of-the-box untuk semua server. Dengan mengaktifkan baik skala vertikal otomatis maupun horizontal, Anda dapat membuat aplikasi Spring Boot Anda sepenuhnya beradaptasi dengan beban kerja yang dapat berubah.
Penentuan Skala Vertikal Otomatis
Skala vertikal otomatis diaktifkan secara default dan memastikan layanan Anda tetap tersedia selama lonjakan beban, dan pada saat yang sama, menghilangkan keperluan untuk membayar penggandaan kapasitas yang tidak digunakan. Tentukan saja batas maksimum sumber daya (dengan cloudlets) yang bisa digunakan aplikasi Anda dan Jelastic akan secara otomatis menyesuaikan ukuran memori maksimum (-Xmx) untuk aplikasi Anda berdasarkan kapasitas-kapasitas ini, misalnya:
- 8 cloudlets (1GiB RAM) menetapkan ukuran heap maksimum ke 819 MB
- 16 cloudlets (2GiB RAM) menetapkan ukuran heap maksimum ke 1638 MB
Untuk menyesuaikan -Xmx atau opsi JVM lainnya, edit file _/home/jelastic/conf/variables.conf_ baik melalui Configuration Manager atau Jelastic SSH Gate.
Penentuan Skala Horizontal Otomatis
Fitur penentuan skala horizontal otomatis memungkinkan menyesuaikan jumlah server web dan server aplikasi menurut konsumsi sumber daya aplikasi Anda. Ini diimplementasikan dengan triggers monitoring yang dapat disesuaikan yang didasarkan pada penggunaan jenis sumber daya tertentu:
- CPU
- Memory (RAM)
- Network
- Disk I/O
- Disk IOPS
Note: Ketika sebuah server diperbesar (baik dengan trigger atau secara manual), NGINX load balancer akan secara otomatis ditambahkan ke environment Anda, dengan konfigurasi awal untuk pembalansan beban sesi sticky. Alternatifnya, Anda dapat beralih dari stack balancer yang digunakan ke Apache , HAProxy , Varnish , atau LiteSpeed ADC.
Selain itu, semua node yang baru ditambahkan akan dibuat pada server hardware berbeda untuk memastikan keterseediaan tinggi untuk aplikasi Anda.
Enkripsi Lalu Lintas dengan SSL
Jika proyek Anda memerlukan beberapa konfigurasi yang lebih kompleks untuk penanganan permintaan, seperti HTTPS dan pembalansan beban, jangan ragu untuk memanfaatkan opsi keamanan berikut:
- Fungsi SSL bawaan memungkinkan Anda segera menerapkan enkripsi untuk domain internal aplikasi Anda (yaitu https://{envName}{platformDomain}) dengan sertifikat wildcard Jelastic SSL
- SSL kustom dapat dikonfigurasikan untuk lingkungan berbasis Spring Boot dengan menambahkan salah satu dari balancer beban bersertifikat
- sebagai alternatif SSL gratis, berlaku untuk domain internal dan kustom, sebuah aplikasi tambahan Jelastic yang dikembangkan secara khusus menggunakan Let’s Encrypt dapat digunakan (memerlukan load balancer bersertifikat)
Menerapkan solusi apa pun ini akan memungkinkan enkripsi lalu lintas pada tingkat environment, menghilangkan kebutuhan untuk mengkonfigurasinya di dalam aplikasi Anda. Sebagai hasilnya, lalu lintas terenkripsi yang diterima akan diakhiri pada lapisan pembalansan beban dan diteruskan ke server aplikasi dalam tampilan polos.
Port Kustom & Pertimbangan Penggunaan HTTP/HTTPS
Secara default, mayoritas aplikasi Java mendengarkan port 8080 pada
tingkat HTTP, karena itu dianggap sebagai endpoint Spring Boot standar untuk
lalu lintas HTTP.
Selain itu, ketika tautan environment Anda diminta di Internet,
ports secara otomatis dipetakan
sebagai berikut:
- port HTTP internal 8080 mengacu pada port 80
- port HTTPS yang aman 8743 mengacu pada port 443 dan 80
Jadi, jika bekerja dengan port HTTP/HTTPS standar, aplikasi Anda dapat diakses langsung melalui URL environment dengan protokol yang sesuai ditentukan, tanpa perlu memasukkan nomor port yang tepat.
Dan jika aplikasi Anda memang perlu memproses permintaan pada beberapa antar muka kustom, Jelastic memungkinkan mengekspos port TCP dan UDP container private melalui Endpoints. Setelah menambahkan seperti itu, port yang sesuai akan secara otomatis diaktifkan dalam pengaturan firewall server, membuatnya dapat diakses untuk seluruh dunia.