(快速參考)

20 部署

版本 6.2.0

20 部署

Grails 應用程式可以使用多種方式部署,每種方式都有其優缺點。

20.1 獨立

"./gradlew bootRun"

您現在應該非常熟悉此方法,因為這是開發階段執行應用程式最常見的方法。會啟動一個嵌入式 Tomcat 伺服器,從開發來源載入 Web 應用程式,因此它可以擷取應用程式檔案的任何變更。

您可以使用下列方式在生產環境中執行應用程式

./gradlew bootRun -Dgrails.env=prod

您可以使用 bootRun Gradle 工作來執行應用程式。下一個指令使用 Gradle Wrapper

./gradlew bootRun

您可以指定提供 grails.env 系統屬性的環境。

./gradlew -Dgrails.env=prod bootRun

可執行 WAR 或 JAR 檔案

在 Grails 3.0 或以上版本中部署的另一種方式是使用對可執行 JAR 或 WAR 檔案的新支援。若要建立可執行檔案,請執行 grails package

grails package

或者,您可以使用 assemble Gradle 任務。

./gradlew assemble

然後,您可以使用 Java 安裝來執行 WAR 檔案或 JAR

java -Dgrails.env=prod -jar build/libs/mywar-0.1.war    (or .jar)

TAR/ZIP 發行

注意:TAR/ZIP 發行組裝已從 Grails 3.1 中移除。

20.2 容器部署(例如 Tomcat)

Grails 應用程式可以部署到 Servlet 容器或應用程式伺服器。

WAR 檔案

在生產環境中部署 Grails 應用程式的常見方法是透過 WAR 檔案部署到現有的 Servlet 容器。容器允許多個應用程式在同一個埠上部署,但路徑不同。

建立 WAR 檔案就像執行 war 指令一樣簡單

grails war

這將產生一個 WAR 檔案,可以部署到容器中的 build/libs 目錄。

請注意,Grails 預設會在 WAR 檔案中包含一個 Tomcat 的可嵌入版本,以便它可以執行(請參閱前一節),如果您部署到不同版本的 Tomcat,這可能會造成問題。如果您不打算使用嵌入式容器,則應移除 Tomcat 相依性,或在 build.gradle 中將範圍變更為 testImplementation,然後再部署到您的生產容器

testImplementation "org.springframework.boot:spring-boot-starter-tomcat"

應用程式伺服器

Grails 架構要求執行時期容器支援 Servlet 3.0 以上版本。預設情況下,Grails 架構應用程式會與一個可嵌入的 Tomcat 捆綁在一起,並且測試主要使用 Tomcat 進行。任何符合最低要求的 Servlet 容器都應該能夠執行 Grails 架構應用程式,但對於特定容器的錯誤或設定,可能需要一些解決方法。

20.3 部署設定任務

設定獨立部署的 HTTPS 和 SSL 憑證

若要設定 SSL 憑證並在 HTTPS 埠上監聽(而不是 HTTP),請將下列屬性新增到 application.yml

server:
    port: 8443                                             # The port to listen on
    ssl:
        enabled: true                                      # Activate HTTPS mode on the server port
        key-store: <the-location-of-your-keystore>         # e.g. /etc/tomcat7/keystore/tomcat.keystore
        key-store-password: <your-key-store-password>      # e.g. changeit
        key-alias: <your-key-alias>                        # e.g. tomcat
        key-password: <usually-the-same-as-your-key-store-password>

這些設定會控制生產部署的嵌入式 Tomcat 容器。或者,可以在命令列中指定這些屬性。範例:-Dserver.ssl.enabled=true -Dserver.ssl.key-store=/path/to/keystore

不支援透過應用程式屬性設定 HTTP 和 HTTPS 連接器。如果您想要同時擁有這兩個連接器,則需要以程式設計方式設定其中一個。(可以在下列操作指南中找到更多相關資訊。)

還有其他相關設定。進一步參考