In a previous post, I showed you how to deploy to Tomcat from Octopus Deploy by extracting a WAR file into the Tomcat
webapps folder. In addition to file copies, Tomcat also supports deploying WAR files through the manager application that is bundled with Tomcat distributions.
In this post, I’ll show you how to deploy WAR files in Tomcat via the Tomcat Manager.
Before we can start uploading WAR files, we need to do some initial configuration.
We need to define the credentials for interacting with the manager. The manager distinguishes between two types of users, those who use the web interface through a browser, and those who will use the API.
To define these users, we need to edit the
Browser based users are assigned to the
manager-gui role, while API users are assigned to the
<user username="manager" password="s3cret" roles="manager-gui"/> <user username="deployer" password="s3cret" roles="manager-script"/>
Define maximum file upload size
By default you can only upload files of around 50MB through the manager. This is often not large enough for big packages, so you can set a higher limit by editing the
webapps/manager/WEB-INF/web.xml file. Inside that file you will find a
<multipart-config> element whose child elements define the maximum file upload size.
Here I have set the maximum file upload size to 250MB:
<multipart-config> <max-file-size>262144000</max-file-size> <max-request-size>262144000</max-request-size> <file-size-threshold>0</file-size-threshold> </multipart-config>
Uploading the WAR file
You can then extract the WAR file onto the target server using the instructions at Creating a Octopus Deploy project.
But there is one important difference this time. Instead of extracting the WAR file to the
webapps folder directly, we’ll extract it to a temporary location. In this case I have extracted the file to the
To deploy the file, we need to do a HTTP PUT to the
http://localhost:8080/manager/text/deploy URL, with the WAR file to be deployed suppiled in the body of the request. The
path query parameter defines the context path that will be assigned to the application. Note that it is important to have the leading slash in the path name.
The PowerShell command below uses curl to make the HTTP request:
& "C:\curl.exe" -u deployer:s3cret -X PUT -F "file=@C:\staging\demo.war" http://localhost:8080/manager/text/deploy?path=/demo
Confirming the deployment
Open http://localhost:8080/manager and supply the credentials for the manager user we created earlier. You will see the application deployed under the
These procedures are being developed as a proof of concept for what will eventually be migrated into steps provided directly in Octopus Deploy.
If you have any questions about this process, please leave a comment. And if there are some Java features that you would like to see Octopus Deploy support in future, join the discussion on the Java RFC post.