Öğretici: Linux ve MySQL üzerinde Azure Uygulaması Hizmeti ile Tomcat web uygulaması oluşturma

Bu öğreticide, mySQL veritabanına bağlanan (MySQL için Azure Veritabanı kullanarak) Azure Uygulaması Hizmetinde güvenli bir Tomcat uygulamasının nasıl derlendiğini, yapılandırılacağı ve dağıtılacağı gösterilmektedir. Azure Uygulaması Hizmeti, Windows veya Linux'ta kolayca uygulama dağıtabilen yüksek oranda ölçeklenebilir, kendi kendine düzeltme eki uygulamalı bir web barındırma hizmetidir. İşiniz bittiğinde, Linux'ta Azure Uygulaması Hizmeti üzerinde çalışan bir Tomcat uygulamanız olur.

MySQL'de veri depolayarak tomcat uygulamasının ekran görüntüsü.

Bu öğreticide aşağıdakilerin nasıl yapılacağını öğreneceksiniz:

  • Azure Uygulaması Hizmeti ve MySQL için Azure Veritabanı için varsayılan olarak güvenli bir mimari oluşturun.
  • Yönetilen kimlik ve Key Vault başvurularını kullanarak bağlantı gizli dizilerinin güvenliğini sağlama.
  • GitHub deposundan App Service'e bir Tomcat örnek uygulaması dağıtın.
  • Uygulama kodundaki App Service uygulama ayarlarını alır.
  • Güncelleştirmeler yapın ve uygulama kodunu yeniden dağıtın.
  • Tanılama günlüklerini App Service'ten akışla aktarabilirsiniz.
  • Uygulamayı Azure portalında yönetin.
  • Azure Geliştirici CLI'sını kullanarak aynı mimariyi sağlayın ve dağıtın.
  • GitHub Codespaces ve GitHub Copilot ile geliştirme iş akışınızı iyileştirin.

Önkoşullar

  • Etkin aboneliği olan bir Azure hesabı. Azure hesabınız yoksa ücretsiz olarak bir hesap oluşturabilirsiniz.
  • Bir GitHub hesabı. Ücretsiz olarak da bir tane alabilirsiniz.
  • Tomcat geliştirme ile Java bilgisi.
  • (İsteğe bağlı) GitHub Copilot hesabı olan GitHub Copilot'ı denemek için. 30 günlük ücretsiz deneme sürümü mevcuttur.

Sona atla

Bu öğreticide örnek uygulamayı hızla dağıtabilir ve Azure'da çalıştığını görebilirsiniz. Azure Cloud Shell'de aşağıdaki komutları çalıştırmanız ve istemi izlemesi gerekir:

mkdir msdocs-tomcat-mysql-sample-app
cd msdocs-tomcat-mysql-sample-app
azd init --template msdocs-tomcat-mysql-sample-app
azd up

1. Örneği çalıştırın

İlk olarak, başlangıç noktası olarak örnek bir veri temelli uygulama ayarlarsınız. Kolaylık sağlamak için örnek depo bir geliştirme kapsayıcısı yapılandırması içerir. Geliştirme kapsayıcısı veritabanı, önbellek ve örnek uygulamanın ihtiyaç duyduğu tüm ortam değişkenleri dahil olmak üzere bir uygulama geliştirmek için ihtiyacınız olan her şeye sahiptir. Geliştirme kapsayıcısı GitHub kod alanında çalıştırılabilir; başka bir deyişle örneği web tarayıcısıyla herhangi bir bilgisayarda çalıştırabilirsiniz.

1. Adım: Yeni bir tarayıcı penceresinde:

  1. GitHub hesabınıza giriş yapın.
  2. Şuraya gidin: https://github.com/Azure-Samples/msdocs-tomcat-mysql-sample-app/fork
  3. Yalnızca ana dalı kopyala seçimini kaldırın. Tüm dalları istiyorsun.
  4. Çatal oluştur'u seçin.

Örnek GitHub deposunun çatalının nasıl oluşturulacağını gösteren ekran görüntüsü.

2. Adım: GitHub çatalında:

  1. Başlangıç dalı için main>starter-no-infra öğesini seçin. Bu dal yalnızca örnek projeyi içerir ve Azure ile ilgili dosya veya yapılandırma içermez.
  2. Starter-no-infra üzerinde Kod>Oluştur kod alanı'na tıklayın. Kod alanının ayarlanması birkaç dakika sürer.

GitHub'da kod alanı oluşturmayı gösteren ekran görüntüsü.

3. Adım: Codespace terminalinde:

  1. mvn jetty:run'i çalıştırın.
  2. Bildirimi Your application running on port 80 is available.gördüğünüzde Tarayıcıda Aç'ı seçin. Örnek uygulamayı yeni bir tarayıcı sekmesinde görmeniz gerekir. Jetty sunucusunu durdurmak için yazın Ctrl+C.

GitHub kod alanının içinde örnek uygulamanın nasıl çalıştırılacaklarını gösteren ekran görüntüsü.

İpucu

GitHub Copilot'a bu depo hakkında soru sorabilirsiniz. Örneğin:

  • @workspace Bu proje ne yapar?
  • @workspace .devcontainer klasörü ne yapar?

Sorun mu yaşıyorsunuz? Sorun Giderme bölümüne bakın.

2. App Service ve MySQL oluşturma

İlk olarak Azure kaynaklarını oluşturursunuz. Bu öğreticide kullanılan adımlar, App Service ve MySQL için Azure Veritabanı içeren varsayılan olarak güvenli bir kaynak kümesi oluşturur. Oluşturma işlemi için şunları belirtirsiniz:

  • Web uygulamasının Adı. Uygulamanızın DNS adının bir parçası olarak biçiminde https://<app-name>-<hash>.<region>.azurewebsites.netkullanılır.
  • Uygulamayı dünyada fiziksel olarak çalıştırılacak Bölge. Ayrıca uygulamanızın DNS adının bir parçası olarak da kullanılır.
  • Uygulamanın Çalışma Zamanı yığını . Burası, uygulamanız için kullanılacak Java sürümünü seçtiğiniz yerdir.
  • Uygulama için Barındırma planı . Bu, uygulamanız için özellik kümesini ve ölçeklendirme kapasitesini içeren fiyatlandırma katmanıdır.
  • Uygulamanın Kaynak Grubu . Kaynak grubu, uygulama için gereken tüm Azure kaynaklarını gruplandırmanıza (mantıksal bir kapsayıcıda) olanak tanır.

Azure portalında oturum açın ve Azure Uygulaması Hizmeti kaynaklarınızı oluşturmak için bu adımları izleyin.

1. Adım: Azure portalında:

  1. Azure portalının üst kısmındaki arama çubuğuna "web uygulaması veritabanı" yazın.
  2. Market başlığının altında Web Uygulaması + Veritabanı etiketli öğeyi seçin. Doğrudan oluşturma sihirbazına da gidebilirsiniz.

Web Uygulaması + Veritabanı oluşturma sihirbazını bulmak için üst araç çubuğundaki arama kutusunun nasıl kullanılacağını gösteren ekran görüntüsü.

2. Adım: Web Uygulaması + Veritabanı Oluştur sayfasında, formu aşağıdaki gibi doldurun.

  1. Kaynak Grubu: Yeni oluştur'u seçin ve msdocs-tomcat-mysql-tutorial adını kullanın.
  2. Bölge: Size yakın herhangi bir Azure bölgesi.
  3. Ad: msdocs-tomcat-mysql-XYZ; burada XYZ herhangi bir rastgele karakterdir.
  4. Çalışma zamanı yığını: Java 17.
  5. Java web sunucusu yığını: Apache Tomcat 10.1.
  6. MySQL - Esnek Sunucu , veritabanı altyapısı olarak varsayılan olarak sizin için seçilir. Aksi takdirde seçin. MySQL için Azure Veritabanı, Azure'da en son topluluk sürümleriyle uyumlu, tam olarak yönetilen bir hizmet olarak MySQL veritabanıdır.
  7. Barındırma planı: Temel. Hazır olduğunuzda, ölçeği bir üretim fiyatlandırma katmanına kadar artırabilirsiniz.
  8. Gözden geçir ve oluştur’u seçin.
  9. Doğrulama tamamlandıktan sonra Oluştur'u seçin.

Web Uygulaması + Veritabanı sihirbazında yeni bir uygulama ve veritabanını yapılandırmayı gösteren ekran görüntüsü.

3. Adım: Dağıtımın tamamlanması birkaç dakika sürer. Dağıtım tamamlandıktan sonra Kaynağa git düğmesini seçin. Doğrudan App Service uygulamasına yönlendirilirsiniz, ancak aşağıdaki kaynaklar oluşturulur:

  • Kaynak grubu: Oluşturulan tüm kaynaklar için kapsayıcı.
  • App Service planı: App Service için işlem kaynaklarını tanımlar. Temel katmanda bir Linux planı oluşturulur.
  • App Service: Uygulamanızı temsil eder ve App Service planında çalışır.
  • Sanal ağ: App Service uygulamasıyla tümleştirilmiş ve arka uç ağ trafiğini yalıtıyor.
  • esnek sunucu MySQL için Azure Veritabanı: Yalnızca sanal ağdan erişilebilir. Sunucuda sizin için bir veritabanı ve kullanıcı oluşturulur.
  • Özel DNS bölgeleri: Sanal ağdaki veritabanı sunucusunun DNS çözümlemesini etkinleştirin.

Dağıtım işleminin tamamlandığını gösteren ekran görüntüsü.

Sorun mu yaşıyorsunuz? Sorun Giderme bölümüne bakın.

3. Bağlantı gizli dizilerinin güvenliğini sağlama

Oluşturma sihirbazı bağlantı dizesini sizin için zaten bir uygulama ayarı olarak oluşturdu. Ancak en iyi güvenlik uygulaması, gizli dizileri App Service'in dışında tutmaktır. Hizmet Bağlayıcıları yardımıyla gizli dizilerinizi bir anahtar kasasına taşıyacak ve uygulama ayarınızı Key Vault başvurusu olarak değiştireceksiniz.

1. Adım: App Service sayfasında:

  1. Sol menüde Ayarlar > Ortam değişkenleri'ni seçin.
  2. AZURE_MYSQL_CONNECTIONSTRING'ı seçin. Bir JDBC bağlantı dizesi içerir. Geçerli bir Oracle, SQL Server, PostgreSQL veya MySQL bağlantı dizesi içeren bir uygulama ayarı eklerseniz, App Service bunu Tomcat sunucusunun context.xml dosyasına Java Adlandırma ve Dizin Arabirimi (JNDI) veri kaynağı olarak ekler.
  3. Uygulama ayarı ekle/düzenle bölümünde, Değer alanında dizenin sonundaki password= bölümünü bulun.
  4. Daha sonra kullanmak üzere Password= sonrasındaki parola dizesini kopyalayın. Bu uygulama ayarı, özel uç noktanın arkasında güvenliği sağlanan MySQL veritabanına bağlanmanızı sağlar. Ancak gizli dizi doğrudan App Service uygulamasına kaydedilir ve bu en iyisi değildir. Bunu değiştireceksin.

Bir uygulama ayarının değerini nasıl göreceğinizi gösteren ekran görüntüsü.

2. Adım: Gizli dizilerin güvenli yönetimi için bir anahtar kasası oluşturun.

  1. Üstteki arama çubuğuna "key vault" yazın ve Market Anahtar Kasası'nı> seçin.
  2. Kaynak Grubu'nda msdocs-tomcat-mysql-tutorial öğesini seçin.
  3. Anahtar kasası adı alanına yalnızca harf ve sayılardan oluşan bir ad yazın.
  4. Bölge'de, kaynak grubu olarak örnek konuma ayarlayın.

Anahtar kasası oluşturmayı gösteren ekran görüntüsü.

3. Adım:

  1. sekmesini seçin.
  2. Genel erişimi etkinleştir'in seçimini kaldırın.
  3. Özel uç nokta oluştur'u seçin.
  4. Kaynak Grubu'nda msdocs-tomcat-mysql-tutorial öğesini seçin.
  5. Anahtar kasası adı alanına yalnızca harf ve sayılardan oluşan bir ad yazın.
  6. Bölge'de, kaynak grubu olarak örnek konuma ayarlayın.
  7. İletişim kutusundaki Konum'da App Service uygulamanızla aynı konumu seçin.
  8. Kaynak Grubu'nda msdocs-tomcat-mysql-tutorial öğesini seçin.
  9. Ad alanına msdocs-tomcat-mysql-XYZVaultEndpoint yazın.
  10. Sanal ağ'da msdocs-tomcat-mysql-XYZVnet öğesini seçin.
  11. Alt ağda msdocs-tomcat-mysql-XYZSubnet.
  12. Tamam'ı seçin.
  13. Gözden Geçir + oluştur’u ve sonra da Oluştur’u seçin. Anahtar kasası dağıtımının tamamlanmasını bekleyin. "Dağıtımınız tamamlandı" ifadesini görmeniz gerekir.

Özel uç nokta ile anahtar kasasının güvenliğini sağlamayı gösteren ekran görüntüsü.

4. Adım:

  1. Üst arama çubuğuna msdocs-tomcat-mysql yazın ve ardından msdocs-tomcat-mysql-XYZ adlı App Service kaynağını yazın.
  2. App Service sayfasındaki sol menüde Ayarlar > Hizmet Bağlayıcısı'nı seçin. Uygulama oluşturma sihirbazının sizin için oluşturduğu bir bağlayıcı zaten var.
  3. Bağlayıcının yanındaki onay kutusunu ve ardından Düzenle'yi seçin.
  4. Temel Bilgiler sekmesinde İstemci türü'nü Java olarak ayarlayın.
  5. Kimlik Doğrulaması sekmesini seçin.
  6. Parola'da, daha önce kopyaladığınız parolayı yapıştırın.
  7. Key Vault'ta Gizli Dizi Depola'ya tıklayın.
  8. Key Vault Bağlantısı'nın altında Yeni oluştur'u seçin. Düzenle iletişim kutusunun üzerinde Bağlantı oluştur iletişim kutusu açılır.

Anahtar kasası bağlantısıyla hizmet bağlayıcısını düzenlemeyi gösteren ekran görüntüsü.

5. Adım: Key Vault bağlantısı için Bağlantı oluştur iletişim kutusunda:

  1. Key Vault'ta daha önce oluşturduğunuz anahtar kasasını seçin.
  2. Gözden geçir + Oluştur’u seçin. Sistem tarafından atanan yönetilen kimliğin Seçili olarak ayarlandığını görmeniz gerekir.
  3. Doğrulama tamamlandığında Oluştur'u seçin.

Anahtar kasası hizmet bağlayıcısını yapılandırmayı gösteren ekran görüntüsü.

6. Adım: DefaultConnector için düzenleme iletişim kutusuna geri dönersiniz.

  1. Kimlik Doğrulaması sekmesinde anahtar kasası bağlayıcısının oluşturulmasını bekleyin. Tamamlandığında, Key Vault Bağlantısı açılan listesinde otomatik olarak seçilir.
  2. İleri: Ağ'ı seçin.
  3. Kaydet'i seçin. Güncelleştirme başarılı bildirimi görünene kadar bekleyin.

VarsayılanBağlantıda seçilen anahtar kasası bağlantısını gösteren ekran görüntüsü.

7. Adım: Değişikliklerinizi doğrulamak için:

  1. Sol menüden Ortam değişkenleri Bağlantı dizeleri'ni > yeniden seçin.
  2. AZURE_MYSQL_CONNECTIONSTRING yanında Değeri göster'i seçin. değeri olmalıdır @Microsoft.KeyVault(...); bu da bir anahtar kasası başvurusu olduğu anlamına gelir çünkü gizli dizi artık anahtar kasasında yönetilir.

Azure'da MySQL ortam değişkeninin değerini nasıl göreceğinizi gösteren ekran görüntüsü.

Sorun mu yaşıyorsunuz? Sorun Giderme bölümüne bakın.

4. JNDI veri kaynağını onaylayın

Oracle, SQL Server, PostgreSQL veya MySQL için geçerli bir JDBC bağlantı dizesi içeren bir uygulama ayarı eklerseniz, App Service bunun için Tomcat sunucusunun context.xml dosyasına bir Java Adlandırma ve Dizin Arabirimi (JNDI) veri kaynağı ekler. Bu adımda, JNDI veri kaynağını doğrulamak için uygulama kapsayıcısına SSH bağlantısını kullanırsınız. Bu süreçte, Tomcat kapsayıcısı için SSH kabuğuna erişmeyi öğreneceksiniz.

1. Adım: App Service sayfasına geri dönün:

  1. Soldaki menüdeN SSH'yi seçin.
  2. Git'i seçin.

Azure portalından uygulamanız için SSH kabuğunu açmayı gösteren ekran görüntüsü.

2. Adım: SSH terminalinde komutunu çalıştırın cat /usr/local/tomcat/conf/context.xml. adlı jdbc/AZURE_MYSQL_CONNECTIONSTRING_DS bir JNDI kaynağının eklendiğini görmeniz gerekir. Bu veri kaynağını daha sonra kullanacaksınız.

SSH kabuğunda çalıştırılacak komutları ve bunların çıkışını gösteren ekran görüntüsü.

Not

Yalnızca içindeki dosyalarda /home yapılan değişiklikler uygulama yeniden başlatmalarının ötesinde kalıcı olabilir. Örneğin, öğesini düzenlerseniz /usr/local/tomcat/conf/server.xml, değişiklikler uygulamanın yeniden başlatılmasının ötesinde kalıcı olmaz.

Sorun mu yaşıyorsunuz? Sorun Giderme bölümüne bakın.

5. Örnek kodu dağıtma

Bu adımda GitHub Actions'ı kullanarak GitHub dağıtımını yapılandıracaksınız. App Service'e dağıtmanın birçok yolundan yalnızca biridir, aynı zamanda dağıtım sürecinizde sürekli tümleştirmeye sahip olmanın harika bir yoludur. Varsayılan olarak, GitHub deponuzun her git push örneği derleme ve dağıtma eylemini başlatıyor.

Tomcat kuralı gibi, Tomcat'in kök bağlamını dağıtmak istiyorsanız, derlediğiniz yapıtı ROOT.war olarak adlandırın.

1. Adım: App Service sayfasının sol menüsünde Dağıtım Merkezi'ni seçin.

App Service'te dağıtım merkezini açmayı gösteren ekran görüntüsü.

2. Adım: Dağıtım Merkezi sayfasında:

  1. Kaynak bölümünde GitHub'ı seçin. GitHub Actions varsayılan olarak derleme sağlayıcısı olarak seçilir.
  2. GitHub hesabınızda oturum açın ve Azure'ı yetkilendirme istemini izleyin.
  3. Kuruluş'ta hesabınızı seçin.
  4. Depo'da msdocs-tomcat-mysql-sample-app öğesini seçin.
  5. Branch'te starter-no-infra'yı seçin. Bu, Azure ile ilgili dosyalar veya yapılandırmalar olmadan örnek uygulamanızla birlikte çalıştığınız dalla aynıdır.
  6. Kimlik doğrulama türü için Kullanıcı tarafından atanan kimlik'i seçin.
  7. Üstteki menüde Kaydet'i seçin. App Service, .github/workflows dizinde seçilen GitHub deposuna bir iş akışı dosyası işler. Varsayılan olarak, dağıtım merkezi Microsoft Entra (OIDC kimlik doğrulaması) kullanarak kimlik doğrulaması yapmak üzere iş akışı için kullanıcı tarafından atanan bir kimlik oluşturur. Alternatif kimlik doğrulama seçenekleri için bkz . GitHub Actions kullanarak App Service'e dağıtma.

GitHub Actions kullanarak CI/CD'yi yapılandırmayı gösteren ekran görüntüsü.

3. Adım: Örnek çatalınızın GitHub kod alanında komutunu çalıştırın git pull origin starter-no-infra. Bu, yeni işlenen iş akışı dosyasını kod alanınıza çeker.

GitHub kod alanının içindeki git çekme işlemini gösteren ekran görüntüsü.

4. Adım (Seçenek 1: GitHub Copilot ile):

  1. Sohbet görünümüne ve ardından öğesine tıklayarak +yeni bir sohbet oturumu başlatın.
  2. "@workspace Uygulama veritabanına nasıl bağlanır?" sorusunu sorun. Copilot, veri kaynağı ve nasıl yapılandırıldığı hakkında jdbc/MYSQLDS size bazı açıklamalar verebilir.
  3. "@workspace persistence.xml tanımlanan veri kaynağını Tomcat'te mevcut bir JNDI veri kaynağıyla değiştirmek istiyorum ancak bunu dinamik olarak yapmak istiyorum." sorusunu sorun. Copilot size Seçenek 2'dekine benzer bir kod önerisi verebilir: aşağıdaki GitHub Copilot adımları olmadan ve hatta ContextListener sınıfında değişiklik yapmanızı bile söyleyebilir.
  4. Gezginde src/main/java/com/microsoft/azure/appservice/examples/tomcatmysql/ContextListener.java açın ve yönteme kod önerisini contextInitialized ekleyin. GitHub Copilot size her seferinde aynı yanıtı vermez. Yanıtta ince ayar yapmak için daha fazla soru sormanız gerekebilir. İpuçları için bkz . Kod alanımda GitHub Copilot ile ne yapabilirim?.

Yeni bir GitHub Copilot sohbet oturumunda soru sormayı gösteren ekran görüntüsü.

4. Adım (Seçenek 2: GitHub Copilot olmadan):

  1. Gezginde src/main/java/com/microsoft/azure/appservice/examples/tomcatmysql/ContextListener.java açın. Uygulama başlatıldığında, bu sınıf src/main/resources/META-INF/persistence.xml içindeki veritabanı ayarlarını yükler.
  2. yönteminde contextIntialized() , açıklamalı kodu (satır 29-33) bulun ve açıklamasını kaldırın. Bu kod, uygulama ayarının AZURE_MYSQL_CONNECTIONSTRING mevcut olup olmadığını denetler ve veri kaynağını java:comp/env/jdbc/AZURE_MYSQL_CONNECTIONSTRING_DSSSH kabuğunda daha önce context.xml bulduğunuz veri kaynağı olarak değiştirir.

GitHub kod alanının ve ContextListener.java dosyasının açıldığını gösteren ekran görüntüsü.

5. Adım:

  1. Kaynak Denetimi uzantısını seçin.
  2. Metin kutusuna gibi Configure Azure data sourcebir işleme iletisi yazın.
  3. İşle'yi seçin, ardından Evet ile onaylayın.
  4. Değişiklikleri eşitle 1'i seçin, ardından Tamam ile onaylayın.

İşlenen ve GitHub'a gönderilen değişiklikleri gösteren ekran görüntüsü.

6. Adım: Azure portalındaki Dağıtım Merkezi sayfasına geri dönün:

  1. Günlükler’i seçin. İşlemiş değişikliklerinizden yeni bir dağıtım çalıştırması zaten başlatılıyor.
  2. Dağıtım çalıştırmasının günlük öğesinde, en son zaman damgasını içeren Derleme/Dağıtma Günlükleri girdisini seçin.

Dağıtım merkezinde dağıtım günlüklerini açmayı gösteren ekran görüntüsü.

7. Adım: GitHub deponuza yönlendirilirsiniz ve GitHub eyleminin çalıştığını görürsünüz. İş akışı dosyası derleme ve dağıtma olarak iki ayrı aşama tanımlar. GitHub çalıştırmasının Tamamlandı durumunu göstermesini bekleyin. Yaklaşık 5 dakika sürer.

GitHub çalıştırmanın devam etmekte olduğunu gösteren ekran görüntüsü.

Sorun mu yaşıyorsunuz? Sorun Giderme bölümüne bakın.

6. Uygulamaya göz atın

1. Adım: App Service sayfasında:

  1. Sol menüden Genel Bakış'ı seçin.
  2. Uygulamanızın URL'sini seçin.

Azure portalından App Service başlatmayı gösteren ekran görüntüsü.

2. Adım: Listeye birkaç görev ekleyin. Tebrikler, Azure Uygulaması Hizmeti'nde MySQL için Azure Veritabanı güvenli bağlantısı olan bir web uygulaması çalıştırıyorsunuz.

Azure'da Çalışan MySQL ile Tomcat web uygulamasının ekran görüntüsü.

Sorun mu yaşıyorsunuz? Sorun Giderme bölümüne bakın.

7. Tanılama günlüklerini akışla aktarma

Azure Uygulaması Hizmeti, uygulamanızla ilgili sorunları tanılamanıza yardımcı olmak için konsola gönderilen tüm iletileri yakalar. Örnek uygulama, aşağıdaki kod parçacığında gösterildiği gibi bu özelliği göstermek için standart Log4j günlük deyimlerini içerir:

@WebServlet(urlPatterns = "/")
public class ViewServlet extends HttpServlet {
    private static Logger logger = LogManager.getLogger(ViewServlet.class.getName());
    
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        logger.info("GET /");

        EntityManagerFactory emf = (EntityManagerFactory) req.getServletContext().getAttribute("EMFactory");

1. Adım: App Service sayfasında:

  1. Sol menüden App Service günlükleri'ni seçin.
  2. Uygulama günlüğü'nin altında Dosya Sistemi'ne tıklayın.
  3. Üstteki menüde Kaydet'i seçin.

Azure portalında App Service'te yerel günlükleri etkinleştirmeyi gösteren ekran görüntüsü.

2. Adım: Soldaki menüden Günlük akışı'nı seçin. Kapsayıcının içinden platform günlükleri ve günlükler de dahil olmak üzere uygulamanızın günlüklerini görürsünüz.

Azure portalında günlük akışını görüntülemeyi gösteren ekran görüntüsü.

.NET, Node.js, Python ve Java uygulamaları için Azure İzleyici OpenTelemetry'yi etkinleştirme konusundaki serideki Java uygulamalarında oturum açma hakkında daha fazla bilgi edinin.

Sorun mu yaşıyorsunuz? Sorun Giderme bölümüne bakın.

8. Kaynakları temizleme

İşiniz bittiğinde, kaynak grubunu silerek Azure aboneliğinizdeki tüm kaynakları silebilirsiniz.

1. Adım: Azure portalının üst kısmındaki arama çubuğunda:

  1. Kaynak grubu adını girin.
  2. Kaynak grubunu seçin.

Azure portalında kaynak grubu arama ve bu gruba gitme adımlarını gösteren ekran görüntüsü.

2. Adım: Kaynak grubu sayfasında Kaynak grubunu sil'i seçin.

Azure portalında **Kaynak Grubunu Sil** düğmesinin konumunu gösteren ekran görüntüsü.

3. Adım:

  1. Kaynak grubu adını yazarak silme işleminizi onaylayın.
  2. Sil'i seçin.
  3. Sil ile yeniden onaylayın.

Azure portalında kaynak grubunu silmeye yönelik onay iletişim kutusunun ekran görüntüsü.

2. Azure kaynakları oluşturma ve örnek uygulama dağıtma

Bu adımda Azure kaynaklarını oluşturur ve Linux üzerinde App Service için örnek bir uygulama dağıtırsınız. Bu öğreticide kullanılan adımlar, App Service ve MySQL için Azure Veritabanı içeren varsayılan olarak güvenli bir kaynak kümesi oluşturur.

Geliştirme kapsayıcısı zaten Azure Geliştirici CLI'sine (AZD) sahiptir.

  1. Depo kökünden komutunu çalıştırın azd init.

    azd init --template tomcat-app-service-mysql-infra
    
  2. İstendiğinde aşağıdaki yanıtları verin:

    Soru Yanıt
    Geçerli dizin boş değil. Burada '<your-directory>' içinde bir proje başlatmak istiyor musunuz? Y
    Bu dosyalarla ne yapmak istiyorsunuz? Mevcut dosyalarımı değiştirmeden tut
    Yeni bir ortam adı girin Benzersiz bir ad yazın. AZD şablonu, Azure'da (<app-name>-<hash>.azurewebsites.net) web uygulamanızın DNS adının bir parçası olarak bu adı kullanır. Alfasayısal karakterlere ve kısa çizgilere izin verilir.
  3. komutunu çalıştırıp azd auth login istemi izleyerek Azure'da oturum açın:

    azd auth login
    
  4. Gerekli Azure kaynaklarını oluşturun ve komutuyla uygulama kodunu dağıtın azd up . İstemi izleyerek Azure kaynakları için istenen aboneliği ve konumu seçin.

    azd up
    

    Komutun azd up tamamlanması yaklaşık 15 dakika sürer (Redis önbelleği en çok zaman alır). Ayrıca uygulama kodunuzu derleyip dağıtır, ancak kodunuzu daha sonra App Service ile çalışacak şekilde değiştireceksiniz. Komutu çalışırken, Azure'daki dağıtıma bir bağlantı da dahil olmak üzere sağlama ve dağıtım işlemiyle ilgili iletiler sağlar. Tamamlandığında, komut dağıtım uygulamasının bağlantısını da görüntüler.

    Bu AZD şablonu, aşağıdaki Azure kaynaklarıyla varsayılan olarak güvenli bir mimari oluşturan dosyaları (azure.yaml ve infra dizini) içerir:

    • Kaynak grubu: Oluşturulan tüm kaynaklar için kapsayıcı.
    • App Service planı: App Service için işlem kaynaklarını tanımlar. B1 katmanında bir Linux planı oluşturulur.
    • App Service: Uygulamanızı temsil eder ve App Service planında çalışır.
    • Sanal ağ: App Service uygulamasıyla tümleştirilmiş ve arka uç ağ trafiğini yalıtıyor.
    • MySQL için Azure Veritabanı esnek sunucu: Yalnızca DNS bölgesi tümleştirmesi aracılığıyla sanal ağdan erişilebilir. Sunucuda sizin için bir veritabanı oluşturulur.
    • Redis için Azure Cache: Yalnızca sanal ağ içinden erişilebilir.
    • Özel uç noktalar: Sanal ağdaki anahtar kasası ve Redis önbelleği için erişim uç noktaları.
    • Özel DNS bölgeleri: Sanal ağda anahtar kasasının, veritabanı sunucusunun ve Redis önbelleğinin DNS çözümlemesini etkinleştirin.
    • Log Analytics çalışma alanı: Uygulamanızın günlüklerini göndermesi için hedef kapsayıcı görevi görür ve burada günlükleri de sorgulayabilirsiniz.
    • Anahtar kasası: AZD ile yeniden dağıttığınızda veritabanı parolanızı aynı tutmak için kullanılır.

    Komut kaynak oluşturmayı ve uygulama kodunu ilk kez dağıtmayı tamamladıktan sonra, Azure'daki veritabanına bağlanmak için küçük değişiklikler yapmanız gerektiğinden dağıtılan örnek uygulama henüz çalışmaz.

Sorun mu yaşıyorsunuz? Sorun Giderme bölümüne bakın.

3. bağlantı dizesi doğrulama

Kullandığınız AZD şablonu, sizin için zaten uygulama ayarları olarak bağlantı değişkenlerini oluşturmuş ve size kolaylık sağlamak için bunları terminale çıkış olarak göndermektedir. Uygulama ayarları, bağlantı gizli dizilerini kod deponuzun dışında tutmanın bir yoludur.

  1. AZD çıkışında uygulama ayarını AZURE_MYSQL_CONNECTIONSTRINGbulun. Yalnızca ayar adları görüntülenir. AZD çıkışında aşağıdakine benzerler:

     App Service app has the following connection strings:
             - AZURE_MYSQL_CONNECTIONSTRING
             - AZURE_REDIS_CONNECTIONSTRING
             - AZURE_KEYVAULT_RESOURCEENDPOINT
             - AZURE_KEYVAULT_SCOPE
     

    AZURE_MYSQL_CONNECTIONSTRINGAzure'daki MySQL veritabanına bağlantı dizesi içerir. Daha sonra kodunuzda kullanmanız gerekir.

  2. Size kolaylık sağlamak için AZD şablonu size uygulamanın uygulama ayarları sayfasının doğrudan bağlantısını gösterir. Bağlantıyı bulun ve yeni bir tarayıcı sekmesinde açın.

    Geçerli bir Oracle, SQL Server, PostgreSQL veya MySQL bağlantı dizesi içeren bir uygulama ayarı eklerseniz, App Service bunu Tomcat sunucusunun context.xml dosyasına Java Adlandırma ve Dizin Arabirimi (JNDI) veri kaynağı olarak ekler.

Sorun mu yaşıyorsunuz? Sorun Giderme bölümüne bakın.

4. JNDI veri kaynağını onaylayın

Bu adımda, Tomcat sunucusundaki JNDI veri kaynağını doğrulamak için uygulama kapsayıcısına SSH bağlantısını kullanırsınız. Bu süreçte, Tomcat kapsayıcısı için SSH kabuğuna erişmeyi öğreneceksiniz.

  1. AZD çıkışında SSH oturumunun URL'sini bulun ve tarayıcıda oturuma gidin. Çıktıda şöyle görünür:

     Open SSH session to App Service container at: https://<app-name>-<hash>.scm.azurewebsites.net/webssh/host
     
  2. SSH terminalinde komutunu çalıştırın cat /usr/local/tomcat/conf/context.xml. adlı jdbc/AZURE_MYSQL_CONNECTIONSTRING_DS bir JNDI kaynağının eklendiğini görmeniz gerekir. Bu veri kaynağını daha sonra kullanacaksınız.

    SSH kabuğunda çalıştırılacak komutları ve bunların çıkışını gösteren ekran görüntüsü.

Not

Yalnızca içindeki dosyalarda /home yapılan değişiklikler uygulama yeniden başlatmalarının ötesinde kalıcı olabilir. Örneğin, öğesini düzenlerseniz /usr/local/tomcat/conf/server.xml, değişiklikler uygulamanın yeniden başlatılmasının ötesinde kalıcı olmaz.

Sorun mu yaşıyorsunuz? Sorun Giderme bölümüne bakın.

5. Örnek kodu değiştirme ve yeniden dağıtma

  1. GitHub kod alanında Sohbet görünümüne ve ardından öğesine tıklayarak +yeni bir sohbet oturumu başlatın.

  2. "@workspace Uygulama veritabanına nasıl bağlanır?" sorusunu sorun. Copilot, veri kaynağı ve nasıl yapılandırıldığı hakkında jdbc/MYSQLDS size bazı açıklamalar verebilir.

  3. "@workspace persistence.xml tanımlanan veri kaynağını Tomcat'teki mevcut bir JNDI veri kaynağıyla değiştirmek istiyorum ancak bunu dinamik olarak yapmak istiyorum." Copilot size Seçenek 2'dekine benzer bir kod önerisi verebilir: aşağıdaki GitHub Copilot adımları olmadan ve hatta ContextListener sınıfında değişiklik yapmanızı bile söyleyebilir.

  4. Gezginde src/main/java/com/microsoft/azure/appservice/examples/tomcatmysql/ContextListener.java açın ve yönteme kod önerisini contextInitialized ekleyin.

    GitHub Copilot size her seferinde aynı yanıtı vermez. Yanıtta ince ayar yapmak için başka sorular sormanız gerekebilir. İpuçları için bkz . Kod alanımda GitHub Copilot ile ne yapabilirim?.

  5. Codespace terminalinde komutunu çalıştırın azd deploy.

    azd deploy
    

İpucu

Ayrıca, tüm , ve işlemlerini azd packageyapan her zaman da kullanabilirsinizazd up.azd deployazd provision

War dosyasının nasıl paketlenmiş olduğunu öğrenmek için kendi başına çalıştırabilirsiniz azd package --debug .

Sorun mu yaşıyorsunuz? Sorun Giderme bölümüne bakın.

6. Uygulamaya göz atın

  1. AZD çıkışında uygulamanızın URL'sini bulun ve tarayıcıda bu URL'ye gidin. URL, AZD çıkışında şöyle görünür:

     Deploying services (azd deploy)
    
       (✓) Done: Deploying service web
       - Endpoint: https://<app-name>-<hash>.azurewebsites.net/
     
  2. Listeye birkaç görev ekleyin.

    Görevleri gösteren Azure'da MySQL'in çalıştığı Tomcat web uygulamasının ekran görüntüsü.

    Tebrikler, Azure Uygulaması Hizmeti'nde MySQL için Azure Veritabanı güvenli bağlantısı olan bir web uygulaması çalıştırıyorsunuz.

Sorun mu yaşıyorsunuz? Sorun Giderme bölümüne bakın.

7. Tanılama günlüklerini akışla aktarma

Azure Uygulaması Hizmeti, uygulamanızla ilgili sorunları tanılamanıza yardımcı olmak için konsol günlüklerini yakalayabilir. Kolaylık olması için AZD şablonu yerel dosya sisteminde günlüğe kaydetmeyi zaten etkinleştirdi ve günlükleri Log Analytics çalışma alanına gönderiyor.

Örnek uygulama, aşağıdaki kod parçacığında gösterildiği gibi bu özelliği göstermek için standart Log4j günlük deyimlerini içerir:

@WebServlet(urlPatterns = "/")
public class ViewServlet extends HttpServlet {
    private static Logger logger = LogManager.getLogger(ViewServlet.class.getName());
    
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        logger.info("GET /");

        EntityManagerFactory emf = (EntityManagerFactory) req.getServletContext().getAttribute("EMFactory");

AZD çıkışında App Service günlüklerinin akışının bağlantısını bulun ve tarayıcıda bu bağlantıya gidin. Bağlantı, AZD çıkışında şöyle görünür:

Stream App Service logs at: https://portal.azure.com/#@/resource/subscriptions/<subscription-guid>/resourceGroups/<group-name>/providers/Microsoft.Web/sites/<app-name>/logStream

.NET, Node.js, Python ve Java uygulamaları için Azure İzleyici OpenTelemetry'yi etkinleştirme konusundaki serideki Java uygulamalarında oturum açma hakkında daha fazla bilgi edinin.

Sorun mu yaşıyorsunuz? Sorun Giderme bölümüne bakın.

8. Kaynakları temizleme

Geçerli dağıtım ortamındaki tüm Azure kaynaklarını silmek için komutunu çalıştırın azd down ve istemleri izleyin.

azd down

Sorun giderme

Mvn jetty:run ile birden çok konumdan taranan birçok <Sınıf> görüyorum uyarıları

Uyarıları gözardı edebilirsiniz. Uygulamanın pom.xml, Jetty'nin kullanıma hazır olarak sağladığı bağımlılığı jakarta.servlet.jsp.jstliçerdiğinden Maven Jetty eklentisi uyarıları gösterir. Tomcat'in bağımlılığına ihtiyacınız var.

MySQL için Azure Veritabanı Esnek Sunucu için portal dağıtım görünümü Çakışma durumu gösteriyor

Aboneliğinize ve seçtiğiniz bölgeye bağlı olarak, MySQL için Azure Veritabanı Esnek Sunucunun Conflictdağıtım durumunu, İşlem ayrıntıları bölümünde aşağıdaki iletiyle görebilirsiniz:

InternalServerError: An unexpected error occured while processing the request.

Bu hata büyük olasılıkla aboneliğinizde seçtiğiniz bölge için bir sınırdan kaynaklanır. Dağıtımınız için farklı bir bölge seçmeyi deneyin.

Dağıtılan örnek uygulama, görev listesi uygulamasını göstermiyor

Görev listesi uygulaması yerine bir Hey, Java developers! sayfa görüyorsanız, App Service büyük olasılıkla en son kod dağıtımınızdan güncelleştirilmiş kapsayıcıyı yüklemeye devam ediyordur. Birkaç dakika bekleyin ve sayfayı yenileyin.

Dağıtılan örnek uygulamada 404 Sayfa Bulunamadı hatası görüyorum

Veri kaynağını kullanmak için kod değişiklikleri yaptığınızdan java:comp/env/jdbc/AZURE_MYSQL_CONNECTIONSTRING_DS emin olun. Değişiklikleri yaptıysanız ve kodunuzu yeniden dağıttıysanız, App Service büyük olasılıkla güncelleştirilmiş kapsayıcıyı yüklemeye devam ediyordur. Birkaç dakika bekleyin ve sayfayı yenileyin.

Sık sorulan sorular

Bu kurulumun maliyeti ne kadardır?

Oluşturulan kaynakların fiyatlandırması aşağıdaki gibidir:

  • App Service planı Temel katmanda oluşturulur ve ölçeği artırılabilir veya azaltılabilir. Bkz. App Service fiyatlandırması.
  • MySQL esnek sunucusu B1ms katmanında oluşturulur ve ölçeği artırılabilir veya azaltılabilir. Ücretsiz Azure hesabıyla B1ms katmanı, aylık sınırlara kadar 12 ay boyunca ücretsizdir. Bkz. MySQL için Azure Veritabanı fiyatlandırma.
  • Redis için Azure Cache temel katmanda en düşük önbellek boyutuyla oluşturulur. Bu katmanla ilişkili küçük bir maliyet vardır. Daha yüksek kullanılabilirlik, kümeleme ve diğer özellikler için ölçeğini daha yüksek performans katmanlarına artırabilirsiniz. Bkz. Redis için Azure Cache fiyatlandırma.
  • Eşleme gibi ek işlevler yapılandırmadığınız sürece sanal ağ ücret ödemez. Bkz. Azure Sanal Ağ fiyatlandırması.
  • Özel DNS bölgesi küçük bir ücrete tabi. Bkz. Azure DNS fiyatlandırması.

Nasıl yaparım? diğer araçlarla sanal ağın arkasındaki MySQL sunucusuna bağlanın?

  • Tomcat kapsayıcısı şu anda terminale mysql-client de sahip değil. İstersen, el ile yüklemeniz gerekir. Yüklediğiniz her şeyin uygulama yeniden başlatmalarında kalıcı olmadığını unutmayın.
  • MySQL Workbench gibi bir masaüstü aracından bağlanmak için makinenizin sanal ağ içinde olması gerekir. Örneğin, alt ağlardan birinde bir Azure VM veya Azure sanal ağıyla siteden siteye VPN bağlantısı olan bir şirket içi ağdaki bir makine olabilir.
  • Ayrıca Azure Cloud Shell'i sanal ağ ile tümleştirebilirsiniz.

Yerel uygulama geliştirme GitHub Actions ile nasıl çalışır?

Örnek olarak App Service'ten otomatik olarak oluşturulan iş akışı dosyasının kullanılması, yeni git push bir derleme ve dağıtım çalıştırması başlatır. GitHub deposunun yerel bir kopyasından istediğiniz güncelleştirmeleri yapar ve GitHub'a gönderebilirsiniz. Örneğin:

git add .
git commit -m "<some-message>"
git push origin main

Kullanıcı tarafından atanan kimlik oluşturma iznim yok

Bkz . Dağıtım Merkezi'nden GitHub Actions dağıtımını ayarlama.

Kod alanımda GitHub Copilot ile ne yapabilirim?

Kod alanını oluştururken GitHub Copilot sohbet görünümünün zaten sizin için orada olduğunu fark edebilirsiniz. Kolaylık sağlamak için kapsayıcı tanımına GitHub Copilot sohbet uzantısını dahil ediyoruz (bkz . .devcontainer/devcontainer.json). Ancak, bir GitHub Copilot hesabına ihtiyacınız vardır (30 günlük ücretsiz deneme sürümü kullanılabilir).

GitHub Copilot ile konuşurken size birkaç ipucu:

  • Tek bir sohbet oturumunda, sorular ve yanıtlar birbirleri üzerinde derlenebilir ve sorularınızı ayarlayarak, elde ettiğiniz yanıta ince ayar yapabilirsiniz.
  • Varsayılan olarak, GitHub Copilot'un deponuzdaki hiçbir dosyaya erişimi yoktur. Dosya hakkında soru sormak için önce düzenleyicide dosyayı açın.
  • GitHub Copilot'ın yanıtlarını hazırlarken depodaki tüm dosyalara erişmesine izin vermek için sorunuza ile @workspacebaşlayın. Daha fazla bilgi için bkz. Use the @workspace agent.
  • Sohbet oturumunda, GitHub Copilot değişiklikleri önerebilir ve (ile @workspace) değişikliklerin yapılacağı yeri bile önerebilir, ancak değişiklikleri sizin için yapmasına izin verilmez. Önerilen değişiklikleri eklemek ve test etmek size bağlı.

Elde ettiğiniz yanıta ince ayar yapmak için söyleyebileceğiniz diğer bazı şeyler şunlardır:

  • Bu kodu jdbc/AZURE_MYSQL_CONNECTIONSTRING_DS veri kaynağını kullanacak şekilde değiştirin.
  • Kodunuzdaki bazı içeri aktarmalar javax kullanıyor ama Jakarta uygulamam var.
  • Bu kodun yalnızca ortam değişkeni AZURE_MYSQL_CONNECTIONSTRING ayarlanmışsa çalışmasını istiyorum.
  • Bu kodun yerel olarak değil yalnızca Azure Uygulaması Hizmetinde çalışmasını istiyorum.

Sonraki adımlar

Geliştirici kılavuzunda App Service'te Java uygulamalarını çalıştırma hakkında daha fazla bilgi edinin.

Özel bir etki alanı ve sertifikayla uygulamanızın güvenliğini sağlamayı öğrenin.