Mengonfigurasi aplikasi Java untuk Azure App Service
Catatan
Untuk aplikasi Spring, sebaiknya gunakan Azure Spring Apps. Namun, Anda masih dapat menggunakan Azure App Service sebagai tujuan. Lihat Panduan Tujuan Beban Kerja Java untuk saran.
Azure App Service memungkinkan pengembang Java untuk dengan cepat membangun, menyebarkan, dan menskalakan aplikasi web Java SE, Tomcat, dan JBoss EAP mereka pada layanan yang dikelola sepenuhnya. Sebarkan aplikasi dengan plugin Maven, dari baris perintah, atau di editor seperti IntelliJ, Eclipse, atau Visual Studio Code.
Panduan ini menyediakan konsep dan instruksi utama untuk pengembang Java menggunakan Azure App Service. Jika Anda belum pernah menggunakan Azure App Service, Anda harus membaca mulai cepat Java dahulu. Pertanyaan umum tentang menggunakan Azure App Service yang tidak spesifik untuk pengembangan Java dijawab dalam Tanya Jawab Umum Azure App Service.
Perlihatkan versi Java
Untuk memperlihatkan versi Java saat ini, jalankan perintah berikut di Azure Cloud Shell:
az webapp config show --name <app-name> --resource-group <resource-group-name> --query "[javaVersion, javaContainer, javaContainerVersion]"
Untuk memperlihatkan semua versi Java yang didukung, jalankan perintah berikut di Azure Cloud Shell:
az webapp list-runtimes --os windows | grep 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 memperlihatkan semua versi Java yang didukung, jalankan perintah berikut di Azure Cloud Shell:
az webapp list-runtimes --os linux | grep "JAVA\|TOMCAT\|JBOSSEAP"
Untuk informasi selengkapnya tentang dukungan versi, lihat Kebijakan dukungan runtime bahasa app service.
Menyebarkan aplikasi Anda
Build Tools
Maven
Dengan Maven Plugin untuk Azure Web Apps, Anda dapat menyiapkan proyek Maven Java untuk Azure Web App dengan mudah dengan satu perintah di akar proyek Anda:
mvn com.microsoft.azure:azure-webapp-maven-plugin:2.11.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 membuat yang baru. Kemudian Anda dapat menyebarkan aplikasi Java Anda ke Azure 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 11</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.7.1" }
Konfigurasikan detail aplikasi web Anda. Sumber daya Azure yang sesuai dibuat jika tidak ada. Berikut adalah contoh konfigurasi, 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 9.0' // or 'Java SE' if you want to run an executable jar javaVersion = 'Java 8' } appSettings { <key> = <value> } auth { type = 'azure_cli' // support azure_cli, oauth2, device_code and service_principal } }
Sebarkan dengan satu perintah.
gradle azureWebAppDeploy
IDE
Azure memberikan pengalaman pengembangan Java App Service yang mulus di IDE Java yang populer, termasuk:
- Kode VS: Java Web Apps dengan Visual Studio Code
- IntelliJ IDEA:Buat aplikasi web Halo Dunia untuk Azure App Service menggunakan IntelliJ
- Eclipse:Buat aplikasi web Halo Dunia untuk Azure App Service menggunakan Eclipse
API Kudu
Java SE
Untuk menyebarkan file .jar ke Java SE, gunakan titik akhir /api/publish/
dari situs Kudu. Untuk informasi selengkapnya tentang API ini, lihat dokumentasi ini.
Catatan
Aplikasi .jar Anda harus diberi nama app.jar
untuk Azure App Service agar mengidentifikasi dan menjalankan aplikasi Anda. Plugin Maven melakukan ini untuk Anda secara otomatis selama penyebaran. Jika tidak ingin mengganti nama JAR menjadi app.jar, Anda dapat mengunggah skrip shell dengan perintah untuk menjalankan aplikasi .jar Anda. Tempel jalur absolut ke skrip ini di kotek teks File Startup di bagian Konfigurasi Portal. Skrip startup tidak berjalan dari direktori ke tempatnya ditempatkan. Oleh karena itu, selalu gunakan jalur absolut untuk mereferensikan file dalam skrip startup Anda (misalnya: java -jar /home/myapp/myapp.jar
).
Tomcat
Untuk menyebarkan file .war ke Tomcat, gunakan titik akhir /api/wardeploy/
untuk MEMPOSTING file arsip Anda. Untuk informasi selengkapnya tentang API ini, lihat dokumentasi ini.
JBoss EAP
Untuk menyebarkan file .war ke JBoss, gunakan titik akhir /api/wardeploy/
untuk MEMPOSTING file arsip Anda. Untuk informasi selengkapnya tentang API ini, lihat dokumentasi ini.
Untuk menyebarkan file .ear, gunakan FTP. Aplikasi .ear Anda disebarkan ke akar konteks yang ditentukan dalam konfigurasi aplikasi Anda. Misalnya, jika akar konteks aplikasi Anda adalah <context-root>myapp</context-root>
, maka Anda dapat menelusuri situs di /myapp
jalur: http://my-app-name.azurewebsites.net/myapp
. 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 menggunakan FTP. Alat FTP dirancang untuk mengunggah skrip startup, dependensi, atau file runtime lainnya. Ini bukan pilihan optimal untuk menyebarkan aplikasi web.
Aplikasi pengelogan dan penelusuran kesalahan
Laporan performa, visualisasi lalu lintas, dan pemeriksaan kesehatan tersedia untuk setiap aplikasi melalui portal Azure. Untuk mengetahui informasi selengkapnya, lihat Ringkasan diagnostik Azure App Service.
Mengalirkan log diagnostik
Untuk mengakses log konsol yang dihasilkan dari dalam kode aplikasi Anda di App Service, aktifkan pembuatan log diagnostik dengan menjalankan perintah berikut di Cloud Shell:
az webapp log config --resource-group <resource-group-name> --name <app-name> --docker-container-logging filesystem --level Verbose
Nilai yang mungkin untuk --level
adalah: Error
, Warning
, Info
, dan Verbose
. Setiap level berikutnya mencakup level sebelumnya. Misalnya: Error
hanya menyertakan pesan kesalahan, dan Verbose
menyertakan semua pesan.
Setelah pembuatan log diagnostik diaktifkan, jalankan perintah berikut untuk melihat aliran log:
az webapp log tail --resource-group <resource-group-name> --name <app-name>
Jika Anda tidak segera melihat log konsol, periksa lagi dalam 30 detik.
Catatan
Anda juga dapat memeriksa file log dari browser di https://<app-name>.scm.azurewebsites.net/api/logs/docker
.
Untuk menghentikan streaming log kapan saja, ketikkan Ctrl
+C
.
Anda dapat mengakses log konsol yang dihasilkan dari dalam kontainer.
Pertama, aktifkan pengelogan kontainer dengan menjalankan 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 pengelogan kontainer diaktifkan, jalankan perintah berikut untuk melihat aliran log:
az webapp log tail --name <app-name> --resource-group <resource-group-name>
Jika Anda tidak segera melihat log konsol, periksa lagi dalam 30 detik.
Untuk menghentikan streaming log kapan saja, tekan Ctrl+C.
Anda juga dapat memeriksa file log di browser di https://<app-name>.scm.azurewebsites.net/api/logs/docker
.
Untuk informasi selengkapnya, lihat Streaming log di Cloud Shell.
Akses konsol SSH
Untuk membuka sesi SSH langsung dengan kontainer Anda, aplikasi Anda harus berjalan.
Tempelkan URL berikut ke browser Anda dan ganti <app-name>
dengan nama aplikasi Anda:
https://<app-name>.scm.azurewebsites.net/webssh/host
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 luar direktori /home disimpan dalam kontainer itu sendiri dan hanya ada saat aplikasi dihidupkan ulang.
Untuk membuka sesi SSH jarak jauh dari komputer lokal Anda, lihat Membuka sesi SSH dari shell jarak jauh.
Alat pemecahan masalah
Gambar Java bawaan didasarkan pada sistem operasi Linux Alpine. Gunakan pengelola paket apk
untuk memasang alat atau perintah pemecahan masalah.
Java Profiler
Semua runtime Java di Azure App Service dilengkapi dengan JDK Flight Recorder untuk membuat profil beban kerja Java. Anda dapat menggunakannya untuk merekam JVM, sistem, dan peristiwa aplikasi dan memecahkan masalah dalam aplikasi Anda.
Untuk mempelajari selengkapnya tentang Java Profiler, kunjungi dokumentasi Azure Application Insights.
Perekam Aktivitas
Semua runtime Java di App Service dilengkapi dengan Java Flight Recorder. Anda dapat menggunakannya untuk merekam JVM, sistem, dan peristiwa aplikasi dan memecahkan masalah di aplikasi Java Anda.
Rekaman dengan Waktu
Untuk mengambil rekaman berwakti, Anda memerlukan PID (ID Proses) aplikasi Java. Untuk menemukan PID, buka browser ke situs SCM aplikasi web Anda di https://<your-site-name>.scm.azurewebsites.net/ProcessExplorer/
. Halaman ini memperlihatkan proses yang sedang berjalan di aplikasi web Anda. Temukan proses bernama “java” dalam tabel dan salin PID (ID Proses) yang sesuai.
Selanjutnya, buka Konsol Debug di bar alat atas situs SCM dan jalankan perintah berikut. Ganti <pid>
dengan ID proses yang Anda salin sebelumnya. Perintah ini memulai rekaman profiler 30 detik dari aplikasi Java Anda dan menghasilkan file bernama timed_recording_example.jfr
di C:\home
direktori.
jcmd <pid> JFR.start name=TimedRecording settings=profile duration=30s filename="C:\home\timed_recording_example.JFR"
SSH ke dalam Azure App Service Anda dan jalankan perintah jcmd
untuk melihat daftar semua proses Java yang berjalan. Selain jcmd sendiri, Anda akan 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 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 dengan nama JAVA_OPTS dengan konfigurasi yang diperlukan. Konten Pengaturan Aplikasi JAVA_OPTS diteruskan ke perintah java
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 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. Untuk menganalisis file JFR, unduh dan instal Java Mission Control. Untuk petunjuk tentang Java Mission Control, lihat dokumentasi JMC dan instruksi penginstalan.
Pengelogan Aplikasi
Aktifkan pengelogan aplikasi melalui portal Azure atau Azure CLI untuk mengonfigurasi Azure App Service untuk menulis output konsol standar aplikasi Anda dan aliran kesalahan konsol standar ke sistem file lokal atau Azure Blob Storage. Pengelogan ke instans sistem file App Service lokal dinonaktifkan 12 jam setelah dikonfigurasi. Jika Anda memerlukan retensi lebih lama, konfigurasikan aplikasi untuk menulis output ke kontainer penyimpanan Objek Besar Biner. Log aplikasi Java dan Tomcat Anda dapat ditemukan di direktori /home/LogFiles/Application/.
Aktifkan pengelogan aplikasi melalui portal Azure atau Azure CLI untuk mengonfigurasi Azure App Service untuk menulis output konsol standar aplikasi Anda dan aliran kesalahan konsol standar ke sistem file lokal atau Azure Blob Storage. Jika Anda memerlukan retensi lebih lama, konfigurasikan aplikasi untuk menulis output ke kontainer penyimpanan Objek Besar Biner. Log aplikasi Java dan Tomcat Anda dapat ditemukan di direktori /home/LogFiles/Application/.
Pengelogan Azure Blob Storage untuk aplikasi berbasis Linux hanya dapat dikonfigurasi menggunakan Azure Monitor.
Jika aplikasi Anda menggunakan Logback atau Log4j untuk menelusuri, Anda dapat meneruskan jejak ini untuk ditinjau ke Azure Application Insights menggunakan instruksi konfigurasi kerangka kerja pengelogan di Jelajahi log jejak Java di Application Insights.
Catatan
Karena kerentanan yang diketahui CVE-2021-44228, pastikan untuk menggunakan Log4j versi 2.16 atau yang lebih baru.
Kustomisasi dan penyetelan
Azure App Service mendukung penyetelan dan kustomisasi kotak melalui portal Microsoft Azure dan CLI. Tinjau artikel berikut untuk konfigurasi aplikasi web non-Java tertentu:
- Mengonfigurasi pengaturan aplikasi
- Menyiapkan domain kustom
- Mengonfigurasi binding TLS/SSL
- Tambah CDN
- Mengonfigurasi situs Kudu
Salin Konten Aplikasi Secara Lokal
Atur pengaturan JAVA_COPY_ALL
aplikasi ke true
untuk menyalin konten aplikasi Anda ke pekerja lokal dari sistem file bersama. Pengaturan ini membantu mengatasi masalah penguncian file.
Mengatur opsi runtime Java
Untuk mengatur memori yang dialokasikan atau opsi runtime JVM lainnya, buat pengaturan aplikasi yang diberi nama JAVA_OPTS
dengan opsi tersebut. Azure App Service melewati pengaturan ini sebagai variabel lingkungan ke runtime Java saat dimulai.
Di portal Microsoft Azure, di bawah Pengaturan Aplikasi untuk aplikasi web, buat pengaturan aplikasi baru dengan nama JAVA_OPTS
untuk Java SE atau CATALINA_OPTS
untuk Tomcat yang mencakup pengaturan tambahan, 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.
Pengembang yang menjalankan satu aplikasi dengan satu slot penyebaran dalam paket Azure App Service mereka dapat menggunakan opsi berikut:
- Instans B1 dan S1:
-Xms1024m -Xmx1024m
- Instans B2 dan S2:
-Xms3072m -Xmx3072m
- Instans B3 dan S3:
-Xms6144m -Xmx6144m
- Instans P1v2:
-Xms3072m -Xmx3072m
- Instans P2v2:
-Xms6144m -Xmx6144m
- Instans P3v2:
-Xms12800m -Xmx12800m
- Instans P1v3:
-Xms6656m -Xmx6656m
- Instans P2v3:
-Xms14848m -Xmx14848m
- Instans P3v3:
-Xms30720m -Xmx30720m
- Instans I1:
-Xms3072m -Xmx3072m
- Instans I2:
-Xms6144m -Xmx6144m
- Instans I3:
-Xms12800m -Xmx12800m
- Instans I1v2:
-Xms6656m -Xmx6656m
- Instans I2v2:
-Xms14848m -Xmx14848m
- Instans I3v2:
-Xms30720m -Xmx30720m
Saat menyetel pengaturan heap aplikasi, tinjau detail paket Azure App Service Anda dan perhitungkan beberapa aplikasi dan slot penyebaran perlu menemukan alokasi memori yang optimal.
Mengaktifkan soket web
Aktifkan dukungan untuk soket web di portal Azure di Pengaturan aplikasi untuk aplikasi. Anda perlu menghidupkan ulang aplikasi agar pengaturan diterapkan.
Aktifkan dukungan soket web 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>
Mengatur pengodean karakter default
Di portal Azure, di bawah Pengaturan Aplikasi untuk aplikasi web, buat pengaturan aplikasi baru yang diberi nama JAVA_OPTS
dengan nilai -Dfile.encoding=UTF-8
.
Atau, Anda dapat mengonfigurasi pengaturan aplikasi menggunakan plugin Maven Azure App Service. 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 Sebelum Kompilasi
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 bangun Ant ini.
Aplikasi yang aman
Aplikasi Java yang berjalan di Azure App Service memiliki serangkaian praktik terbaik keamanan yang sama dengan aplikasi lainnya.
Mengautentikasi pengguna (Easy Auth)
Siapkan autentikasi aplikasi di portal Azure dengan opsi Autentikasi dan Otorisasi. Dari sana, Anda dapat mengaktifkan autentikasi menggunakan ID Microsoft Entra atau rincian masuk sosial seperti Facebook, Google, atau GitHub. Konfigurasi portal Azure hanya berfungsi saat mengonfigurasi penyedia autentikasi tunggal. Untuk informasi selengkapnya, lihat Mengonfigurasi aplikasi App Service Anda untuk menggunakan masuk Microsoft Entra dan artikel terkait untuk penyedia identitas lainnya. Jika Anda perlu mengaktifkan beberapa penyedia masuk, ikuti instruksi di Menyesuaikan rincian masuk dan keluar.
Java SE
Pengembang Spring Boot dapat menggunakan pemula Microsoft Entra Spring Boot untuk mengamankan aplikasi menggunakan anotasi dan API Spring Security yang sudah dikenal. Pastikan untuk menambah ukuran header maksimum dalam file application.properties Anda. Kami menyarankan nilai 16384
.
Tomcat
Aplikasi Tomcat Anda dapat mengakses klaim pengguna langsung dari servlet dengan mentransmisikan objek Utama ke objek Peta. Objek Map
memetakan setiap jenis klaim ke kumpulan klaim untuk jenis tersebut. Dalam contoh kode berikut, request
adalah instans .HttpServletRequest
Map<String, Collection<String>> map = (Map<String, Collection<String>>) request.getUserPrincipal();
Sekarang, Anda dapat memeriksa objek Map
untuk klaim tertentu. Misalnya, cuplikan kode berikut berulang melalui semua jenis klaim dan mencetak konten setiap kumpulan.
for (Object key : map.keySet()) {
Object value = map.get(key);
if (value != null && value instanceof Collection {
Collection claims = (Collection) value;
for (Object claim : claims) {
System.out.println(claims);
}
}
}
Untuk mengeluarkan pengguna, gunakan jalur /.auth/ext/logout
. Untuk melakukan tindakan lain, lihat dokumentasi tentang Kustomisasi masuk dan keluar. Ada juga dokumentasi resmi tentang antarmuka Tomcat HttpServletRequest dan metodenya. Metode servlet berikut juga dihidrasi berdasarkan konfigurasi Azure App Service Anda:
public boolean isSecure()
public String getRemoteAddr()
public String getRemoteHost()
public String getScheme()
public int getServerPort()
Untuk menonaktifkan fitur ini, buat Pengaturan Aplikasi yang diberi nama WEBSITE_AUTH_SKIP_PRINCIPAL
dengan nilai 1
. Untuk menonaktifkan semua filter servlet yang ditambahkan oleh Azure App Service, buat pengaturan yang diberi nama WEBSITE_SKIP_FILTERS
dengan nilai 1
.
Mengonfigurasi TLS/SSL
Untuk mengunggah sertifikat TLS/SSL yang ada dan mengikatnya ke nama domain aplikasi Anda, ikuti instruksi di Mengamankan nama DNS kustom dengan pengikatan TLS/SSL di Azure App Service. Anda juga dapat mengonfigurasi aplikasi untuk memberlakukan TLS/SSL.
Gunakan Referensi KeyVault
Azure KeyVault menyediakan manajemen rahasia terpusat dengan kebijakan akses dan riwayat audit. Anda dapat menyimpan rahasia (seperti kata sandi atau string koneksi) di KeyVault dan mengakses rahasia ini di aplikasi Anda melalui variabel lingkungan.
Pertama, ikuti instruksi untuk memberikan akses aplikasi Anda ke brankas kunci dan membuat referensi KeyVault ke rahasia Anda di Pengaturan Aplikasi. Anda dapat memvalidasi bahwa referensi menyelesaikan rahasia dengan mencetak variabel lingkungan saat mengakses terminal Azure App Service dari jarak jauh.
Untuk menyuntikkan rahasia ini dalam file konfigurasi Spring atau Tomcat Anda, gunakan sintaks injeksi variabel lingkungan (${MY_ENV_VAR}
). Untuk file konfigurasi Spring, lihat dokumentasi ini tentang konfigurasi eksternal.
Menggunakan Java Key Store
Secara default, sertifikat publik atau privat apa pun yang diunggah ke App Service Linux dimuat ke dalam Java Key Store masing-masing saat kontainer dimulai. Setelah mengunggah sertifikat, Anda harus memulai ulang App Service agar dimuat ke Java Key Store. Sertifikat publik dimuat ke dalam Penyimpanan Kunci di $JRE_HOME/lib/security/cacerts
, dan sertifikat privat disimpan di $JRE_HOME/lib/security/client.jks
.
Konfigurasi lainnya mungkin diperlukan untuk mengenkripsi koneksi JDBC Anda dengan sertifikat di Java Key Store. Lihat dokumentasi untuk driver JDBC pilihan Anda.
Menginisialisasi Penyimpanan Kunci Java
Untuk menginisialisasi objek import java.security.KeyStore
, muat file keystore dengan kata sandi. Kata sandi default untuk kedua penyimpanan kunci adalah changeit
.
KeyStore keyStore = KeyStore.getInstance("jks");
keyStore.load(
new FileInputStream(System.getenv("JRE_HOME")+"/lib/security/cacerts"),
"changeit".toCharArray());
KeyStore keyStore = KeyStore.getInstance("pkcs12");
keyStore.load(
new FileInputStream(System.getenv("JRE_HOME")+"/lib/security/client.jks"),
"changeit".toCharArray());
Memuat penyimpanan kunci secara manual
Anda dapat memuat sertifikat secara manual ke penyimpanan kunci. Buat pengaturan aplikasi, SKIP_JAVA_KEYSTORE_LOAD
, dengan nilai 1
untuk menonaktifkan Azure App Service agar tidak memuat sertifikat ke penyimpanan kunci secara otomatis. Semua sertifikat publik yang diunggah ke Azure App Service melalui portal Azure disimpan di bawah /var/ssl/certs/
. Sertifikat privat disimpan di bawah /var/ssl/private/
.
Anda dapat berinteraksi atau melakukan debug Alat Kunci Java dengan membuka koneksi SSH ke Azure App Service Anda dan menjalankan perintah keytool
. Lihat dokumentasi Alat Kunci untuk daftar perintah. Untuk informasi selengkapnya tentang KeyStore API, lihat dokumentasi resmi.
Mengonfigurasi platform APM
Bagian ini menunjukkan cara menghubungkan aplikasi Java yang disebarkan di Azure App Service dengan platform Azure Monitor Application Insights, NewRelic, dan AppDynamics application performance monitoring (APM).
Mengonfigurasi Application Insights
Azure Monitor Application Insights adalah layanan pemantauan aplikasi asli cloud yang memungkinkan pelanggan mengamati kegagalan, penyempitan, dan pola penggunaan untuk meningkatkan performa aplikasi dan mengurangi waktu rata-rata untuk resolusi (MTTR). Dengan beberapa klik atau perintah CLI, Anda dapat mengaktifkan pemantauan untuk aplikasi Node.js atau Java, mengotomatiskan log, metrik, dan jejak terdistribusi, menghilangkan kebutuhan untuk menyertakan SDK di aplikasi Anda. Untuk informasi selengkapnya tentang pengaturan aplikasi yang tersedia untuk mengonfigurasi agen, lihat dokumentasi Application Insights.
Portal Azure
Untuk mengaktifkan Application Insights dari portal Microsoft Azure, buka Application Insights di menu sebelah kiri dan pilih Aktifkan Application Insights. Secara default, sumber daya wawasan aplikasi baru dengan nama yang sama dengan aplikasi web Anda digunakan. Anda dapat memilih untuk menggunakan sumber daya insight aplikasi yang ada, atau mengubah nama. Pilih Terapkan di bagian bawah.
Azure CLI
Untuk mengaktifkan melalui Azure CLI, Anda perlu membuat sumber daya Application Insights dan mengatur beberapa pengaturan aplikasi di portal Azure untuk menyambungkan Application Insights ke aplikasi web Anda.
Mengaktifkan ekstensi Application Insights
az extension add -n application-insights
Buat sumber daya Application Insights menggunakan perintah CLI berikut. Ganti tempat penampung dengan nama dan grup sumber daya yang Anda inginkan.
az monitor app-insights component create --app <resource-name> -g <resource-group> --location westus2 --kind web --application-type web
Perhatikan nilai untuk
connectionString
daninstrumentationKey
, Anda akan memerlukan nilai-nilai ini di langkah berikutnya.Untuk mengambil daftar lokasi lain, jalankan
az account list-locations
.
Atur kunci instrumentasi, string koneksi, dan versi agen pemantauan sebagai pengaturan aplikasi di aplikasi web. Ganti
<instrumentationKey>
dan<connectionString>
dengan nilai dari langkah sebelumnya.az webapp config appsettings set -n <webapp-name> -g <resource-group> --settings "APPINSIGHTS_INSTRUMENTATIONKEY=<instrumentationKey>" "APPLICATIONINSIGHTS_CONNECTION_STRING=<connectionString>" "ApplicationInsightsAgent_EXTENSION_VERSION=~3" "XDT_MicrosoftApplicationInsights_Mode=default" "XDT_MicrosoftApplicationInsights_Java=1"
Atur kunci instrumentasi, string koneksi, dan versi agen pemantauan sebagai pengaturan aplikasi di aplikasi web. Ganti
<instrumentationKey>
dan<connectionString>
dengan nilai dari langkah sebelumnya.az webapp config appsettings set -n <webapp-name> -g <resource-group> --settings "APPINSIGHTS_INSTRUMENTATIONKEY=<instrumentationKey>" "APPLICATIONINSIGHTS_CONNECTION_STRING=<connectionString>" "ApplicationInsightsAgent_EXTENSION_VERSION=~3" "XDT_MicrosoftApplicationInsights_Mode=default"
Mengonfigurasi New Relic
Membuat akun NewRelic di NewRelic.com
Unduh agen Java dari NewRelic. Ini memiliki nama file yang mirip dengan newrelic-java-x.x.x.zip.
Salin kunci lisensi Anda, Anda memerlukannya untuk mengonfigurasi agen nanti.
SSH ke dalam instans Azure App Service Anda dan buat direktori baru /home/site/wwwroot/apm.
Unggah file agen NewRelic Java yang belum dikemas ke direktori di bawah /home/site/wwwroot/apm. File untuk agen Anda harus di /home/site/wwwroot/apm/newrelic.
Ubah file YAML di /home/site/wwwroot/apm/newrelic/newrelic.yml dan ganti nilai lisensi tempat penampung dengan kunci lisensi Anda sendiri.
Di portal Azure, telusuri aplikasi Anda di Azure App Service dan buat Pengaturan Aplikasi baru.
- Untuk aplikasi Java SE, buat variabel lingkungan yang diberi nama
JAVA_OPTS
dengan nilai-javaagent:/home/site/wwwroot/apm/newrelic/newrelic.jar
. - Untuk Tomcat, buat variabel lingkungan yang diberi nama
CATALINA_OPTS
dengan nilai-javaagent:/home/site/wwwroot/apm/newrelic/newrelic.jar
.
- Untuk aplikasi Java SE, buat variabel lingkungan yang diberi nama
Membuat akun NewRelic di NewRelic.com
Unduh agen Java dari NewRelic. Ini memiliki nama file yang mirip dengan newrelic-java-x.x.x.zip.
Salin kunci lisensi Anda, Anda akan memerlukannya untuk mengonfigurasi agen nanti.
SSH ke dalam instans Azure App Service Anda dan buat direktori baru /home/site/wwwroot/apm.
Unggah file agen NewRelic Java yang belum dikemas ke direktori di bawah /home/site/wwwroot/apm. File untuk agen Anda harus di /home/site/wwwroot/apm/newrelic.
Ubah file YAML di /home/site/wwwroot/apm/newrelic/newrelic.yml dan ganti nilai lisensi tempat penampung dengan kunci lisensi Anda sendiri.
Di portal Azure, telusuri aplikasi Anda di Azure App Service dan buat Pengaturan Aplikasi baru.
- Untuk aplikasi Java SE, buat variabel lingkungan yang diberi nama
JAVA_OPTS
dengan nilai-javaagent:/home/site/wwwroot/apm/newrelic/newrelic.jar
. - Untuk Tomcat, buat variabel lingkungan yang diberi nama
CATALINA_OPTS
dengan nilai-javaagent:/home/site/wwwroot/apm/newrelic/newrelic.jar
.
- Untuk aplikasi Java SE, buat variabel lingkungan yang diberi nama
Jika Anda sudah memiliki variabel lingkungan untuk
JAVA_OPTS
atauCATALINA_OPTS
, tambahkan opsi-javaagent:/...
ke akhir nilai saat ini.
Mengonfigurasi AppDynamics
Membuat akun AppDynamics di AppDynamics.com
Unduh agen Java dari situs web AppDynamics. Nama file mirip dengan AppServerAgent-x.x.x.xxxxx.zip
Gunakan konsol Kudu untuk membuat direktori baru /home/site/wwwroot/apm.
Unggah file agen Java ke direktori di bawah /home/site/wwwroot/apm. File untuk agen Anda harus berada di /home/site/wwwroot/apm/appdynamics.
Di portal Azure, telusuri aplikasi Anda di Azure App Service dan buat Pengaturan Aplikasi baru.
- Untuk aplikasi Java SE, buat variabel lingkungan yang diberi nama
JAVA_OPTS
dengan nilai-javaagent:/home/site/wwwroot/apm/appdynamics/javaagent.jar -Dappdynamics.agent.applicationName=<app-name>
di mana<app-name>
adalah nama Azure App Service Anda. - Untuk aplikasi Tomcat, buat variabel lingkungan yang diberi nama
CATALINA_OPTS
dengan nilai-javaagent:/home/site/wwwroot/apm/appdynamics/javaagent.jar -Dappdynamics.agent.applicationName=<app-name>
di mana<app-name>
adalah nama Azure App Service Anda.
- Untuk aplikasi Java SE, buat variabel lingkungan yang diberi nama
Membuat akun AppDynamics di AppDynamics.com
Unduh agen Java dari situs web AppDynamics. Nama file mirip dengan AppServerAgent-x.x.x.xxxxx.zip
SSH ke dalam instans Azure App Service Anda dan buat direktori baru /home/site/wwwroot/apm.
Unggah file agen Java ke direktori di bawah /home/site/wwwroot/apm. File untuk agen Anda harus berada di /home/site/wwwroot/apm/appdynamics.
Di portal Azure, telusuri aplikasi Anda di Azure App Service dan buat Pengaturan Aplikasi baru.
- Untuk aplikasi Java SE, buat variabel lingkungan yang diberi nama
JAVA_OPTS
dengan nilai-javaagent:/home/site/wwwroot/apm/appdynamics/javaagent.jar -Dappdynamics.agent.applicationName=<app-name>
di mana<app-name>
adalah nama Azure App Service Anda. - Untuk aplikasi Tomcat, buat variabel lingkungan yang diberi nama
CATALINA_OPTS
dengan nilai-javaagent:/home/site/wwwroot/apm/appdynamics/javaagent.jar -Dappdynamics.agent.applicationName=<app-name>
di mana<app-name>
adalah nama Azure App Service Anda.
- Untuk aplikasi Java SE, buat variabel lingkungan yang diberi nama
Catatan
Jika Anda sudah memiliki variabel lingkungan untuk JAVA_OPTS
atau CATALINA_OPTS
, tambahkan opsi -javaagent:/...
ke akhir nilai saat ini.
Mengonfigurasi sumber data
Java SE
Untuk terhubung ke sumber data di aplikasi Spring Boot, kami menyarankan untuk membuat string koneksi dan menyuntikkannya ke file application.properties Anda.
Di bagian “Konfigurasi” di halaman Azure App Service, atur nama untuk string, tempel string koneksi JDBC Anda ke bidang nilai, dan atur jenisnya ke “Kustom”. Anda dapat secara opsional mengatur string koneksi ini sebagai pengaturan slot.
String koneksi ini dapat diakses oleh aplikasi kami sebagai variabel lingkungan yang diberi nama
CUSTOMCONNSTR_<your-string-name>
. Contohnya,CUSTOMCONNSTR_exampledb
.Dalam file application.properties Anda, referensi string koneksi ini dengan nama variabel lingkungan. Misalnya, kami akan menggunakan berikut.
app.datasource.url=${CUSTOMCONNSTR_exampledb}
Untuk informasi selengkapnya, lihat dokumentasi Spring Boot tentang akses data dan konfigurasi eksternal.
Tomcat
Instruksi ini berlaku untuk semua koneksi database. Anda perlu mengisi tempat penampung dengan nama kelas driver database dan file JAR yang Anda pilih. Disediakan tabel dengan nama kelas dan unduhan driver untuk database umum.
Database | Nama Kelas Driver | JDBC Driver |
---|---|---|
PostgreSQL | org.postgresql.Driver |
Unduh |
MySQL | com.mysql.jdbc.Driver |
Unduh (Pilih “Platform Independen”) |
SQL Server | com.microsoft.sqlserver.jdbc.SQLServerDriver |
Unduh |
Untuk mengonfigurasi Tomcat menggunakan Java Database Connectivity (JDBC) atau Java Persistence API (JPA), pertama, kustomisasi variabel lingkungan CATALINA_OPTS
yang dibaca oleh Tomcat saat dalam keadaan start-up. Tetapkan nilai-nilai ini melalui pengaturan aplikasi di plugin Maven Azure App Service:
<appSettings>
<property>
<name>CATALINA_OPTS</name>
<value>"$CATALINA_OPTS -Ddbuser=${DBUSER} -Ddbpassword=${DBPASSWORD} -DconnURL=${CONNURL}"</value>
</property>
</appSettings>
Atau atur variabel lingkungan di halaman Pengaturan Aplikasi>Konfigurasi di portal Azure.
Selanjutnya, tentukan apakah sumber data harus tersedia untuk satu aplikasi atau untuk semua aplikasi yang berjalan pada servlet Tomcat.
Sumber data tingkat aplikasi
Buat file context.xml di direktori META-INF/ proyek Anda. Buat direktori META-INF/ jika tidak ada.
Di context.xml, tambahkan elemen
Context
untuk menautkan sumber data ke alamat JNDI. Ganti tempat penampungdriverClassName
dengan nama kelas driver Anda dari tabel di atas.<Context> <Resource name="jdbc/dbconnection" type="javax.sql.DataSource" url="${connURL}" driverClassName="<insert your driver class name>" username="${dbuser}" password="${dbpassword}" /> </Context>
Perbarui aplikasi web.xml untuk menggunakan sumber data di aplikasi Anda.
<resource-env-ref> <resource-env-ref-name>jdbc/dbconnection</resource-env-ref-name> <resource-env-ref-type>javax.sql.DataSource</resource-env-ref-type> </resource-env-ref>
Sumber daya tingkat server bersama
Instalasi Tomcat di Azure App Service di Windows ada di ruang bersama pada Paket Azure App Service. Anda tidak dapat secara langsung memodifikasi penginstalan Tomcat untuk konfigurasi di seluruh server. Untuk membuat perubahan konfigurasi tingkat server pada instalasi Tomcat, Anda harus menyalin Tomcat ke folder lokal, di mana Anda dapat memodifikasi konfigurasi Tomcat.
Mengautomasi pembuatan Tomcat kustom pada saat mulai aplikasi
Anda dapat menggunakan skrip startup untuk melakukan tindakan sebelum aplikasi web dimulai. Skrip startup untuk mengustomisasi Tomcat perlu menyelesaikan langkah-langkah berikut:
- Periksa apakah Tomcat sudah disalin dan dikonfigurasi secara lokal. Jika sudah, skrip startup bisa berakhir di sini.
- Salin Tomcat secara lokal.
- Membuat perubahan konfigurasi yang diperlukan.
- Menunjukkan bahwa konfigurasi berhasil diselesaikan.
Untuk aplikasi Windows, buat file bernama startup.cmd
atau startup.ps1
di wwwroot
direktori. File ini berjalan secara otomatis sebelum server Tomcat dimulai.
Berikut adalah skrip PowerShell yang menyelesaikan langkah-langkah ini:
# Check for marker file indicating that config has already been done
if(Test-Path "$Env:LOCAL_EXPANDED\tomcat\config_done_marker"){
return 0
}
# Delete previous Tomcat directory if it exists
# In case previous config isn't completed or a new config should be forcefully installed
if(Test-Path "$Env:LOCAL_EXPANDED\tomcat"){
Remove-Item "$Env:LOCAL_EXPANDED\tomcat" --recurse
}
# Copy Tomcat to local
# Using the environment variable $AZURE_TOMCAT90_HOME uses the 'default' version of Tomcat
Copy-Item -Path "$Env:AZURE_TOMCAT90_HOME\*" -Destination "$Env:LOCAL_EXPANDED\tomcat" -Recurse
# Perform the required customization of Tomcat
{... customization ...}
# Mark that the operation was a success
New-Item -Path "$Env:LOCAL_EXPANDED\tomcat\config_done_marker" -ItemType File
Transformasi
Kasus penggunaan umum untuk mengustomisasi versi Tomcat adalah memodifikasi file konfigurasi Tomcat server.xml
, context.xml
, atau web.xml
. Azure App Service telah memodifikasi file-file ini untuk menyediakan fitur platform. Untuk terus menggunakan fitur-fitur ini, penting untuk mempertahankan konten file-file ini ketika Anda membuat perubahan. Untuk mencapai hal ini, kami sarankan Anda menggunakan transformasi XSL (XSLT). Gunakan transformasi XSL untuk membuat perubahan pada file XML sambil mempertahankan konten asli file.
Contoh file XSLT
Transformasi contoh ini menambahkan simpul konektor baru ke server.xml
. Perhatikan Transformasi Identitas, yang mempertahankan konten asli file.
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<!-- Identity transform: this ensures that the original contents of the file are included in the new file -->
<!-- Ensure that your transform files include this block -->
<xsl:template match="@* | node()" name="Copy">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="@* | node()" mode="insertConnector">
<xsl:call-template name="Copy" />
</xsl:template>
<xsl:template match="comment()[not(../Connector[@scheme = 'https']) and
contains(., '<Connector') and
(contains(., 'scheme="https"') or
contains(., "scheme='https'"))]">
<xsl:value-of select="." disable-output-escaping="yes" />
</xsl:template>
<xsl:template match="Service[not(Connector[@scheme = 'https'] or
comment()[contains(., '<Connector') and
(contains(., 'scheme="https"') or
contains(., "scheme='https'"))]
)]
">
<xsl:copy>
<xsl:apply-templates select="@* | node()" mode="insertConnector" />
</xsl:copy>
</xsl:template>
<!-- Add the new connector after the last existing Connnector if there's one -->
<xsl:template match="Connector[last()]" mode="insertConnector">
<xsl:call-template name="Copy" />
<xsl:call-template name="AddConnector" />
</xsl:template>
<!-- ... or before the first Engine if there's no existing Connector -->
<xsl:template match="Engine[1][not(preceding-sibling::Connector)]"
mode="insertConnector">
<xsl:call-template name="AddConnector" />
<xsl:call-template name="Copy" />
</xsl:template>
<xsl:template name="AddConnector">
<!-- Add new line -->
<xsl:text>
</xsl:text>
<!-- This is the new connector -->
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
keystoreFile="${{user.home}}/.keystore" keystorePass="changeit"
clientAuth="false" sslProtocol="TLS" />
</xsl:template>
</xsl:stylesheet>
Fungsi untuk transformasi XSL
PowerShell memiliki alat bawaan untuk mengubah file XML dengan menggunakan transformasi XSL. Skrip berikut adalah fungsi contoh yang bisa Anda gunakan dalam startup.ps1
untuk melakukan transformasi:
function TransformXML{
param ($xml, $xsl, $output)
if (-not $xml -or -not $xsl -or -not $output)
{
return 0
}
Try
{
$xslt_settings = New-Object System.Xml.Xsl.XsltSettings;
$XmlUrlResolver = New-Object System.Xml.XmlUrlResolver;
$xslt_settings.EnableScript = 1;
$xslt = New-Object System.Xml.Xsl.XslCompiledTransform;
$xslt.Load($xsl,$xslt_settings,$XmlUrlResolver);
$xslt.Transform($xml, $output);
}
Catch
{
$ErrorMessage = $_.Exception.Message
$FailedItem = $_.Exception.ItemName
Write-Host 'Error'$ErrorMessage':'$FailedItem':' $_.Exception;
return 0
}
return 1
}
Pengaturan aplikasi
Platform ini juga perlu mengetahui di mana versi kustom Tomcat Anda telah dipasang. Anda dapat mengatur lokasi instalasi di pengaturan aplikasi CATALINA_BASE
.
Anda bisa menggunakan Azure CLI untuk mengubah pengaturan ini:
az webapp config appsettings set -g $MyResourceGroup -n $MyUniqueApp --settings CATALINA_BASE="%LOCAL_EXPANDED%\tomcat"
Atau, Anda dapat mengubah pengaturan secara manual di portal Azure:
- Buka Pengaturan>Konfigurasi>Pengaturan aplikasi.
- Pilih Pengaturan Aplikasi Baru.
- Gunakan nilai-nilai ini untuk membuat pengaturan:
- Nama:
CATALINA_BASE
- Nilai:
"%LOCAL_EXPANDED%\tomcat"
- Nama:
Contoh startup.ps1
Contoh skrip berikut menyalin Tomcat kustom ke folder lokal, melakukan transformasi XSL, dan menunjukkan bahwa transformasi berhasil:
# Locations of xml and xsl files
$target_xml="$Env:LOCAL_EXPANDED\tomcat\conf\server.xml"
$target_xsl="$Env:HOME\site\server.xsl"
# Define the transform function
# Useful if transforming multiple files
function TransformXML{
param ($xml, $xsl, $output)
if (-not $xml -or -not $xsl -or -not $output)
{
return 0
}
Try
{
$xslt_settings = New-Object System.Xml.Xsl.XsltSettings;
$XmlUrlResolver = New-Object System.Xml.XmlUrlResolver;
$xslt_settings.EnableScript = 1;
$xslt = New-Object System.Xml.Xsl.XslCompiledTransform;
$xslt.Load($xsl,$xslt_settings,$XmlUrlResolver);
$xslt.Transform($xml, $output);
}
Catch
{
$ErrorMessage = $_.Exception.Message
$FailedItem = $_.Exception.ItemName
echo 'Error'$ErrorMessage':'$FailedItem':' $_.Exception;
return 0
}
return 1
}
$success = TransformXML -xml $target_xml -xsl $target_xsl -output $target_xml
# Check for marker file indicating that config has already been done
if(Test-Path "$Env:LOCAL_EXPANDED\tomcat\config_done_marker"){
return 0
}
# Delete previous Tomcat directory if it exists
# In case previous config isn't completed or a new config should be forcefully installed
if(Test-Path "$Env:LOCAL_EXPANDED\tomcat"){
Remove-Item "$Env:LOCAL_EXPANDED\tomcat" --recurse
}
md -Path "$Env:LOCAL_EXPANDED\tomcat"
# Copy Tomcat to local
# Using the environment variable $AZURE_TOMCAT90_HOME uses the 'default' version of Tomcat
Copy-Item -Path "$Env:AZURE_TOMCAT90_HOME\*" "$Env:LOCAL_EXPANDED\tomcat" -Recurse
# Perform the required customization of Tomcat
$success = TransformXML -xml $target_xml -xsl $target_xsl -output $target_xml
# Mark that the operation was a success if successful
if($success){
New-Item -Path "$Env:LOCAL_EXPANDED\tomcat\config_done_marker" -ItemType File
}
Menyelesaikan konfigurasi
Terakhir, Anda menempatkan driver JAR di classpath Tomcat dan memulai ulang App Service Anda. Pastikan bahwa file driver JDBC tersedia untuk classloader Tomcat dengan menempatkannya di direktori /home/site/lib . Di Cloud Shell, jalankan az webapp deploy --type=lib
untuk setiap JAR driver:
az webapp deploy --resource-group <group-name> --name <app-name> --src-path <jar-name>.jar --type=lib --target-path <jar-name>.jar
Tomcat
Instruksi ini berlaku untuk semua koneksi database. Anda perlu mengisi tempat penampung dengan nama kelas driver database dan file JAR yang Anda pilih. Disediakan tabel dengan nama kelas dan unduhan driver untuk database umum.
Database | Nama Kelas Driver | JDBC Driver |
---|---|---|
PostgreSQL | org.postgresql.Driver |
Unduh |
MySQL | com.mysql.jdbc.Driver |
Unduh (Pilih “Platform Independen”) |
SQL Server | com.microsoft.sqlserver.jdbc.SQLServerDriver |
Unduh |
Untuk mengonfigurasi Tomcat menggunakan Java Database Connectivity (JDBC) atau Java Persistence API (JPA), pertama, kustomisasi variabel lingkungan CATALINA_OPTS
yang dibaca oleh Tomcat saat dalam keadaan start-up. Tetapkan nilai-nilai ini melalui pengaturan aplikasi di plugin Maven Azure App Service:
<appSettings>
<property>
<name>CATALINA_OPTS</name>
<value>"$CATALINA_OPTS -Ddbuser=${DBUSER} -Ddbpassword=${DBPASSWORD} -DconnURL=${CONNURL}"</value>
</property>
</appSettings>
Atau atur variabel lingkungan di halaman Pengaturan Aplikasi>Konfigurasi di portal Azure.
Selanjutnya, tentukan apakah sumber data harus tersedia untuk satu aplikasi atau untuk semua aplikasi yang berjalan pada servlet Tomcat.
Sumber data tingkat aplikasi
Buat file context.xml di direktori META-INF/ proyek Anda. Buat direktori META-INF/ jika tidak ada.
Di context.xml, tambahkan elemen
Context
untuk menautkan sumber data ke alamat JNDI. Ganti tempat penampungdriverClassName
dengan nama kelas driver Anda dari tabel di atas.<Context> <Resource name="jdbc/dbconnection" type="javax.sql.DataSource" url="${connURL}" driverClassName="<insert your driver class name>" username="${dbuser}" password="${dbpassword}" /> </Context>
Perbarui aplikasi web.xml untuk menggunakan sumber data di aplikasi Anda.
<resource-env-ref> <resource-env-ref-name>jdbc/dbconnection</resource-env-ref-name> <resource-env-ref-type>javax.sql.DataSource</resource-env-ref-type> </resource-env-ref>
Sumber daya tingkat server bersama
Menambahkan sumber data tingkat server bersama mengharuskan Anda mengedit server.xml Tomcat. Pertama, unggah skrip startup dan atur jalur ke skrip di Perintah Startup>Konfigurasi. Anda dapat mengunggah skrip startup menggunakan FTP.
Skrip startup Anda akan membuat transformasi xsl ke file server.xml dan menghasilkan file xml yang dihasilkan ke /usr/local/tomcat/conf/server.xml
. Skrip startup harus memasang libxslt melalui apk. File xsl dan skrip startup Anda dapat diunggah melalui FTP. Di bawah adalah contoh skrip startup.
# Install libxslt. Also copy the transform file to /home/tomcat/conf/
apk add --update libxslt
# Usage: xsltproc --output output.xml style.xsl input.xml
xsltproc --output /home/tomcat/conf/server.xml /home/tomcat/conf/transform.xsl /usr/local/tomcat/conf/server.xml
Contoh file XSL berikut menambahkan simpul konektor baru ke server.xml Tomcat.
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="@* | node()" name="Copy">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="@* | node()" mode="insertConnector">
<xsl:call-template name="Copy" />
</xsl:template>
<xsl:template match="comment()[not(../Connector[@scheme = 'https']) and
contains(., '<Connector') and
(contains(., 'scheme="https"') or
contains(., "scheme='https'"))]">
<xsl:value-of select="." disable-output-escaping="yes" />
</xsl:template>
<xsl:template match="Service[not(Connector[@scheme = 'https'] or
comment()[contains(., '<Connector') and
(contains(., 'scheme="https"') or
contains(., "scheme='https'"))]
)]
">
<xsl:copy>
<xsl:apply-templates select="@* | node()" mode="insertConnector" />
</xsl:copy>
</xsl:template>
<!-- Add the new connector after the last existing Connnector if there's one -->
<xsl:template match="Connector[last()]" mode="insertConnector">
<xsl:call-template name="Copy" />
<xsl:call-template name="AddConnector" />
</xsl:template>
<!-- ... or before the first Engine if there's no existing Connector -->
<xsl:template match="Engine[1][not(preceding-sibling::Connector)]"
mode="insertConnector">
<xsl:call-template name="AddConnector" />
<xsl:call-template name="Copy" />
</xsl:template>
<xsl:template name="AddConnector">
<!-- Add new line -->
<xsl:text>
</xsl:text>
<!-- This is the new connector -->
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
keystoreFile="${{user.home}}/.keystore" keystorePass="changeit"
clientAuth="false" sslProtocol="TLS" />
</xsl:template>
</xsl:stylesheet>
Menyelesaikan konfigurasi
Akhirnya, kami akan menempatkan driver JAR di classpath Tomcat dan menghidupkan ulang Azure App Service Anda.
- Pastikan bahwa file driver JDBC tersedia untuk classloader Tomcat dengan menempatkannya di direktori /home/site/lib . Di Cloud Shell, jalankan
az webapp deploy --type=lib
untuk setiap JAR driver:
az webapp deploy --resource-group <group-name> --name <app-name> --src-path <jar-name>.jar --type=lib --path <jar-name>.jar
Jika Anda membuat sumber data tingkat server, hidupkan ulang aplikasi Azure App Service Linux. Tomcat akan mengatur ulang CATALINA_BASE
ke /home/tomcat
dan menggunakan konfigurasi yang diperbarui.
Sumber Data JBoss EAP
Ada tiga langkah inti saat mendaftarkan sumber data dengan JBoss EAP: mengunggah driver JDBC, menambah driver JDBC sebagai modul, dan mendaftarkan modul. Azure App Service adalah layanan hosting tanpa status, sehingga perintah konfigurasi untuk menambahkan dan mendaftarkan modul sumber data harus ditulis dan diterapkan saat kontainer dimulai.
Dapatkan driver JDBC database Anda.
Buat file definisi modul XML untuk driver JDBC. Contoh berikut menunjukkan definisi modul untuk PostgreSQL.
<?xml version="1.0" ?> <module xmlns="urn:jboss:module:1.1" name="org.postgres"> <resources> <!-- ***** IMPORTANT : REPLACE THIS PLACEHOLDER *******--> <resource-root path="/home/site/deployments/tools/postgresql-42.2.12.jar" /> </resources> <dependencies> <module name="javax.api"/> <module name="javax.transaction.api"/> </dependencies> </module>
Masukkan perintah JBoss CLI Anda ke dalam file yang diberi nama
jboss-cli-commands.cli
. Perintah JBoss harus menambah modul dan mendaftarkannya sebagai sumber data. Contoh berikut menunjukkan perintah JBoss CLI untuk PostgreSQL.#!/usr/bin/env bash module add --name=org.postgres --resources=/home/site/deployments/tools/postgresql-42.2.12.jar --module-xml=/home/site/deployments/tools/postgres-module.xml /subsystem=datasources/jdbc-driver=postgres:add(driver-name="postgres",driver-module-name="org.postgres",driver-class-name=org.postgresql.Driver,driver-xa-datasource-class-name=org.postgresql.xa.PGXADataSource) data-source add --name=postgresDS --driver-name=postgres --jndi-name=java:jboss/datasources/postgresDS --connection-url=${POSTGRES_CONNECTION_URL,env.POSTGRES_CONNECTION_URL:jdbc:postgresql://db:5432/postgres} --user-name=${POSTGRES_SERVER_ADMIN_FULL_NAME,env.POSTGRES_SERVER_ADMIN_FULL_NAME:postgres} --password=${POSTGRES_SERVER_ADMIN_PASSWORD,env.POSTGRES_SERVER_ADMIN_PASSWORD:example} --use-ccm=true --max-pool-size=5 --blocking-timeout-wait-millis=5000 --enabled=true --driver-class=org.postgresql.Driver --exception-sorter-class-name=org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLExceptionSorter --jta=true --use-java-context=true --valid-connection-checker-class-name=org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLValidConnectionChecker
Buat skrip startup,
startup_script.sh
yang memanggil perintah CLI JBoss. Contoh berikut menunjukkan cara memanggil Andajboss-cli-commands.cli
. Nantinya, Anda akan mengonfigurasi App Service untuk menjalankan skrip ini saat kontainer dimulai.$JBOSS_HOME/bin/jboss-cli.sh --connect --file=/home/site/deployments/tools/jboss-cli-commands.cli
Menggunakan klien FTP pilihan Anda, unggah driver JDBC Anda,
jboss-cli-commands.cli
,startup_script.sh
, dan definisi modul ke/site/deployments/tools/
.Konfigurasikan situs Anda untuk dijalankan
startup_script.sh
saat kontainer dimulai. Di portal Microsoft Azure, navigasi ke Konfigurasi>Pengaturan Umum>Perintah Startup. Atur bidang perintah startup ke/home/site/deployments/tools/startup_script.sh
. Simpan perubahan Anda.
Untuk mengonfirmasi bahwa datasource ditambahkan ke server JBoss, SSH ke webapp Anda dan jalankan $JBOSS_HOME/bin/jboss-cli.sh --connect
. Setelah Anda tersambung ke JBoss, jalankan /subsystem=datasources:read-resource
untuk mencetak daftar sumber data.
robot933456 dalam log
Anda mungkin melihat pesan berikut dalam 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 hanya menunjukkan bahwa jalur tersebut tidak ada, tetapi ini memberi tahu App Service bahwa kontainernya sehat dan siap untuk menanggapi permintaan.
Memilih versi runtime Java
App Service memungkinkan pengguna 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 agar versi patch diperbarui secara otomatis saat versi minor baru tersedia. Dalam kebanyakan kasus, aplikasi produksi harus menggunakan versi JVM patch yang disematkan. Ini mencegah pemadaman yang tidak terantisipasi 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 menyematkan 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 di aplikasi. Untuk memastikan bahwa aplikasi Anda berjalan pada versi minor yang lebih baru, buat slot penahapan dan tingkatkan versi minor pada slot penahapan. Setelah mengonfirmasi bahwa aplikasi berjalan dengan benar pada versi minor baru, Anda dapat menukar slot penahapan dan produksi.
JBoss EAP
Pengklusteran di JBoss EAP
App Service mendukung pengklusteran untuk JBoss EAP versi 7.4.1 dan yang lebih baru. Untuk mengaktifkan pengklusteran, aplikasi web Anda harus terintegrasi dengan jaringan virtual. Ketika aplikasi web terintegrasi dengan jaringan virtual, aplikasi ini dimulai ulang, dan penginstalan JBoss EAP secara otomatis dimulai dengan konfigurasi berkluster. Instans JBoss EAP berkomunikasi melalui subnet yang ditentukan dalam integrasi jaringan virtual, menggunakan port yang ditampilkan dalam WEBSITES_PRIVATE_PORTS
variabel lingkungan saat runtime. 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 protokol penemuan JGroups FILE_PING untuk menemukan instans baru dan mempertahankan informasi kluster seperti anggota kluster, pengidentifikasi kluster, dan alamat IP kluster. 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 batas waktu pengklusteran JBOSS dengan membersihkan file penemuan usang selama startup aplikasi Anda
Jenis Premium V3 dan Paket Isolated App Service V2 secara opsional dapat didistribusikan di seluruh Zona Ketersediaan untuk meningkatkan ketahanan dan keandalan untuk beban kerja penting bisnis Anda. Arsitektur ini juga dikenal sebagai redundansi zona. Fitur pengklusteran JBoss EAP kompatibel dengan fitur redundansi zona.
Aturan Skala Otomatis
Saat mengonfigurasi aturan skala otomatis untuk penskalaan horizontal, penting untuk menghapus instans secara bertahap (satu per satu) untuk memastikan setiap instans yang dihapus dapat mentransfer aktivitasnya (seperti menangani transaksi database) ke anggota kluster lain. Saat mengonfigurasi aturan skala otomatis Anda di Portal untuk menurunkan skala, gunakan opsi berikut:
- Operasi: "Kurangi hitungan sebanyak"
- Pendinginan: "5 menit" atau lebih
- Jumlah instans: 1
Anda tidak perlu menambahkan instans secara bertahap (perluasan skala), Anda dapat menambahkan beberapa instans ke kluster sekaligus.
Paket Azure App Service JBoss EAP
JBoss EAP hanya tersedia pada jenis Paket Azure App Service Premium v3 dan Isolated v2. Pelanggan yang membuat situs EAP JBoss pada tingkat yang berbeda selama pratinjau publik harus meningkatkan ke tingkat perangkat keras Premium atau Terisolasi untuk menghindari perilaku yang tidak terduga.
Konfigurasi Garis Besar Tomcat Pada App Services
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: Dengan memahami file server.xml dan detail konfigurasi Tomcat, Anda dapat menyempurnakan pengaturan server agar sesuai dengan kebutuhan aplikasi mereka.
- Penelusuran kesalahan: Saat aplikasi disebarkan di server Tomcat, pengembang perlu mengetahui konfigurasi server untuk men-debug masalah apa pun yang mungkin muncul. 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. Dengan 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. Memahami detail ini sangat penting 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 tertentu yang Anda keluarkan dari kotak untuk konfigurasi Tomcat. Anda dapat merujuk ke Dokumentasi Resmi Apache Tomcat untuk informasi terperinci, termasuk konfigurasi default untuk Server Web Tomcat.
Selain itu, ada transformasi tertentu yang diterapkan lebih lanjut di atas server.xml untuk distribusi Tomcat pada awalnya. Ini adalah transformasi ke pengaturan Koneksi or, Host, dan Valve.
Perhatikan bahwa 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
conectionTimeout
diatur keWEBSITE_TOMCAT_CONNECTION_TIMEOUT
, yang defaultnya240000
maxThreads
diatur keWEBSITE_CATALINA_MAXTHREADS
, yang defaultnya200
maxConnections
diatur keWEBSITE_CATALINA_MAXCONNECTIONS
, yang defaultnya10000
Catatan
Pengaturan connectionTimeout, maxThreads, dan max Koneksi ions dapat disetel dengan pengaturan aplikasi
Berikut adalah contoh perintah CLI yang mungkin Anda gunakan untuk mengubah nilai conectionTimeout, maxThreads, atau max Koneksi ions:
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
- Koneksi or menggunakan alamat kontainer alih-alih 127.0.0.1
Host
<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 defaultnya/site/wwwroot
unpackWARs
diatur keAZURE_UNPACK_WARS
, yang defaultnyatrue
workDir
diatur keJAVA_TMP_DIR
, yang defaultTMP
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 defaultnyahome\logFiles
maxDays
adalah untukWEBSITE_HTTPLOGGING_RETENTION_DAYS
, yang default ke0
[selamanya]
Di Linux, ia memiliki semua kustomisasi yang sama, ditambah:
- 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>
Langkah berikutnya
Kunjungi pusat Azure for Java Developers untuk menemukan mulai cepat Azure, tutorial, dan dokumentasi referensi Java.