2021年3月9日火曜日

AppEngine に Ktor アプリをデプロイする

1. Google Cloud SDK をインストールする

https://cloud.google.com/sdk/docs/install

2. 認証 & プロジェクト選択

  1. > gcloud init  

3. Ktor アプリを作る

IntelliJ IDEA に Ktor plugin を入れて、New Project wizard から Ktor プロジェクトを作る

4. AppEngine の設定を追加する

build.gradle.kts
  1. ...  
  2.   
  3. plugins {  
  4.     ...  
  5.     // ↓ 追加  
  6.     id("com.google.cloud.tools.appengine") version "2.2.0"  
  7.     // ↓ 追加  
  8.     war  
  9. }  
  10.   
  11. ...  
  12.   
  13. dependencies {  
  14.     ...  
  15.   
  16.     // ↓ 追加  
  17.     implementation("io.ktor:ktor-server-servlet:$ktor_version")  
  18.     // ↓ 追加  
  19.     compileOnly("com.google.appengine:appengine:$appengine_version")  
  20. }  
  21.   
  22. // ↓ 追加  
  23. appengine {  
  24.     deploy {  
  25.         projectId = "GCLOUD_CONFIG"  
  26.         version = "GCLOUD_CONFIG"  
  27.     }  
  28. }  
  29.   
  30. // ↓ 追加  
  31. tasks.named("run") {  
  32.     dependsOn(":appengineRun")  
  33. }  
settings.gradle.kts
  1. ...  
  2.   
  3. // https://stackoverflow.com/questions/48502220/how-to-configure-appengine-gradle-plugin-using-kotlin-dsl/48510049#48510049  
  4. // ↓ 追加  
  5. pluginManagement {  
  6.     repositories {  
  7.         gradlePluginPortal()  
  8.         google()  
  9.     }  
  10.     resolutionStrategy {  
  11.         eachPlugin {  
  12.             if (requested.id.id == "com.google.cloud.tools.appengine") {  
  13.                 useModule("com.google.cloud.tools:appengine-gradle-plugin:${requested.version}")  
  14.             }  
  15.         }  
  16.     }  
  17. }  
src/main/webapp/WEB-INF/web.xml
  1. <?xml version="1.0" encoding="ISO-8859-1" ?>  
  2. <web-app xmlns="http://java.sun.com/xml/ns/javaee"  
  3.          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.          xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"  
  5.          version="3.0">  
  6.     <!-- path to application.conf file, required -->  
  7.     <!-- note that this file is always loaded as an absolute path from the classpath -->  
  8.     <context-param>  
  9.         <param-name>io.ktor.ktor.config</param-name>  
  10.         <param-value>application.conf</param-value>  
  11.     </context-param>  
  12.   
  13.     <servlet>  
  14.         <display-name>KtorServlet</display-name>  
  15.         <servlet-name>KtorServlet</servlet-name>  
  16.         <servlet-class>io.ktor.server.servlet.ServletApplicationEngine</servlet-class>  
  17.   
  18.         <!-- required! -->  
  19.         <async-supported>true</async-supported>  
  20.   
  21.         <!-- 100mb max file upload, optional -->  
  22.         <multipart-config>  
  23.             <max-file-size>304857600</max-file-size>  
  24.             <max-request-size>304857600</max-request-size>  
  25.             <file-size-threshold>0</file-size-threshold>  
  26.         </multipart-config>  
  27.     </servlet>  
  28.   
  29.     <servlet-mapping>  
  30.         <servlet-name>KtorServlet</servlet-name>  
  31.         <url-pattern>/</url-pattern>  
  32.     </servlet-mapping>  
  33.   
  34. </web-app>  
src/main/webapp/WEB-INF/appengine-web.xml
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <appengine-web-app xmlns="http://appengine.google.com/ns/1.0">  
  3.     <threadsafe>true</threadsafe>  
  4.     <runtime>java8</runtime>  
  5. </appengine-web-app>  

5. ローカルで実行する

  1. > ./gradlew appengineRun  
  2.     
  3. // 止めるとき  
  4. > ./gradlew appengineStop  

6. デプロイする

  1. > ./gradlew appengineDeploy  



参考

0 件のコメント:

コメントを投稿