You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@james.apache.org by bt...@apache.org on 2021/06/05 03:04:31 UTC

[james-project] 04/11: JAMES-3261 Package the JPA server docker image with JIB

This is an automated email from the ASF dual-hosted git repository.

btellier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit 1180ca66484ff3d3555b08408eb7a7661aeda7b2
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Sat May 29 13:52:57 2021 +0700

    JAMES-3261 Package the JPA server docker image with JIB
---
 dockerfiles/run/guice/jpa/Dockerfile               |  50 ---------
 dockerfiles/run/guice/jpa/destination/run_james.sh |  10 --
 server/container/guice/jpa-guice/README.adoc       |  43 +++++++-
 server/container/guice/jpa-guice/pom.xml           | 114 +++++++++++++++++++++
 .../jpa-guice/src/main}/extensions-jars/README.md  |   2 +-
 .../guice/jpa-guice/src/main}/glowroot/admin.json  |   0
 .../jpa-guice/src/main}/glowroot/plugins/imap.json |   0
 .../jpa-guice/src/main}/glowroot/plugins/jmap.json |   0
 .../main}/glowroot/plugins/mailboxListener.json    |   0
 .../jpa-guice/src/main}/glowroot/plugins/smtp.json |   0
 .../src/main}/glowroot/plugins/spooler.json        |   0
 .../jpa-guice/src/main}/glowroot/plugins/task.json |   0
 .../guice/jpa-guice/src/main/scripts/james-cli     |   3 +
 13 files changed, 160 insertions(+), 62 deletions(-)

diff --git a/dockerfiles/run/guice/jpa/Dockerfile b/dockerfiles/run/guice/jpa/Dockerfile
deleted file mode 100644
index 32fe284..0000000
--- a/dockerfiles/run/guice/jpa/Dockerfile
+++ /dev/null
@@ -1,50 +0,0 @@
-# Run James
-#
-# VERSION	1.0
-
-FROM adoptopenjdk:11-jre-hotspot
-
-# Ports that are used
-#
-# 25   SMTP without authentication
-# 110  POP3
-# 143  IMAP with startTLS enabled
-# 465  SMTP with authentication and socketTLS enabled
-# 587  SMTP with authentication and startTLS enabled
-# 993  IMAP with socketTLS enabled
-# 8000 Web Admin interface (unsecured: expose at your own risks)
-
-EXPOSE 25 110 143 465 587 993 4000 8000
-
-WORKDIR /root
-RUN apt-get update && apt-get install -y unzip
-
-# Get data we need to run James : build results and configuration
-ADD destination/james-server-jpa-guice.zip /root
-RUN unzip james-server-jpa-guice.zip && \
-   cp -r /root/james-server-jpa-guice/* /root && \
-   rm james-server-jpa-guice.zip && \
-   rm -r james-server-jpa-guice
-ADD destination/james-server-cli.jar /root/james-cli.jar
-ADD destination/james-server-cli.lib /root/james-server-cli.lib
-ADD destination/glowroot/plugins /root/glowroot/plugins
-ADD destination/glowroot/glowroot.jar /root/glowroot/glowroot.jar
-ADD destination/glowroot/lib/glowroot-embedded-collector.jar /root/glowroot/lib/glowroot-embedded-collector.jar
-ADD destination/glowroot/lib/glowroot-logging-logstash.jar /root/glowroot/lib/glowroot-logging-logstash.jar
-ADD destination/glowroot/admin.json /root/glowroot/admin.json
-ADD destination/run_james.sh /root/run_james.sh
-
-VOLUME /logs
-VOLUME /root/conf
-VOLUME /root/glowroot/plugins
-VOLUME /root/glowroot/data
-# Data for ActiveMQ mailQueue
-VOLUME /root/var
-# Data for derby database
-VOLUME /var/store
-
-ENV PATH="$PATH:/root/glowroot/lib" \
-    JVM_OPTIONS="" \
-    GLOWROOT_ACTIVATED="false"
-
-ENTRYPOINT ./run_james.sh
diff --git a/dockerfiles/run/guice/jpa/destination/run_james.sh b/dockerfiles/run/guice/jpa/destination/run_james.sh
deleted file mode 100755
index ec4cc1a..0000000
--- a/dockerfiles/run/guice/jpa/destination/run_james.sh
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/usr/bin/env bash
-if [ "$GLOWROOT_ACTIVATED" == "true" ]; then
-    GLOWROOT_OPTIONS=-javaagent:/root/glowroot/glowroot.jar
-fi
-
-java -Dworking.directory=. \
-  $GLOWROOT_OPTIONS \
-  $JVM_OPTIONS \
-  -Dlogback.configurationFile=conf/logback.xml -jar james-server-jpa-guice.jar
-
diff --git a/server/container/guice/jpa-guice/README.adoc b/server/container/guice/jpa-guice/README.adoc
index 091a607..5f9b170 100644
--- a/server/container/guice/jpa-guice/README.adoc
+++ b/server/container/guice/jpa-guice/README.adoc
@@ -28,4 +28,45 @@ Once everything is set up, you just have to run the jar with:
 $ java -javaagent:james-server-jpa-guice.lib/openjpa-3.1.2.jar -Dworking.directory=. -Dlogback.configurationFile=conf/logback.xml -jar james-server-jpa-guice.jar
 ----
 
-Note that binding ports below 1024 requires administrative rights.
\ No newline at end of file
+Note that binding ports below 1024 requires administrative rights.
+
+== Docker distribution
+
+To import the image locally:
+
+[source]
+----
+docker image load -i target/jib-image.tar
+----
+
+Then run it:
+
+[source]
+----
+docker run apache/james:jpa-latest
+----
+
+Use the [JAVA_TOOL_OPTIONS environment option](https://github.com/GoogleContainerTools/jib/blob/master/docs/faq.md#jvm-flags)
+to pass extra JVM flags. For instance:
+
+[source]
+----
+docker run -e "JAVA_TOOL_OPTIONS=-Xmx500m -Xms500m" apache/james:jpa-latest
+----
+
+[Glowroot APM](https://glowroot.org/) is packaged as part of the docker distribution to easily enable valuable performances insights.
+Disabled by default, its java agent can easily be enabled:
+
+
+[source]
+----
+docker run -e "JAVA_TOOL_OPTIONS=-javaagent:/root/glowroot.jar" apache/james:jpa-latest
+----
+
+The [CLI](https://james.apache.org/server/manage-cli.html) can easily be used:
+
+
+[source]
+----
+docker exec CONTAINER-ID james-cli ListDomains
+----
\ No newline at end of file
diff --git a/server/container/guice/jpa-guice/pom.xml b/server/container/guice/jpa-guice/pom.xml
index a1951f7..4a7f09f 100644
--- a/server/container/guice/jpa-guice/pom.xml
+++ b/server/container/guice/jpa-guice/pom.xml
@@ -59,6 +59,11 @@
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
+            <artifactId>james-server-cli</artifactId>
+            <scope>runtime</scope>
+        </dependency>
+        <dependency>
+            <groupId>${james.groupId}</groupId>
             <artifactId>james-server-data-jpa</artifactId>
         </dependency>
         <dependency>
@@ -206,6 +211,115 @@
     <build>
         <plugins>
             <plugin>
+                <groupId>com.googlecode.maven-download-plugin</groupId>
+                <artifactId>download-maven-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>install-glowroot</id>
+                        <goals>
+                            <goal>wget</goal>
+                        </goals>
+                        <phase>package</phase>
+                        <configuration>
+                            <url>https://github.com/glowroot/glowroot/releases/download/v0.13.4/glowroot-0.13.4-dist.zip</url>
+                            <unpack>true</unpack>
+                            <outputDirectory>${project.build.directory}</outputDirectory>
+                            <md5>93d472281a67ab8404033a88280c23c9</md5>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-resources-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>copy-glowroot-resources</id>
+                        <goals>
+                            <goal>copy-resources</goal>
+                        </goals>
+                        <phase>package</phase>
+                        <configuration>
+                            <outputDirectory>${basedir}/target/glowroot</outputDirectory>
+                            <resources>
+                                <resource>
+                                    <directory>src/main/glowroot</directory>
+                                    <filtering>true</filtering>
+                                </resource>
+                            </resources>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>com.google.cloud.tools</groupId>
+                <artifactId>jib-maven-plugin</artifactId>
+                <configuration>
+                    <from>
+                        <image>adoptopenjdk:11-jdk-hotspot</image>
+                    </from>
+                    <to>
+                        <image>apache/james</image>
+                        <tags>
+                            <tag>jpa-latest</tag>
+                        </tags>
+                    </to>
+                    <container>
+                        <mainClass>org.apache.james.JPAJamesServerMain</mainClass>
+                        <ports>
+                            <port>80</port> <!-- JMAP -->
+                            <port>143</port> <!-- IMAP -->
+                            <port>993</port> <!-- IMAPS -->
+                            <port>25</port> <!-- SMTP -->
+                            <port>465</port> <!-- SMTP + STARTTLS -->
+                            <port>587</port> <!-- SMTPS -->
+                            <port>4000</port> <!-- GLOWROOT, if activated -->
+                            <port>8000</port> <!-- WEBADMIN -->
+                        </ports>
+                        <appRoot>/root</appRoot>
+                        <jvmFlags>
+                            <jvmFlag>-Dlogback.configurationFile=/root/conf/logback.xml</jvmFlag>
+                            <jvmFlag>-Dworking.directory=/root/</jvmFlag>
+                        </jvmFlags>
+                        <creationTime>USE_CURRENT_TIMESTAMP</creationTime>
+                    </container>
+                    <extraDirectories>
+                        <paths>
+                            <path>
+                                <from>sample-configuration</from>
+                                <into>/root/conf</into>
+                            </path>
+                            <path>
+                                <from>src/main/scripts</from>
+                                <into>/usr/bin</into>
+                            </path>
+                            <path>
+                                <from>target/glowroot</from>
+                                <into>/root</into>
+                            </path>
+                            <path>
+                                <from>src/main/extensions-jars</from>
+                                <into>/root/extensions-jars</into>
+                            </path>
+                        </paths>
+                        <permissions>
+                            <permission>
+                                <file>/usr/bin/james-cli</file>
+                                <mode>755</mode> <!-- Read/write/execute for owner, read/execute for group/other -->
+                            </permission>
+                        </permissions>
+                    </extraDirectories>
+                </configuration>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>buildTar</goal>
+                        </goals>
+                        <phase>package</phase>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-surefire-plugin</artifactId>
                 <configuration>
diff --git a/dockerfiles/run/guice/jpa/destination/extensions-jars/README.md b/server/container/guice/jpa-guice/src/main/extensions-jars/README.md
similarity index 74%
rename from dockerfiles/run/guice/jpa/destination/extensions-jars/README.md
rename to server/container/guice/jpa-guice/src/main/extensions-jars/README.md
index 2cea759..dab5c40 100644
--- a/dockerfiles/run/guice/jpa/destination/extensions-jars/README.md
+++ b/server/container/guice/jpa-guice/src/main/extensions-jars/README.md
@@ -2,4 +2,4 @@
 
 The jar in this folder will be added to JAMES classpath when mounted under /root/extensions-jars inside the running container.
 
-You can use it to add you customs Mailets/Matchers.
+You can use it to add your custom Mailets/Matchers.
diff --git a/dockerfiles/run/guice/jpa/destination/glowroot/admin.json b/server/container/guice/jpa-guice/src/main/glowroot/admin.json
similarity index 100%
rename from dockerfiles/run/guice/jpa/destination/glowroot/admin.json
rename to server/container/guice/jpa-guice/src/main/glowroot/admin.json
diff --git a/dockerfiles/run/guice/jpa/destination/glowroot/plugins/imap.json b/server/container/guice/jpa-guice/src/main/glowroot/plugins/imap.json
similarity index 100%
rename from dockerfiles/run/guice/jpa/destination/glowroot/plugins/imap.json
rename to server/container/guice/jpa-guice/src/main/glowroot/plugins/imap.json
diff --git a/dockerfiles/run/guice/jpa/destination/glowroot/plugins/jmap.json b/server/container/guice/jpa-guice/src/main/glowroot/plugins/jmap.json
similarity index 100%
rename from dockerfiles/run/guice/jpa/destination/glowroot/plugins/jmap.json
rename to server/container/guice/jpa-guice/src/main/glowroot/plugins/jmap.json
diff --git a/dockerfiles/run/guice/jpa/destination/glowroot/plugins/mailboxListener.json b/server/container/guice/jpa-guice/src/main/glowroot/plugins/mailboxListener.json
similarity index 100%
rename from dockerfiles/run/guice/jpa/destination/glowroot/plugins/mailboxListener.json
rename to server/container/guice/jpa-guice/src/main/glowroot/plugins/mailboxListener.json
diff --git a/dockerfiles/run/guice/jpa/destination/glowroot/plugins/smtp.json b/server/container/guice/jpa-guice/src/main/glowroot/plugins/smtp.json
similarity index 100%
rename from dockerfiles/run/guice/jpa/destination/glowroot/plugins/smtp.json
rename to server/container/guice/jpa-guice/src/main/glowroot/plugins/smtp.json
diff --git a/dockerfiles/run/guice/jpa/destination/glowroot/plugins/spooler.json b/server/container/guice/jpa-guice/src/main/glowroot/plugins/spooler.json
similarity index 100%
rename from dockerfiles/run/guice/jpa/destination/glowroot/plugins/spooler.json
rename to server/container/guice/jpa-guice/src/main/glowroot/plugins/spooler.json
diff --git a/dockerfiles/run/guice/jpa/destination/glowroot/plugins/task.json b/server/container/guice/jpa-guice/src/main/glowroot/plugins/task.json
similarity index 100%
rename from dockerfiles/run/guice/jpa/destination/glowroot/plugins/task.json
rename to server/container/guice/jpa-guice/src/main/glowroot/plugins/task.json
diff --git a/server/container/guice/jpa-guice/src/main/scripts/james-cli b/server/container/guice/jpa-guice/src/main/scripts/james-cli
new file mode 100755
index 0000000..19a73b6
--- /dev/null
+++ b/server/container/guice/jpa-guice/src/main/scripts/james-cli
@@ -0,0 +1,3 @@
+#!/bin/bash
+
+java -cp /root/resources:/root/classes:/root/libs/* org.apache.james.cli.ServerCmd "$@"
\ No newline at end of file

---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@james.apache.org
For additional commands, e-mail: notifications-help@james.apache.org