21 Deployment - Reference Documentation
Authors: Graeme Rocher, Peter Ledbrook, Marc Palmer, Jeff Brown, Luke Daley, Burt Beckwith, Lari Hotari
Version: 3.0.17
Table of Contents
21 Deployment
Grails applications can be deployed in a number of ways, each of which has its pros and cons.21.1 Standalone
"grails run-app"
You should be very familiar with this approach by now, since it is the most common method of running an application during the development phase. An embedded Tomcat server is launched that loads the web application from the development sources, thus allowing it to pick up any changes to application files.You can also deploy to production this way using:grails prod run-app
Runnable WAR or JAR file
Another way to deploy in Grails 3.0 or above is to use the new support for runnable JAR or WAR files. To create runnable archives, rungrails package
:grails package
java -Dgrails.env=prod -jar build/libs/mywar-0.1.war (or .jar)
A TAR/ZIP distribution
The package will also produce a TAR and a ZIP file in thebuild/distributions
directory. If you extract these archives (typically the TAR on Unix systems and the ZIP on Windows) you can then run bash file which is the name of your application located in the bin
directory.For example:$ grails create-app helloworld $ cd helloworld $ grails package $ tar -xvf build/distributions/helloworld-0.1.tar $ export HELLOWORLD_OPTS=-Dgrails.env=prod $ helloworld-0.1/bin/helloworld Grails application running at http://localhost:8080
Note: TAR/ZIP distribution assembly has been removed from Grails 3.1.
21.2 Container Deployment (e.g. Tomcat)
Grails apps can be deployed to a Servlet Container or Application Server.WAR file
A common approach to Grails application deployment in production is to deploy to an existing Servlet container via a WAR file. Containers allow multiple applications to be deployed on the same port with different paths.Creating a WAR file is as simple as executing the war command:grails war
build/libs
directory.Note that by default Grails will include an embeddable version of Tomcat inside the WAR file so that it is runnable (see the previous section), this can cause problems if you deploy to a different version of Tomcat. If you don't intend to use the embedded container then you should change the scope of the Tomcat dependencies to provided
prior to deploying to your production container in build.gradle
:provided "org.springframework.boot:spring-boot-starter-tomcat"
Application servers
Ideally you should be able to simply drop a WAR file created by Grails into any application server and it should work straight away. However, things are rarely ever this simple. The Grails website contains a list of application servers that Grails has been tested with, along with any additional steps required to get a Grails WAR file working.21.3 Deployment Configuration Tasks
Setting up HTTPS and SSL certificates for standalone deployment
To configure an SSL certificate and to listen on an HTTPS port instead of HTTP, add properties like these toapplication.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>
-Dserver.ssl.enabled=true -Dserver.ssl.key-store=/path/to/keystore
.Configuration of both an HTTP and HTTPS connector via application properties is not supported. If you want to have both, then you'll need to configure one of them programmatically. (More information on how to do this can be found in the how-to guide below.)There are other relevant settings. Further reference: