From 90ebb1ed84cf22b11f30aff2dd81124ced1ae457 Mon Sep 17 00:00:00 2001
From: Shane <shane@axiomdatascience.com>
Date: Wed, 09 Mar 2016 18:23:34 +0800
Subject: [PATCH] Use WAR/Tomcat, support plugins, document setting memory

---
 Dockerfile                   |   33 +++++++++++++++++++++++----------
 .gitignore                   |    1 +
 resources/plugins/README.txt |    2 ++
 README.md                    |   22 +++++++++++++++++++++-
 4 files changed, 47 insertions(+), 11 deletions(-)

diff --git a/.gitignore b/.gitignore
index 51a5941..f5017bf 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1,3 @@
 resources/geoserver.zip
+resources/plugins/*.zip
 .idea
diff --git a/Dockerfile b/Dockerfile
index 9c8243b..7c16a5f 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -16,19 +16,32 @@
 
 #-------------Application Specific Stuff ----------------------------------------------------
 
-RUN apt-get -y install unzip openjdk-7-jre-headless openjdk-7-jre
+EXPOSE 8080
+
+ENV GS_VERSION 2.6.1
+ENV GEOSERVER_DATA_DIR /opt/geoserver/data_dir
 
 ADD resources /tmp/resources
 
-# A little logic that will fetch the geoserver zip file if it
-# is not available locally in the resources dir and
+# A little logic that will fetch the geoserver war zip file if it
+# is not available locally in the resources dir
 RUN if [ ! -f /tmp/resources/geoserver.zip ]; then \
-    wget -c http://downloads.sourceforge.net/project/geoserver/GeoServer/2.6.1/geoserver-2.6.1-bin.zip -O /tmp/resources/geoserver.zip; \
+      wget -c http://downloads.sourceforge.net/project/geoserver/GeoServer/${GS_VERSION}/geoserver-${GS_VERSION}-war.zip \
+	-O /tmp/resources/geoserver.zip; \
     fi; \
-    unzip /tmp/resources/geoserver.zip -d /opt && mv -v /opt/geoserver* /opt/geoserver
-ENV GEOSERVER_HOME /opt/geoserver
-ENV JAVA_HOME /usr/
+    unzip /tmp/resources/geoserver.zip -d /tmp/geoserver \
+    && mv /tmp/geoserver/geoserver.war /usr/local/tomcat/webapps/geoserver.war \
+    && unzip /usr/local/tomcat/webapps/geoserver.war -d /usr/local/tomcat/webapps/geoserver \
+    && rm -rf /tmp/geoserver
 
-#ENTRYPOINT "/opt/geoserver/bin/startup.sh"
-CMD "/opt/geoserver/bin/startup.sh"
-EXPOSE 8080
+# Install any plugin zip files in resources/plugins
+RUN if ls /tmp/resources/plugins/*.zip > /dev/null 2>&1; then \
+      for p in /tmp/resources/plugins/*.zip; do \
+        unzip $p -d /tmp/gs_plugin \
+        && mv /tmp/gs_plugin/*.jar /usr/local/tomcat/webapps/geoserver/WEB-INF/lib/ \
+        && rm -rf /tmp/gs_plugin; \
+      done; \
+    fi
+
+# Delete resources after installation
+RUN rm -rf /tmp/resources
diff --git a/README.md b/README.md
index c340570..102d19a 100644
--- a/README.md
+++ b/README.md
@@ -40,6 +40,13 @@
 docker build -t kartoza/postgis .
 ```
 
+### Building with plugins
+
+To build a GeoServer image with plugins (e.g. SQL Server plugin, Excel output plugin),
+download the plugin zip files from the GeoServer download page and put them in
+`resources/plugins` before building. You should also download the matching version
+GeoServer WAR zip file to `resources/geoserver.zip`.
+
 ## Run
 
 You probably want to also have postgis running too. To create a running 
@@ -76,10 +83,23 @@
 docker run -d -v $HOME/geoserver_data:/opt/geoserver/data_dir kartoza/geserver
 ```
 
-You need to ensure the ``geoserver_data`` directory has sufficinet permissions
+You need to ensure the ``geoserver_data`` directory has sufficient permissions
 for the docker process to read / write it.
 
+## Setting Tomcat properties
 
+To set Tomcat properties such as maximum heap memory size, create a `setenv.sh` file such as:
+
+```shell
+JAVA_OPTS="$JAVA_OPTS -Xmx1536M -XX:MaxPermSize=756M"
+JAVA_OPTS="$JAVA_OPTS -Djava.awt.headless=true -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled"
+```
+
+Then pass the `setenv.sh` file as a volume at `/usr/local/tomcat/bin/setenv.sh` when running:
+
+```shell
+docker run -d -v $HOME/setenv.sh:/usr/local/tomcat/bin/setenv.sh kartoza/geserver
+```
 
 ## Credits
 
diff --git a/resources/plugins/README.txt b/resources/plugins/README.txt
new file mode 100644
index 0000000..aa8b33c
--- /dev/null
+++ b/resources/plugins/README.txt
@@ -0,0 +1,2 @@
+Download plugin zips and place them here when building to include them in
+the container's GeoServer deployment.

--
Gitblit v0.0.0-SNAPSHOT