MySQL ile App Service’e Spring uygulaması dağıtma

Bu öğretici App Service Linux’ta Java web uygulamalarını derleme, yapılandırma, dağıtma, sorun giderme ve ölçeklendirme işlemlerinden size yol gösterir.

Bu öğretici popüler Spring PetClinic örnek uygulaması üzerinde oluşturulmuştur. Bu konu başlığı altında uygulamanın HSQLDB sürümünü yerel olarak test edecek ve bunu Azure App Service’e dağıtacaksınız. Bundan sonra MySQL için Azure Veritabanı kullanan bir sürümü yapılandırıp dağıtacaksınız. Son olarak uygulama günlüklerine erişmeyi ve uygulamanızı çalıştıran çalışan sayısını artırarak ölçeği genişletmeyi öğreneceksiniz.

Önkoşullar

Örneği alma

Örnek uygulamayla çalışmaya başlamak için aşağıdaki komutları kullanarak kaynak depoyu kopyalayın ve hazırlayın.

git clone https://github.com/spring-petclinic/spring-framework-petclinic.git
cd spring-framework-petclinic

HSQLDB örneğini yerel olarak derleme ve çalıştırma

İlk olarak, veritabanı olarak HSQLDB'yi kullanarak örneği yerel olarak testacağız.

Örnek uygulamanın HSQLDB sürümünü derleme.

mvn package

Ardından TOMCAT_HOME ortam değişkenini Tomcat yüklemenizin konumuna ayarlayın.

export TOMCAT_HOME=<Tomcat install directory>

Ardından, pom.xml war dosyasını dağıtmak için güncelleştirin. Aşağıdaki XML’yi mevcut <plugins> öğesinin alt öğesi olarak ekleyin. Gerekirse, 1.9.81.9.8

<plugin>
    <groupId>org.codehaus.cargo</groupId>
    <artifactId>cargo-maven3-plugin</artifactId>
    <version>1.9.8</version>
    <configuration>
        <container>
            <containerId>tomcat9x</containerId>
            <type>installed</type>
            <home>${TOMCAT_HOME}</home>
        </container>
        <configuration>
            <type>existing</type>
            <home>${TOMCAT_HOME}</home>
        </configuration>
        <deployables>
            <deployable>
                <groupId>${project.groupId}</groupId>
                <artifactId>${project.artifactId}</artifactId>
                <type>war</type>
                <properties>
                    <context>/</context>
                </properties>
            </deployable>
        </deployables>
    </configuration>
</plugin>

Bu yapılandırma gerçekleştirildikten sonra uygulamayı Tomcat’e yerel olarak dağıtabilirsiniz.

mvn cargo:deploy

Sonra Tomcat’i başlatın.

${TOMCAT_HOME}/bin/catalina.sh run

Şimdi tarayıcınızda http://localhost:8080 konumuna gidip çalışan uygulamayı görebilir ve nasıl çalıştığı hakkında fikir edinebilirsiniz. Bitirdiğinizde Bash isteminde Ctrl+C tuşlarını seçerek Tomcat’i durdurun.

Azure App Service'e dağıtma

Artık yerel olarak çalıştığını gördüğünüze göre, uygulamayı Azure’a dağıtacağız.

Önce aşağıdaki ortam değişkenlerini ayarlayın: için, REGION kullanın veya diğer bölgeler için burada West US 2REGION

export RESOURCEGROUP_NAME=<resource group>
export WEBAPP_NAME=<web app>
export WEBAPP_PLAN_NAME=${WEBAPP_NAME}-appservice-plan
export REGION=<region>

Maven bu değerleri kullanarak, sizin sağladığınız adlarla Azure kaynaklarını oluşturur. Ortam değişkenlerini kullanarak hesap gizli dizilerinizi proje dosyalarınızın dışında tutabilirsiniz.

Ardından pom.xml dosyasını Azure dağıtımı için Maven’i yapılandırmak üzere güncelleştirin. Daha önce eklediğiniz <plugin> öğesinin arkasına aşağıdaki XML’yi ekleyin. Gerekirse 2.2.3 sürümünü 2.2.3 geçerli sürümüyle değiştirin.

<plugin>
  <groupId>com.microsoft.azure</groupId>
  <artifactId>azure-webapp-maven-plugin</artifactId>
  <version>2.2.3</version>
  <configuration>
    <schemaVersion>v2</schemaVersion>
    <subscriptionId>${SUBSCRIPTION_ID}</subscriptionId>
    <resourceGroup>${RESOURCEGROUP_NAME}</resourceGroup>
    <appName>${WEBAPP_NAME}</appName>
    <region>${REGION}</region>
    <pricingTier>P1v2</pricingTier>
    <runtime>
      <os>Linux</os>
      <javaVersion>Java 8</javaVersion>
      <webContainer>TOMCAT 9.0</webContainer>
    </runtime>
    <deployment>
      <resources>
        <resource>
          <directory>${project.basedir}/target</directory>
          <includes>
            <include>*.war</include>
          </includes>
        </resource>
      </resources>
    </deployment>
  </configuration>
</plugin>

Sonra Azure’da oturum açın.

az login

Uygulamayı App Service Linux’a dağıtın.

mvn azure-webapp:deploy

Şimdi https://<app-name>.azurewebsites.net konumuna gidip (<app-name> öğesini değiştirdikten sonra) çalışan uygulamayı görebilirsiniz.

MySQL için Azure Veritabanı’nı ayarlama

Şimdi HSQLDB yerine MySQL’i kullanmaya geçeceğiz. Azure’da bir MySQL sunucusu oluşturacak ve veritabanı ekleyeceğiz; ardından uygulama yapılandırmasını yeni veritabanı bağlantı bilgileriyle güncelleştireceğiz.

Önce sonraki adımlarda kullanmak üzere aşağıdaki ortam değişkenlerini ayarlayın:

export MYSQL_SERVER_NAME=<server>
export MYSQL_SERVER_FULL_NAME=${MYSQL_SERVER_NAME}.mysql.database.azure.com
export MYSQL_SERVER_ADMIN_LOGIN_NAME=<admin>
export MYSQL_SERVER_ADMIN_PASSWORD=<password>
export MYSQL_DATABASE_NAME=<database>
export DOLLAR=\$

Sonra veritabanı sunucusunu oluşturun ve başlatın. İlk yapılandırma için az mysql up kullanın. Sonra yapılandırma zaman aşımını artırmak ve sunucu saat dilimini ayarlamak için az mysql server configuration set kullanın.

az extension add --name db-up

az mysql up \
    --resource-group ${RESOURCEGROUP_NAME} \
    --server-name ${MYSQL_SERVER_NAME} \
    --database-name ${MYSQL_DATABASE_NAME} \
    --admin-user ${MYSQL_SERVER_ADMIN_LOGIN_NAME} \
    --admin-password ${MYSQL_SERVER_ADMIN_PASSWORD}

az mysql server configuration set --name wait_timeout \
    --resource-group ${RESOURCEGROUP_NAME} \
    --server ${MYSQL_SERVER_NAME} --value 2147483

az mysql server configuration set --name time_zone \
    --resource-group ${RESOURCEGROUP_NAME} \
    --server ${MYSQL_SERVER_NAME} --value=-8:00

Ardından MySQL CLI'sini kullanarak Azure'da veritabanınıza bağlanın.

mysql -u ${MYSQL_SERVER_ADMIN_LOGIN_NAME}@${MYSQL_SERVER_NAME} \
 -h ${MYSQL_SERVER_FULL_NAME} -P 3306 -p

MySQL CLI isteminde aşağıdaki komutu çalıştırarak adlı veritabanınızı ortam değişkeni için daha önce belirttiğiniz değerle MYSQL_DATABASE_NAME doğrulayın.

show databases;

MySQL artık kullanıma hazırdır.

Uygulamayı MySQL için yapılandırma

Bundan sonra uygulamanın MySQL sürümüne bağlantı bilgilerini ekleyecek ve bunu App Service’te dağıtacağız.

MySQLpom.xmlyi etkin yapılandırma yapmak içinpom.xmldosyasını güncelleştirin. Burada gösterildiği gibi, H2 profilinden öğesini kaldırın ve bunun yerine <activation> MySQL profiline koyabilirsiniz. Kod parçacığının kalan bölümü mevcut yapılandırmayı gösterir. Daha önce ayarlamış olduğunuz ortam değişkenlerinin, Maven tarafından MySQL erişiminizi yapılandırmak için nasıl kullanıldığına dikkat edin.

<profile>
    <id>MySQL</id>
    <activation>
        <activeByDefault>true</activeByDefault>
    </activation>
    <properties>
        <db.script>mysql</db.script>
        <jpa.database>MYSQL</jpa.database>
        <jdbc.driverClassName>com.mysql.jdbc.Driver</jdbc.driverClassName>
        <jdbc.url>jdbc:mysql://${DOLLAR}{MYSQL_SERVER_FULL_NAME}:3306/${DOLLAR}{MYSQL_DATABASE_NAME}?useUnicode=true</jdbc.url>
        <jdbc.username>${DOLLAR}{MYSQL_SERVER_ADMIN_LOGIN_NAME}@${DOLLAR}{MYSQL_SERVER_FULL_NAME}</jdbc.username>
        <jdbc.password>${DOLLAR}{MYSQL_SERVER_ADMIN_PASSWORD}</jdbc.password>
    </properties>
    ...
</profile>

Ardından pom.xml dosyasını Azure dağıtımı ve MySQL kullanımı için Maven’i yapılandırmak üzere güncelleştirin. Daha önce eklediğiniz <plugin> öğesinin arkasına aşağıdaki XML’yi ekleyin. Gerekirse 2.2.3 sürümünü 2.2.3 geçerli sürümüyle değiştirin.

<plugin>
  <groupId>com.microsoft.azure</groupId>
  <artifactId>azure-webapp-maven-plugin</artifactId>
  <version>2.2.3</version>
  <configuration>
    <schemaVersion>v2</schemaVersion>
    <subscriptionId>${SUBSCRIPTION_ID}</subscriptionId>
    <resourceGroup>${RESOURCEGROUP_NAME}</resourceGroup>
    <appName>${WEBAPP_NAME}</appName>
    <region>${REGION}</region>
    <pricingTier>P1v2</pricingTier>
    <runtime>
      <os>Linux</os>
      <javaVersion>Java 8</javaVersion>
      <webContainer>TOMCAT 9.0</webContainer>
    </runtime>
    <appSettings>
      <property>
        <name>MYSQL_SERVER_FULL_NAME</name>
        <value>${MYSQL_SERVER_FULL_NAME}</value>
      </property>
      <property>
        <name>MYSQL_SERVER_ADMIN_LOGIN_NAME</name>
        <value>${MYSQL_SERVER_ADMIN_LOGIN_NAME}</value>
      </property>
      <property>
        <name>MYSQL_SERVER_ADMIN_PASSWORD</name>
        <value>${MYSQL_SERVER_ADMIN_PASSWORD}</value>
      </property>
      <property>
        <name>MYSQL_DATABASE_NAME</name>
        <value>${MYSQL_DATABASE_NAME}</value>
      </property>
    </appSettings>
    <deployment>
      <resources>
        <resource>
          <directory>${project.basedir}/target</directory>
          <includes>
            <include>*.war</include>
          </includes>
        </resource>
      </resources>
    </deployment>
  </configuration>
</plugin>

Sonra uygulamayı derleyin ve Tomcat’le dağıtıp çalıştırarak yerel olarak test edin.

mvn package
mvn cargo:deploy
${TOMCAT_HOME}/bin/catalina.sh run

Artık uygulamayı http://localhost:8080 konumunda yerel olarak görüntüleyebilirsiniz. Uygulama önceki gibi görünecek ve davranacak ama HSQLDB yerine MySQL için Azure Veritabanı’nı kullanacaktır. Bitirdiğinizde Bash isteminde Ctrl+C tuşlarını seçerek Tomcat’i durdurun.

Son olarak uygulamayı App Service’e dağıtın.

mvn azure-webapp:deploy

https://<app-name>.azurewebsites.net konumuna gidip App Service ve MySQL için Azure Veritabanı kullanarak çalışan uygulamayı görebilirsiniz.

Uygulama günlüklerine erişme

Sorunları gidermeniz gerekiyorsa uygulama günlüklerine bakabilirsiniz. Yerel makinenizde uzak günlük akışını açmak için aşağıdaki komutu kullanın.

az webapp log tail --name ${WEBAPP_NAME} \
    --resource-group ${RESOURCEGROUP_NAME}

Günlükleri görüntülemeyi bitirdiğinizde Ctrl+C tuşlarını seçerek akışı durdurun.

Günlük akışı https://<app-name>.scm.azurewebsites.net/api/logstream konumunda da bulunabilir.

Ölçeği genişletme

Uygulamanızın artan trafiğini desteklemek için aşağıdaki komutu kullanarak ölçeği birden çok örneğe genişletebilirsiniz.

az appservice plan update --number-of-workers 2 \
    --name ${WEBAPP_PLAN_NAME} \
    --resource-group ${RESOURCEGROUP_NAME}

Tebrikler! Spring Framework, JSP, Spring Data, Hibernate, JDBC, App Service Linux ve MySQL için Azure Veritabanı kullanarak bir Java Web uygulaması derlediğiniz ve bu uygulamanın ölçeğini genişlettiniz.

Kaynakları temizleme

Önceki bölümlerde bir kaynak grubunda Azure kaynakları oluşturdunuz. Bu kaynakları gelecekte kullanacağınızı düşünmüyorsanız, aşağıdaki komutu çalıştırarak kaynak grubunu silin.

az group delete --name ${RESOURCEGROUP_NAME}

Sonraki adımlar

Sonra App Service ile Java için sağlanan diğer yapılandırma ve CI/CD seçeneklerini gözden geçirin.