Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Artikel ini memperlihatkan kepada Anda konfigurasi penyebaran dan runtime yang paling umum untuk aplikasi Java di Azure App Service. Jika ini pertama kalinya Anda menggunakan Azure App Service, Anda harus membaca terlebih dahulu panduan memulai cepat Java. Anda dapat menemukan jawaban atas pertanyaan umum tentang menggunakan App Service yang tidak spesifik untuk pengembangan Java di FAQ App Service.
Azure App Service menjalankan aplikasi web Java pada layanan yang dikelola sepenuhnya dalam tiga varian:
- Java Standard Edition (SE): Dapat menjalankan aplikasi yang disebarkan sebagai paket Java Archive (JAR) yang berisi server yang disematkan (seperti Spring Boot, Quarkus, Dropwizard, atau aplikasi dengan server Tomcat atau Jetty yang disematkan).
- Tomcat: Server Tomcat bawaan dapat menjalankan aplikasi yang disebarkan sebagai paket arsip aplikasi web (WAR).
- JBoss Enterprise Application Platform (EAP): Server JBoss EAP bawaan dapat menjalankan aplikasi yang disebarkan sebagai paket WAR atau arsip perusahaan (EAR). Didukung untuk aplikasi Linux dalam serangkaian tingkat harga yang mencakup Gratis, Premium v3, dan Terisolasi v2.gti
Perlihatkan versi Java
Untuk memperlihatkan versi Java saat ini, jalankan perintah berikut di Azure Cloud Shell:
az webapp config show --resource-group <resource-group-name> --name <app-name> --query linuxFxVersion
Untuk menampilkan semua versi Java yang didukung, jalankan perintah berikut di Cloud Shell:
az webapp list-runtimes --os linux | grep "JAVA\|TOMCAT\|JBOSSEAP"
Mendapatkan versi Java di kontainer Linux
Untuk informasi versi yang lebih rinci dalam kontainer Linux, buka sesi SSH dengan kontainer. Berikut adalah beberapa contoh yang bisa Anda jalankan.
Untuk melihat versi Java dalam sesi SSH:
java -version
Untuk melihat versi server Tomcat di sesi SSH:
sh /usr/local/tomcat/version.sh
Atau, jika server Tomcat Anda berada di lokasi kustom, temukan version.sh
dengan:
find / -name "version.sh"
Untuk melihat versi server JBoss EAP di sesi SSH:
$JBOSS_HOME/bin/jboss-cli.sh --connect --commands=:product-info
Untuk informasi lebih lanjut tentang dukungan versi, lihat Kebijakan Dukungan Runtime Bahasa App Service.
Apa yang terjadi terhadap runtime yang kedaluwarsa di App Service?
Runtime yang ketinggalan jaman tidak digunakan lagi oleh organisasi yang memelihara atau ditemukan memiliki kerentanan yang signifikan. Dengan demikian, halaman tersebut dihapus dari halaman buat dan konfigurasikan di portal. Saat runtime yang kedaluarsa disembunyikan dari portal, aplikasi apa pun yang masih menggunakan runtime tersebut terus berjalan.
Jika Anda ingin membuat aplikasi dengan versi runtime usang yang tidak lagi ditampilkan di portal, gunakan Azure CLI, templat ARM, atau Bicep. Alternatif penyebaran ini memungkinkan Anda membuat runtime yang tidak digunakan lagi yang telah dihapus di portal, tetapi masih didukung.
Jika runtime sepenuhnya dihapus dari platform App Service, pemilik langganan Azure Anda menerima pemberitahuan email sebelum penghapusan.
Menyebarkan aplikasi Anda
Membangun alat
Maven
Dengan menggunakan Maven Plugin untuk Azure Web Apps, Anda dapat dengan mudah menyiapkan proyek Anda dengan satu perintah di akar proyek Anda:
mvn com.microsoft.azure:azure-webapp-maven-plugin:2.13.0:config
Perintah ini menambahkan azure-webapp-maven-plugin
plugin dan konfigurasi terkait dengan meminta Anda untuk memilih Azure Web App yang sudah ada atau untuk membuat yang baru. Selama konfigurasi, ia mencoba mendeteksi apakah aplikasi Anda harus disebarkan ke Java SE, Tomcat, atau (khusus Linux) JBoss EAP. Kemudian Anda dapat menyebarkan aplikasi Java ke Azure dengan menggunakan perintah berikut:
mvn package azure-webapp:deploy
Berikut adalah konfigurasi sampel di pom.xml
:
<plugin>
<groupId>com.microsoft.azure</groupId>
<artifactId>azure-webapp-maven-plugin</artifactId>
<version>2.11.0</version>
<configuration>
<subscriptionId>111111-11111-11111-1111111</subscriptionId>
<resourceGroup>spring-boot-xxxxxxxxxx-rg</resourceGroup>
<appName>spring-boot-xxxxxxxxxx</appName>
<pricingTier>B2</pricingTier>
<region>westus</region>
<runtime>
<os>Linux</os>
<webContainer>Java SE</webContainer>
<javaVersion>Java 17</javaVersion>
</runtime>
<deployment>
<resources>
<resource>
<type>jar</type>
<directory>${project.basedir}/target</directory>
<includes>
<include>*.jar</include>
</includes>
</resource>
</resources>
</deployment>
</configuration>
</plugin>
Gradle
Siapkan Plugin Gradle untuk Azure Web Apps dengan menambahkan plugin ke
build.gradle
:plugins { id "com.microsoft.azure.azurewebapp" version "1.10.0" }
Konfigurasikan detail aplikasi web Anda. Sumber daya Azure yang sesuai akan dibuat jika belum ada. Berikut adalah konfigurasi sampel. Untuk detailnya, lihat dokumen ini.
azurewebapp { subscription = '<your subscription id>' resourceGroup = '<your resource group>' appName = '<your app name>' pricingTier = '<price tier like 'P1v2'>' region = '<region like 'westus'>' runtime { os = 'Linux' webContainer = 'Tomcat 10.0' // or 'Java SE' if you want to run an executable jar javaVersion = 'Java 17' } appSettings { <key> = <value> } auth { type = 'azure_cli' // support azure_cli, oauth2, device_code and service_principal } }
Sebarkan dengan hanya satu perintah.
gradle azureWebAppDeploy
IDE
Azure menyediakan pengalaman pengembangan Java App Service yang mulus di Lingkungan Pengembangan Terpadu (IDE) Java yang populer, termasuk:
- Visual Studio Code: Java Web Apps dengan Visual Studio Code.
- IntelliJ IDEA: Buat aplikasi web Hello World untuk Azure App Service dengan menggunakan IntelliJ.
- Eclipse IDE: Buat aplikasi web Hello World untuk Azure App Service dengan menggunakan Eclipse.
API Kudu dan OneDeploy
Klien penerapan seperti plugin Maven, GitHub Actions menggunakan azure/webapps-deploy@v3
dan yang lebih baru, atau perintah az webapp deploy menggunakan OneDeploy, yang dijalankan dengan memanggil /api/publish
titik akhir situs Kudu secara internal. Untuk informasi selengkapnya tentang API ini, lihat dokumentasi ini.
Ketika metode penyebaran ini digunakan, mereka akan secara otomatis mengganti nama file JAR yang disediakan menjadi app.jar
selama proses penyebaran. Ini akan ditempatkan di bawah /home/site/wwwwroot
. Untuk menyebarkan file JAR ke Java SE, lihat dokumentasi ini.
Catatan
Jika Anda menggunakan metode alternatif seperti FTP atau API ZipDeploy yang lebih lama, metode mengganti nama file JAR yang disediakan ini tidak akan dipanggil. Perhatikan hal ini jika menggunakan kotak teks File Startup di bagian Konfigurasi portal untuk secara eksplisit memanggil file JAR Anda.
Anda dapat menyebarkan file WAR ke aplikasi Tomcat Anda dengan mengikuti dokumentasi ini. Ketika metode penyebaran di atas digunakan, mereka akan secara otomatis mengganti nama file WAR yang disediakan menjadi app.war
selama proses penyebaran. Ini akan ditempatkan di bawah /home/site/wwwwroot
dan secara default hanya mendukung penyebaran satu file WAR di bawah wwwroot
. Ini tidak akan ditempatkan di bawah direktori tertentu seperti yang terlihat saat menggunakan API penyebaran seperti WarDeploy. Untuk menghindari masalah dengan konflik struktur berkas, disarankan untuk hanya menggunakan salah satu jenis penyebaran saja.
Untuk menyebarkan file WAR ke JBoss EAP, lihat dokumentasi ini. Ketika OneDeploy digunakan, ini akan secara otomatis mengganti nama file WAR menjadi app.war
dan ditempatkan di bawah /home/site/wwwroot
.
Untuk menyebarkan file EAR, gunakan FTP. Aplikasi EAR Anda disebarkan ke akar konteks yang ditentukan dalam konfigurasi aplikasi Anda. Jika Anda ingin aplikasi web Anda dilayani di jalur akar, pastikan aplikasi Anda mengatur akar konteks ke jalur akar: <context-root>/</context-root>
. Untuk informasi selengkapnya, lihat Mengatur akar konteks aplikasi web.
Jangan sebarkan WAR atau JAR Anda dengan menggunakan FTP. Alat FTP dirancang untuk mengunggah skrip startup, dependensi, atau file runtime lainnya. Ini bukan pilihan optimal untuk menyebarkan aplikasi web.
Menulis ulang atau mengalihkan URL
Untuk menulis ulang atau mengalihkan URL, gunakan salah satu penulis ulang URL yang tersedia, seperti UrlRewriteFilter.
Tomcat juga menyediakan katup penulisan ulang.
JBoss EAP juga menyediakan katup penulisan ulang.
Aplikasi pencatatan dan debugging
Laporan performa, visualisasi lalu lintas, dan pemeriksaan kesehatan tersedia untuk setiap aplikasi melalui portal Azure. Untuk informasi selengkapnya, lihat Gambaran umum diagnostik Azure App Service.
Streaming log diagnostik
Anda dapat mengakses log konsol yang dihasilkan dari dalam kontainer.
Untuk mengaktifkan pengelogan kontainer, jalankan perintah berikut:
az webapp log config --name <app-name> --resource-group <resource-group-name> --docker-container-logging filesystem
Ganti <app-name>
dan <resource-group-name>
dengan nama yang sesuai untuk aplikasi web Anda.
Setelah Anda mengaktifkan pengelogan kontainer, jalankan perintah berikut untuk melihat aliran log:
az webapp log tail --name <app-name> --resource-group <resource-group-name>
Jika log konsol tidak segera muncul, periksa lagi dalam 30 detik.
Untuk menghentikan streaming log kapan saja, pilih Ctrl+C.
Untuk informasi selengkapnya, lihat Mengalirkan log di Cloud Shell.
Akses konsol SSH di Linux
Untuk membuka sesi SSH langsung dengan kontainer Anda, aplikasi Anda harus berjalan.
Gunakan perintah az webapp ssh .
Jika belum diautentikasi, Anda harus mengautentikasi dengan langganan Azure untuk menyambungkan. Setelah diautentikasi, Anda akan melihat shell dalam browser, tempat Anda dapat menjalankan perintah di dalam kontainer Anda.
Catatan
Setiap perubahan yang Anda buat di direktori /home
disimpan dalam kontainer itu sendiri dan tidak bertahan setelah aplikasi dimulai ulang.
Untuk membuka sesi SSH jarak jauh dari komputer lokal Anda, lihat Membuka sesi SSH dari shell jarak jauh.
Alat pemecahan masalah Linux
Gambar Java bawaan didasarkan pada sistem operasi Alpine Linux . Gunakan pengelola paket apk
untuk memasang alat atau perintah pemecahan masalah.
Profiler Java
Semua runtime Java di Azure App Service dilengkapi dengan Java Development Kit (JDK) Flight Recorder untuk melakukan profiling terhadap beban kerja Java. Anda dapat menggunakannya untuk merekam Java Virtual Machine (JVM), sistem, dan peristiwa aplikasi, dan untuk memecahkan masalah dalam aplikasi Anda.
Untuk mempelajari selengkapnya tentang profiler Java, kunjungi dokumentasi Azure Application Insights.
Perekam Penerbangan Java
Semua runtime Java di App Service dilengkapi dengan Java Flight Recorder. Anda dapat menggunakannya untuk merekam peristiwa JVM, sistem, dan aplikasi dan untuk memecahkan masalah di aplikasi Java Anda.
SSH ke App Service dan jalankan jcmd
perintah untuk melihat daftar semua proses Java yang berjalan. Selain jcmd
itu sendiri, Anda harus melihat aplikasi Java Anda berjalan dengan nomor ID proses (PID).
078990bbcd11:/home# jcmd
Picked up JAVA_TOOL_OPTIONS: -Djava.net.preferIPv4Stack=true
147 sun.tools.jcmd.JCmd
116 /home/site/wwwroot/app.jar
Jalankan perintah berikut untuk memulai rekaman 30 detik JVM. Ini memprofilkan JVM dan membuat file Java Flight Recorder (JFR) bernama jfr_example.jfr
di direktori beranda. Ganti 116
dengan PID aplikasi Java Anda.
jcmd 116 JFR.start name=MyRecording settings=profile duration=30s filename="/home/jfr_example.jfr"
Selama interval 30 detik, Anda dapat memvalidasi rekaman yang sedang berlangsung dengan menjalankan jcmd 116 JFR.check
. Perintah menunjukkan semua rekaman untuk proses Java yang diberikan.
Perekaman berkelanjutan
Anda dapat menggunakan Java Flight Recorder untuk terus memprofilkan aplikasi Java Anda dengan dampak minimal pada performa runtime. Untuk melakukannya, jalankan perintah Azure CLI berikut untuk membuat pengaturan aplikasi bernama JAVA_OPTS
dengan konfigurasi yang diperlukan. Konten JAVA_OPTS
pengaturan aplikasi diteruskan ke java
perintah saat aplikasi Anda dimulai.
az webapp config appsettings set -g <your_resource_group> -n <your_app_name> --settings JAVA_OPTS=-XX:StartFlightRecording=disk=true,name=continuous_recording,dumponexit=true,maxsize=1024m,maxage=1d
Setelah perekaman dimulai, Anda dapat membuang data rekaman saat ini kapan saja dengan menggunakan JFR.dump
perintah .
jcmd <pid> JFR.dump name=continuous_recording filename="/home/recording1.jfr"
Menganalisis file JFR
Gunakan FTPS untuk mengunduh file JFR Anda ke komputer lokal Anda. Untuk menganalisis file JFR, unduh dan instal Java Mission Control (JMC). Untuk petunjuk tentang cara menggunakan Java Mission Control, lihat dokumentasi JMC dan instruksi penginstalan.
Pengelogan Aplikasi
Untuk mengonfigurasi App Service untuk menulis output konsol standar aplikasi Anda dan aliran kesalahan konsol standar ke sistem file lokal atau Azure Blob Storage, lakukan hal berikut. Aktifkan pengelogan aplikasi melalui portal Microsoft Azure atau di Azure CLI. Jika Anda memerlukan retensi yang lebih lama, konfigurasikan aplikasi untuk menulis output ke kontainer Blob Storage.
Log aplikasi Java dan Tomcat Anda dapat ditemukan di /home/LogFiles/Application/
direktori.
Pengelogan Azure Blob Storage untuk aplikasi berbasis Linux hanya dapat dikonfigurasi dengan menggunakan Azure Monitor.
Jika aplikasi Anda menggunakan Logback atau Log4j untuk pelacakan, Anda dapat meneruskan jejak ini untuk ditinjau ke Azure Application Insights. Gunakan instruksi konfigurasi kerangka kerja pengelogan di Menjelajahi log jejak Java di Application Insights.
Catatan
Karena kerentanan CVE-2021-44228
yang diketahui , pastikan untuk menggunakan Log4j versi 2.16 atau yang lebih baru.
Kustomisasi dan penyetelan
Azure App Service mendukung penyetelan dan penyesuaian di luar kotak melalui portal Microsoft Azure dan Azure CLI. Tinjau artikel berikut untuk konfigurasi aplikasi web non-Java tertentu:
- Mengonfigurasi pengaturan aplikasi
- Menyiapkan domain kustom
- Mengonfigurasi pengikatan TLS/SSL
- Menambahkan CDN
- Mengonfigurasi situs Kudu
Menyalin konten aplikasi secara lokal
Atur pengaturan aplikasi JAVA_COPY_ALL
ke true
untuk menyalin konten aplikasi Anda ke pekerja lokal dari sistem file bersama. Pengaturan ini membantu mengatasi masalah penguncian file.
Atur opsi runtime Java
Untuk mengatur memori yang dialokasikan atau opsi runtime JVM lainnya, buat pengaturan aplikasi bernama JAVA_OPTS
dengan opsi . App Service mengoper pengaturan ini sebagai variabel lingkungan ke runtime Java ketika dimulai.
Di portal Microsoft Azure, di bawah Pengaturan Aplikasi untuk aplikasi web, buat pengaturan aplikasi baru bernama JAVA_OPTS
yang menyertakan pengaturan lain, seperti -Xms512m -Xmx1204m
.
Di portal Microsoft Azure, di bawah Pengaturan Aplikasi untuk aplikasi web, buat pengaturan aplikasi baru bernama CATALINA_OPTS
yang menyertakan pengaturan lain, seperti -Xms512m -Xmx1204m
.
Untuk mengonfigurasi pengaturan aplikasi dari plugin Maven, tambah tag pengaturan/nilai di bagian plugin Azure. Contoh berikut menetapkan ukuran heap Java minimum dan maksimum tertentu:
<appSettings>
<property>
<name>JAVA_OPTS</name>
<value>-Xms1024m -Xmx1024m</value>
</property>
</appSettings>
Catatan
Anda tidak perlu membuat file web.config saat menggunakan Tomcat di Windows App Service.
Secara default, App Service mengatur ukuran JVM Max Heap menjadi 70% dari total memori yang tersedia untuk Paket App Service. Untuk menonaktifkan pengaturan default, Anda dapat menggunakan pengaturan aplikasi WEBSITE_DISABLE_JAVA_HEAP_CONFIGURATION="true".
Meningkatkan performa aplikasi Anda di platform mungkin melibatkan penyesuaian ukuran timbunan agar lebih sesuai dengan kebutuhan spesifik Anda. Saat menyetel pengaturan timbunan aplikasi, tinjau detail paket App Service Anda dan pertimbangkan persyaratan beberapa aplikasi dan slot penyebaran untuk menemukan alokasi memori yang optimal.
Mengaktifkan soket web
Aktifkan dukungan untuk soket web di portal Microsoft Azure di pengaturan Aplikasi untuk aplikasi. Anda perlu menghidupkan ulang aplikasi agar pengaturan diterapkan.
Aktifkan dukungan soket web dengan menggunakan Azure CLI dengan perintah berikut:
az webapp config set --name <app-name> --resource-group <resource-group-name> --web-sockets-enabled true
Kemudian, mulai ulang aplikasi Anda:
az webapp stop --name <app-name> --resource-group <resource-group-name>
az webapp start --name <app-name> --resource-group <resource-group-name>
Tetapkan pengodean karakter default
Di portal Microsoft Azure, di bawah Pengaturan Aplikasi untuk aplikasi web, buat pengaturan aplikasi baru bernama JAVA_OPTS
dengan nilai -Dfile.encoding=UTF-8
.
Atau, Anda dapat mengonfigurasi pengaturan aplikasi dengan menggunakan plugin App Service Maven. Tambah nama pengaturan dan tag nilai dalam konfigurasi plugin:
<appSettings>
<property>
<name>JAVA_OPTS</name>
<value>-Dfile.encoding=UTF-8</value>
</property>
</appSettings>
File JSP prakompilasi
Untuk meningkatkan performa aplikasi Tomcat, Anda dapat mengompilasi file JSP sebelum menyebarkan ke Azure App Service. Anda dapat menggunakan plugin Maven yang disediakan oleh Apache Sling, atau menggunakan file build Ant ini.
Abaikan pesan robots933456 dalam log
Anda mungkin melihat pesan berikut di log kontainer:
2019-04-08T14:07:56.641002476Z "-" - - [08/Apr/2019:14:07:56 +0000] "GET /robots933456.txt HTTP/1.1" 404 415 "-" "-"
Anda dapat mengabaikan pesan ini dengan aman.
/robots933456.txt
adalah jalur URL dummy yang digunakan App Service untuk memeriksa apakah kontainer mampu melayani permintaan. Respons 404 menunjukkan bahwa jalur tidak ada, dan memberi sinyal ke App Service bahwa kontainer sehat dan siap merespons permintaan.
Pilih versi runtime Java
App Service memungkinkan pengguna untuk memilih versi utama JVM, seperti Java 8 atau Java 11, dan versi patch, seperti 1.8.0_232 atau 11.0.5. Anda juga dapat memilih untuk memperbarui versi patch secara otomatis saat versi minor baru tersedia. Dalam kebanyakan kasus, aplikasi produksi harus menggunakan versi JVM patch yang disematkan, yang mencegah pemadaman yang tidak diantisipasi selama pembaruan otomatis versi patch. Semua aplikasi web Java menggunakan JVM 64-bit, dan tidak dapat dikonfigurasi.
Jika Anda menggunakan Tomcat, Anda dapat memilih untuk menetapkan versi patch Tomcat. Di Windows, Anda dapat menyematkan versi patch JVM dan Tomcat secara terpisah. Di Linux, Anda dapat menyematkan versi patch Tomcat. Versi patch JVM juga disematkan tetapi tidak dapat dikonfigurasi secara terpisah.
Jika Anda memilih untuk menyematkan versi minor, Anda perlu memperbarui versi minor JVM secara berkala pada aplikasi tersebut. Untuk memastikan aplikasi Anda berjalan di versi minor terbaru, buat slot staging dan tingkatkan versi minor di slot staging tersebut. Setelah Anda mengonfirmasi bahwa aplikasi berjalan dengan benar pada versi minor baru, Anda dapat mengubah slot penahapan dan produksi.
Jalankan JBoss CLI
Dalam sesi SSH aplikasi JBoss EAP Anda, Anda dapat menjalankan JBoss CLI dengan perintah berikut:
$JBOSS_HOME/bin/jboss-cli.sh --connect
Tergantung pada fase siklus server di mana JBoss EAP berada, Anda mungkin tidak dapat terhubung. Silakan tunggu beberapa menit, lalu coba kembali. Pendekatan ini berguna untuk pemeriksaan cepat status server Anda saat ini (misalnya, untuk melihat apakah sumber data dikonfigurasi dengan benar).
Selain itu, perubahan yang Anda buat pada server dengan JBoss CLI di sesi SSH tidak bertahan setelah aplikasi dimulai ulang. Setiap kali aplikasi dimulai, server JBoss EAP dimulai dengan penginstalan yang bersih. Selama siklus hidup startup, App Service membuat konfigurasi server yang diperlukan dan menyebarkan aplikasi. Untuk membuat perubahan persisten di server JBoss EAP, gunakan skrip startup kustom atau perintah startup. Untuk contoh end-to-end, lihat Mengonfigurasi sumber data untuk aplikasi Java SE, Tomcat, atau JBoss EAP di Azure App Service.
Atau, Anda dapat mengonfigurasi App Service secara manual untuk menjalankan file apa pun saat memulai. Contohnya:
az webapp config set --resource-group <group-name> --name <app-name> --startup-file /home/site/scripts/foo.sh
Untuk informasi selengkapnya tentang perintah CLI yang bisa Anda jalankan, lihat:
Pengklusteran
App Service mendukung pengklusteran untuk JBoss EAP versi 7.4.1 dan yang lebih baru. Untuk mengaktifkan pengklusteran, aplikasi web Anda harus diintegrasikan dengan jaringan virtual. Ketika aplikasi web terintegrasi dengan jaringan virtual, aplikasi ini dimulai ulang, dan penginstalan JBoss EAP secara otomatis dimulai dengan konfigurasi berkluster. Saat Anda menjalankan beberapa instans dengan penskalaan otomatis, instans JBoss EAP berkomunikasi satu sama lain melalui subnet yang ditentukan dalam integrasi jaringan virtual. Anda dapat menonaktifkan pengklusteran dengan membuat pengaturan aplikasi bernama WEBSITE_DISABLE_CLUSTERING
dengan nilai apa pun.
Catatan
Jika Anda mengaktifkan integrasi jaringan virtual dengan templat ARM, Anda perlu mengatur properti vnetPrivatePorts
secara manual ke nilai 2
. Jika Anda mengaktifkan integrasi jaringan virtual dari CLI atau portal, properti ini diatur untuk Anda secara otomatis.
Saat pengklusteran diaktifkan, instans JBoss EAP menggunakan FILE_PING
protokol penemuan JGroups untuk menemukan instans baru dan mempertahankan informasi kluster (misalnya: anggota kluster, pengidentifikasi mereka, dan alamat IP mereka). Pada App Service, file-file ini berada di bawah /home/clusterinfo/
. Instans EAP pertama yang mulai mendapatkan izin baca/tulis pada file keanggotaan kluster. Instans lain membaca file, menemukan simpul utama, dan berkoordinasi dengan simpul tersebut untuk disertakan dalam kluster dan ditambahkan ke file.
Catatan
Anda dapat menghindari timeout pengelompokan JBoss EAP dengan membersihkan file penemuan usang selama proses awal aplikasi Anda.
Jenis Paket App Service Premium V3, Premium V4, dan V2 Terisolasi dapat didistribusikan secara opsional di seluruh Zona Ketersediaan untuk meningkatkan ketahanan dan keandalan beban kerja penting bisnis Anda. Arsitektur ini juga dikenal sebagai redundansi zona. Fitur pengklusteran JBoss EAP kompatibel dengan fitur redundansi zona.
Aturan Autoscale
Saat Anda mengonfigurasi aturan skala otomatis untuk penskalaan horizontal, penting untuk menghapus instans secara bertahap (satu per satu) untuk memastikan bahwa setiap instans yang dihapus dapat mentransfer aktivitasnya (seperti menangani transaksi database) ke anggota kluster lain. Saat Anda mengonfigurasi aturan skala otomatis di portal untuk menurunkan skala, gunakan opsi berikut:
- Operasi: "Kurangi jumlah sebanyak"
- Pendinginan: "5 menit" atau lebih
- Jumlah instance: 1
Anda tidak perlu menambahkan unit secara bertahap (memperluas kapasitas). Anda dapat menambahkan beberapa instans ke kluster sekaligus.
Paket Layanan Aplikasi
JBoss EAP tersedia dalam tingkat harga berikut: F1, P0v3, P1mv3, P2mv3, P3mv3, P4mv3, P5mv3, P0v4, P1mv4, P2mv4, P3mv4, P4mv4, dan P5mv4.
JBoss EAP siklus hidup server
Aplikasi JBoss EAP di App Service melewati lima fase berbeda sebelum meluncurkan server:
- Fase penyiapan lingkungan
- Fase peluncuran server
- Fase konfigurasi server
- Fase penyebaran aplikasi
- Fase muat ulang server
Lihat bagian berikut untuk detail dan peluang untuk dikustomisasi (seperti melalui pengaturan aplikasi).
1. Fase penyiapan lingkungan
- Layanan SSH dimulai untuk mengaktifkan sesi SSH yang aman dengan kontainer.
- Keystore runtime Java diperbarui dengan sertifikat publik dan privat apa pun yang ditentukan di portal Microsoft Azure.
- Sertifikat publik disediakan oleh platform di
/var/ssl/certs
direktori, dan dimuat ke$JRE_HOME/lib/security/cacerts
. - Sertifikat privat disediakan oleh platform di
/var/ssl/private
direktori, dan dimuat ke$JRE_HOME/lib/security/client.jks
.
- Sertifikat publik disediakan oleh platform di
- Jika ada sertifikat yang dimuat dalam Java keystore pada langkah ini, properti
javax.net.ssl.keyStore
,javax.net.ssl.keyStorePassword
, danjavax.net.ssl.keyStoreType
akan ditambahkan ke variabel lingkunganJAVA_OPTS
. - Beberapa konfigurasi JVM awal ditentukan, seperti direktori pengelogan dan parameter tumpukan memori Java:
- Jika Anda memberikan
–Xms
atau–Xmx
parameter untuk memori di pengaturan aplikasiJAVA_OPTS
, nilai-nilai ini akan menggantikan yang disediakan oleh platform. - Jika Anda mengkonfigurasi pengaturan aplikasi
WEBSITES_CONTAINER_STOP_TIME_LIMIT
, nilai tersebut akan diteruskan ke properti runtimeorg.wildfly.sigterm.suspend.timeout
, yang mengontrol waktu tunggu maksimal untuk mematikan (dalam detik) ketika JBoss EAP sedang dihentikan.
- Jika Anda memberikan
- Jika aplikasi terintegrasi dengan jaringan virtual, runtime App Service meneruskan daftar port yang akan digunakan untuk komunikasi antar server dalam variabel
WEBSITE_PRIVATE_PORTS
lingkungan dan meluncurkan JBoss EAP dengan menggunakanclustering
konfigurasi. Jika tidak, konfigurasistandalone
digunakan.- Untuk konfigurasi
clustering
, file konfigurasi serverstandalone-azure-full-ha.xml
digunakan. - Untuk konfigurasi
standalone
, file konfigurasi serverstandalone-full.xml
digunakan.
- Untuk konfigurasi
2. Fase peluncuran server
- Jika JBoss EAP diluncurkan dalam konfigurasi
clustering
:- Setiap instance JBoss EAP menerima pengenal internal antara 0 dan jumlah instance yang digunakan saat aplikasi ditingkatkan skalanya.
- Jika beberapa file ditemukan di jalur penyimpanan transaksi untuk instans server ini (dengan menggunakan pengidentifikasi internalnya), itu berarti instans server ini menggantikan instans layanan yang identik. Instans layanan lain sebelumnya mengalami crash dan meninggalkan transaksi yang tidak dilakukan. Server dikonfigurasi untuk melanjutkan pekerjaan pada transaksi ini.
- Terlepas dari apakah JBoss EAP dimulai dalam konfigurasi
clustering
ataustandalone
, jika versi server adalah 7.4 atau yang lebih baru dan runtime menggunakan Java 17, maka konfigurasi diperbarui untuk mengaktifkan subsistem Elytron untuk keamanan. - Jika Anda mengonfigurasi pengaturan aplikasi
WEBSITE_JBOSS_OPTS
, nilai tersebut akan diteruskan ke skrip peluncur JBoss. Pengaturan ini dapat digunakan untuk menyediakan jalur ke berkas properti dan lebih banyak bendera yang mempengaruhi proses startup JBoss EAP.
3. Fase konfigurasi server
Pada awal tahap ini, App Service akan terlebih dahulu menunggu hingga server JBoss EAP dan antarmuka admin siap menerima permintaan sebelum melanjutkan. Proses ini dapat memakan waktu beberapa detik lagi jika Application Insights diaktifkan.
Ketika JBoss EAP Server dan antarmuka admin siap, App Service mengambil tindakan berikut:
- Menambahkan modul JBoss EAP
azure.appservice
, yang menyediakan kelas utilitas untuk pencatatan dan integrasi dengan App Service. - Memperbarui pencatat konsol untuk menggunakan mode tanpa warna sehingga file log tidak penuh dengan urutan pelepasan warna.
- Menyiapkan integrasi dengan log Azure Monitor.
- Memperbarui alamat IP pengikatan Bahasa Deskripsi Layanan Web (WSDL) dan antarmuka manajemen.
- Menambahkan modul
azure.appservice.easyauth
JBoss EAP untuk integrasi dengan autentikasi App Service dan ID Microsoft Entra. - Memperbarui konfigurasi pengelogan log akses dan nama dan rotasi file log server utama.
- Menambahkan modul JBoss EAP
Kecuali jika pengaturan aplikasi
WEBSITE_SKIP_AUTOCONFIGURE_DATABASE
telah ditentukan, App Service secara otomatis mendeteksi URL Java Database Connectivity (JDBC) dalam pengaturan aplikasi App Service. Jika URL JDBC yang valid ada untuk PostgreSQL, MySQL, MariaDB, Oracle, SQL Server, atau Azure SQL Database, url menambahkan driver yang sesuai ke server, menambahkan sumber data untuk setiap URL JDBC, dan mengatur nama Java Naming and Directory Interface (JNDI) untuk setiap sumber data kejava:jboss/env/jdbc/<app-setting-name>_DS
, di mana<app-setting-name>
adalah nama pengaturan aplikasi.Jika konfigurasi
clustering
diaktifkan, pencatat konsol yang akan dikonfigurasi akan diverifikasi.Jika ada file JAR yang disebarkan ke
/home/site/libs
direktori, modul global baru dibuat dengan semua file JAR ini.Di akhir fase, App Service menjalankan skrip startup kustom, jika ada. Logika pencarian untuk skrip startup kustom didefinisikan sebagai berikut:
- Jika Anda mengonfigurasi perintah startup (misalnya, melalui portal Microsoft Azure atau Azure CLI), jalankan; Sebaliknya
- Jika jalur
/home/site/scripts/startup.sh
ada, gunakan; jika tidak, - Jika jalur
/home/startup.sh
ada, gunakan jalur tersebut.
Perintah startup kustom atau skrip berjalan sebagai pengguna root (tidak perlu sudo
), sehingga mereka dapat menginstal paket Linux atau meluncurkan JBoss CLI untuk melakukan lebih banyak perintah penginstalan/kustomisasi JBoss EAP seperti membuat sumber data dan menginstal adaptor sumber daya. Untuk informasi tentang perintah manajemen paket Ubuntu, lihat dokumentasi Ubuntu Server. Untuk perintah JBoss CLI, lihat Panduan CLI Manajemen JBoss.
4. Fase penyebaran aplikasi
Script startup men-deploy aplikasi ke JBoss EAP dengan mencari di lokasi-lokasi berikut, berdasarkan urutan prioritas:
- Jika Anda mengonfigurasi pengaturan aplikasi
WEBSITE_JAVA_WAR_FILE_NAME
, sebarkan file yang ditentukan olehnya. - Jika
/home/site/wwwroot/app.war
ada, sebarkan. - Jika ada file EAR dan WAR lainnya di
/home/site/wwwroot
, sebarkan. - Jika
/home/site/wwwroot/webapps
ada, sebarkan file dan direktori di dalamnya. File WAR diluncurkan sebagai aplikasi itu sendiri, dan direktori diluncurkan sebagai aplikasi web terkompresi (tidak dikompresi). - Jika ada halaman JSP mandiri di
/home/site/wwwroot
, salin ke root server web dan sebarkan sebagai satu aplikasi web. - Jika tidak ada file yang dapat disebarkan yang ditemukan, sebarkan halaman selamat datang default (halaman parkir) dalam konteks akar.
5. Fase muat ulang server
- Setelah langkah-langkah penyebaran selesai, server JBoss EAP dimuat ulang untuk menerapkan perubahan apa pun yang memerlukan pemuatan ulang server.
- Setelah server dimuat ulang, aplikasi yang disebarkan ke server JBoss EAP harus siap merespons permintaan.
- Server berjalan hingga aplikasi App Service dihentikan atau dimulai ulang. Anda dapat menghentikan atau memulai ulang aplikasi App Service secara manual, atau memicu mulai ulang saat menyebarkan file atau membuat perubahan konfigurasi pada aplikasi App Service.
- Jika server JBoss EAP keluar secara tidak normal dalam konfigurasi
clustering
, suatu fungsi akhir yang disebutemit_alert_tx_store_not_empty
akan dijalankan. Fungsi ini memeriksa apakah proses JBoss EAP meninggalkan file penyimpanan transaksi yang tidak kosong di disk. Jika demikian, kesalahan dicatat di konsol:Error: finishing server with non-empty store for node XXXX
. Ketika instans server baru dimulai, ia mencari file penyimpanan transaksi yang tidak kosong untuk melanjutkan pekerjaan (lihat 2. Fase peluncuran server).
Konfigurasi dasar Tomcat
Catatan
Bagian ini hanya berlaku untuk Linux.
Pengembang Java dapat menyesuaikan pengaturan server, memecahkan masalah, dan menyebarkan aplikasi ke Tomcat dengan percaya diri jika mereka tahu tentang file server.xml dan detail konfigurasi Tomcat. Kemungkinan penyesuaian meliputi:
- Menyesuaikan konfigurasi Tomcat: Saat Anda memahami file server.xml dan detail konfigurasi Tomcat, Anda dapat menyempurnakan pengaturan server agar sesuai dengan kebutuhan aplikasi mereka.
- Debugging: Saat aplikasi disebarkan di server Tomcat, pengembang perlu mengetahui konfigurasi server untuk memecahkan masalah apa pun yang mungkin muncul. Proses ini termasuk memeriksa log server, memeriksa file konfigurasi, dan mengidentifikasi kesalahan apa pun yang mungkin terjadi.
- Pemecahan masalah Tomcat: Tak pelak, pengembang Java mengalami masalah dengan server Tomcat mereka, seperti masalah performa atau kesalahan konfigurasi. Ketika Anda memahami file server.xml dan detail konfigurasi Tomcat, pengembang dapat dengan cepat mendiagnosis dan memecahkan masalah ini, yang dapat menghemat waktu dan upaya.
- Menyebarkan aplikasi ke Tomcat: Untuk menyebarkan aplikasi web Java ke Tomcat, pengembang perlu tahu cara mengonfigurasi file server.xml dan pengaturan Tomcat lainnya. Anda perlu memahami detail ini untuk berhasil menyebarkan aplikasi dan memastikan bahwa aplikasi berjalan lancar di server.
Saat Anda membuat aplikasi dengan Tomcat bawaan untuk menghosting beban kerja Java Anda (file WAR atau file JAR), ada pengaturan bawaan yang Anda dapatkan untuk konfigurasi Tomcat. Anda dapat merujuk ke dokumentasi resmi Apache Tomcat untuk informasi terperinci, termasuk konfigurasi default untuk Tomcat Web Server.
Selain itu, ada transformasi tertentu yang diterapkan pada sistem distribusi Tomcat server.xml saat startup. Transformasi ini mencakup perubahan pada pengaturan Konektor, Host, dan Katup .
Versi terbaru Tomcat memiliki server.xml (8.5.58 dan 9.0.38 dan seterusnya). Versi Lama Tomcat tidak menggunakan transformasi dan mungkin memiliki perilaku yang berbeda sebagai hasilnya.
Konektor
<Connector port="${port.http}" address="127.0.0.1" maxHttpHeaderSize="16384" compression="on" URIEncoding="UTF-8" connectionTimeout="${site.connectionTimeout}" maxThreads="${catalina.maxThreads}" maxConnections="${catalina.maxConnections}" protocol="HTTP/1.1" redirectPort="8443"/>
-
maxHttpHeaderSize
diatur ke16384
. -
URIEncoding
diatur keUTF-8
. -
connectionTimeout
diatur keWEBSITE_TOMCAT_CONNECTION_TIMEOUT
, yang secara default diatur ke240000
. -
maxThreads
diatur keWEBSITE_CATALINA_MAXTHREADS
, yang secara default diatur ke200
. -
maxConnections
diatur keWEBSITE_CATALINA_MAXCONNECTIONS
, yang secara default diatur ke10000
.
Catatan
Pengaturan connectionTimeout
, maxThreads
, dan maxConnections
dapat disetel dengan pengaturan aplikasi.
Berikut ini adalah contoh perintah CLI yang mungkin Anda gunakan untuk mengubah nilai connectionTimeout
, , maxThreads
atau maxConnections
:
az webapp config appsettings set --resource-group myResourceGroup --name myApp --settings WEBSITE_TOMCAT_CONNECTION_TIMEOUT=120000
az webapp config appsettings set --resource-group myResourceGroup --name myApp --settings WEBSITE_CATALINA_MAXTHREADS=100
az webapp config appsettings set --resource-group myResourceGroup --name myApp --settings WEBSITE_CATALINA_MAXCONNECTIONS=5000
Konektor menggunakan alamat kontainer alih-alih 127.0.0.1.
Tuan Rumah
<Host appBase="${site.appbase}" xmlBase="${site.xmlbase}" unpackWARs="${site.unpackwars}" workDir="${site.tempdir}" errorReportValveClass="com.microsoft.azure.appservice.AppServiceErrorReportValve" name="localhost" autoDeploy="true">
-
appBase
diatur keAZURE_SITE_APP_BASE
, yang defaultnya ke lokalWebappsLocalPath
. -
xmlBase
diatur keAZURE_SITE_HOME
, yang secara default diatur ke/site/wwwroot
. -
unpackWARs
diatur keAZURE_UNPACK_WARS
, yang secara default diatur ketrue
. -
workDir
diatur keJAVA_TMP_DIR
, yang defaultnyaTMP
. -
errorReportValveClass
menggunakan katup laporan kesalahan kustom kami.
Katup
<Valve prefix="site_access_log.${catalina.instance.name}" pattern="%h %l %u %t "%r" %s %b %D %{x-arr-log-id}i" directory="${site.logdir}/http/RawLogs" maxDays="${site.logRetentionDays}" className="org.apache.catalina.valves.AccessLogValve" suffix=".txt"/>
-
directory
diatur keAZURE_LOGGING_DIR
, yang secara default diatur kehome\logFiles
. -
maxDays
diatur keWEBSITE_HTTPLOGGING_RETENTION_DAYS
, yang secara default diatur ke7
. Nilai ini selaras dengan default platform pengelogan aplikasi.
Di Linux, ia memiliki semua kustomisasi yang sama, dan menambahkan beberapa halaman kesalahan dan pelaporan ke katup:
<xsl:attribute name="appServiceErrorPage">
<xsl:value-of select="'${appService.valves.appServiceErrorPage}'"/>
</xsl:attribute>
<xsl:attribute name="showReport">
<xsl:value-of select="'${catalina.valves.showReport}'"/>
</xsl:attribute>
<xsl:attribute name="showServerInfo">
<xsl:value-of select="'${catalina.valves.showServerInfo}'"/>
</xsl:attribute>
Konten terkait
Kunjungi pusat Azure untuk Pengembang Java untuk menemukan panduan cepat, tutorial, dan dokumentasi referensi Azure Java.