Created
October 11, 2016 21:35
-
-
Save anonymous/62ca1bed63c16d4b15b5970fe6ed49c7 to your computer and use it in GitHub Desktop.
Add Plone to Official Images
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff --git a/plone_4.3.10/Dockerfile b/plone_4.3.10/Dockerfile | |
new file mode 100644 | |
index 0000000..42d83d4 | |
--- /dev/null | |
+++ b/plone_4.3.10/Dockerfile | |
@@ -0,0 +1,49 @@ | |
+FROM python:2.7-slim | |
+MAINTAINER "Plone Community" http://community.plone.org | |
+ | |
+RUN useradd --system -U -u 500 plone \ | |
+ && mkdir -p /plone /data/filestorage /data/blobstorage \ | |
+ && chown -R plone:plone /plone /data | |
+ | |
+ENV PLONE_MAJOR=4.3 | |
+ENV PLONE_VERSION=4.3.10 | |
+ENV PLONE_MD5=df5c3b1affe8547cc7668318e93f78e2 | |
+ | |
+RUN buildDeps="curl sudo python-setuptools python-dev build-essential libssl-dev libxml2-dev libxslt1-dev libbz2-dev libjpeg62-turbo-dev" \ | |
+ && runDeps="libxml2 libxslt1.1 libjpeg62 rsync" \ | |
+ && apt-get update \ | |
+ && apt-get install -y --no-install-recommends $buildDeps \ | |
+ && curl -o Plone.tgz -SL https://launchpad.net/plone/$PLONE_MAJOR/$PLONE_VERSION/+download/Plone-$PLONE_VERSION-UnifiedInstaller.tgz \ | |
+ && echo "$PLONE_MD5 Plone.tgz" | md5sum -c - \ | |
+ && tar -xzf Plone.tgz \ | |
+ && ./Plone-$PLONE_VERSION-UnifiedInstaller/install.sh \ | |
+ --password=admin \ | |
+ --daemon-user=plone \ | |
+ --owner=plone \ | |
+ --group=plone \ | |
+ --target=/plone \ | |
+ --instance=instance \ | |
+ --var=/data \ | |
+ none \ | |
+ && cd /plone/instance \ | |
+ && sed -i 's/parts =/parts =\n zeoserver/g' buildout.cfg \ | |
+ && echo '\n[zeoserver]\n<= zeoserver_base\nrecipe = plone.recipe.zeoserver' >> buildout.cfg \ | |
+ && sudo -u plone bin/buildout \ | |
+ && chown -R plone:plone /plone /data \ | |
+ && rm -rf /Plone* \ | |
+ && SUDO_FORCE_REMOVE=yes apt-get purge -y --auto-remove $buildDeps \ | |
+ && apt-get install -y --no-install-recommends $runDeps \ | |
+ && rm -rf /var/lib/apt/lists/* \ | |
+ && rm -rf /plone/buildout-cache/downloads/* \ | |
+ && find /plone \( -type f -a -name '*.pyc' -o -name '*.pyo' \) -exec rm -rf '{}' + | |
+ | |
+VOLUME /data | |
+ | |
+COPY docker-initialize.py docker-entrypoint.sh / | |
+ | |
+EXPOSE 8080 | |
+USER plone | |
+WORKDIR /plone/instance | |
+ | |
+ENTRYPOINT ["/docker-entrypoint.sh"] | |
+CMD ["start"] | |
diff --git a/plone_4.3.10/docker-entrypoint.sh b/plone_4.3.10/docker-entrypoint.sh | |
new file mode 100755 | |
index 0000000..5644bdb | |
--- /dev/null | |
+++ b/plone_4.3.10/docker-entrypoint.sh | |
@@ -0,0 +1,55 @@ | |
+#!/bin/bash | |
+set -e | |
+ | |
+COMMANDS="debug help logtail show stop adduser fg kill quit run wait console foreground logreopen reload shell status" | |
+START="start restart zeoserver" | |
+CMD="bin/instance" | |
+ | |
+python /docker-initialize.py | |
+ | |
+if [ -e "custom.cfg" ]; then | |
+ if [ ! -e "bin/develop" ]; then | |
+ bin/buildout -c custom.cfg | |
+ fi | |
+fi | |
+ | |
+if [[ "$1" == "zeo"* ]]; then | |
+ CMD="bin/zeoserver" | |
+fi | |
+ | |
+if [ -z "$HEALTH_CHECK_TIMEOUT" ]; then | |
+ HEALTH_CHECK_TIMEOUT=1 | |
+fi | |
+ | |
+if [ -z "$HEALTH_CHECK_INTERVAL" ]; then | |
+ HEALTH_CHECK_INTERVAL=1 | |
+fi | |
+ | |
+if [[ $START == *"$1"* ]]; then | |
+ _stop() { | |
+ $CMD stop | |
+ kill -TERM $child 2>/dev/null | |
+ } | |
+ | |
+ trap _stop SIGTERM SIGINT | |
+ $CMD start | |
+ $CMD logtail & | |
+ child=$! | |
+ | |
+ pid=`$CMD status | sed 's/[^0-9]*//g'` | |
+ if [ ! -z "$pid" ]; then | |
+ echo "Application running on pid=$pid" | |
+ sleep "$HEALTH_CHECK_TIMEOUT" | |
+ while kill -0 "$pid" 2> /dev/null; do | |
+ sleep "$HEALTH_CHECK_INTERVAL" | |
+ done | |
+ else | |
+ echo "Application didn't start normally. Shutting down!" | |
+ _stop | |
+ fi | |
+else | |
+ if [[ $COMMANDS == *"$1"* ]]; then | |
+ exec bin/instance "$@" | |
+ fi | |
+ exec "$@" | |
+fi | |
diff --git a/plone_4.3.10/docker-initialize.py b/plone_4.3.10/docker-initialize.py | |
new file mode 100755 | |
index 0000000..087bde9 | |
--- /dev/null | |
+++ b/plone_4.3.10/docker-initialize.py | |
@@ -0,0 +1,178 @@ | |
+#!/plone/instance/bin/python | |
+ | |
+import re | |
+import os | |
+import warnings | |
+warnings.simplefilter('always', DeprecationWarning) | |
+ | |
+class Environment(object): | |
+ """ Configure container via environment variables | |
+ """ | |
+ def __init__(self, env=os.environ, | |
+ zope_conf="/plone/instance/parts/instance/etc/zope.conf", | |
+ custom_conf="/plone/instance/custom.cfg", | |
+ zeopack_conf="/plone/instance/bin/zeopack", | |
+ zeoserver_conf="/plone/instance/parts/zeoserver/etc/zeo.conf" | |
+ ): | |
+ self.env = env | |
+ self.zope_conf = zope_conf | |
+ self.custom_conf = custom_conf | |
+ self.zeopack_conf = zeopack_conf | |
+ self.zeoserver_conf = zeoserver_conf | |
+ | |
+ def zeoclient(self): | |
+ """ ZEO Client | |
+ """ | |
+ server = self.env.get("ZEO_ADDRESS", None) | |
+ if not server: | |
+ return | |
+ | |
+ config = "" | |
+ with open(self.zope_conf, "r") as cfile: | |
+ config = cfile.read() | |
+ | |
+ # Already initialized | |
+ if "<blobstorage>" not in config: | |
+ return | |
+ | |
+ read_only = self.env.get("ZEO_READ_ONLY", "false") | |
+ zeo_ro_fallback = self.env.get("ZEO_CLIENT_READ_ONLY_FALLBACK", "false") | |
+ shared_blob_dir=self.env.get("ZEO_SHARED_BLOB_DIR", "off") | |
+ zeo_storage=self.env.get("ZEO_STORAGE", "1") | |
+ zeo_client_cache_size=self.env.get("ZEO_CLIENT_CACHE_SIZE", "128MB") | |
+ zeo_conf = ZEO_TEMPLATE.format( | |
+ zeo_address=server, | |
+ read_only=read_only, | |
+ zeo_client_read_only_fallback=zeo_ro_fallback, | |
+ shared_blob_dir=shared_blob_dir, | |
+ zeo_storage=zeo_storage, | |
+ zeo_client_cache_size=zeo_client_cache_size | |
+ ) | |
+ | |
+ pattern = re.compile(r"<blobstorage>.+</blobstorage>", re.DOTALL) | |
+ config = re.sub(pattern, zeo_conf, config) | |
+ | |
+ with open(self.zope_conf, "w") as cfile: | |
+ cfile.write(config) | |
+ | |
+ def zeopack(self): | |
+ """ ZEO Pack | |
+ """ | |
+ server = self.env.get("ZEO_ADDRESS", None) | |
+ if not server: | |
+ return | |
+ | |
+ if ":" in server: | |
+ host, port = server.split(":") | |
+ else: | |
+ host, port = (server, "8100") | |
+ | |
+ with open(self.zeopack_conf, 'r') as cfile: | |
+ text = cfile.read() | |
+ text = text.replace('address = "8100"', 'address = "%s"' % server) | |
+ text = text.replace('host = "127.0.0.1"', 'host = "%s"' % host) | |
+ text = text.replace('port = "8100"', 'port = "%s"' % port) | |
+ | |
+ with open(self.zeopack_conf, 'w') as cfile: | |
+ cfile.write(text) | |
+ | |
+ def zeoserver(self): | |
+ """ ZEO Server | |
+ """ | |
+ pack_keep_old = self.env.get("ZEO_PACK_KEEP_OLD", '') | |
+ if pack_keep_old.lower() in ("false", "no", "0", "n", "f"): | |
+ with open(self.zeoserver_conf, 'r') as cfile: | |
+ text = cfile.read() | |
+ if 'pack-keep-old' not in text: | |
+ text = text.replace( | |
+ '</filestorage>', | |
+ ' pack-keep-old false\n</filestorage>' | |
+ ) | |
+ | |
+ with open(self.zeoserver_conf, 'w') as cfile: | |
+ cfile.write(text) | |
+ | |
+ def buildout(self): | |
+ """ Buildout from environment variables | |
+ """ | |
+ # Already configured | |
+ if os.path.exists(self.custom_conf): | |
+ return | |
+ | |
+ eggs = self.env.get("PLONE_ADDONS", | |
+ self.env.get("ADDONS", "")).strip().split() | |
+ if not eggs: | |
+ eggs = self.env.get("BUILDOUT_EGGS", "").strip().split() | |
+ if eggs: | |
+ warnings.warn( | |
+ "BUILDOUT_EGGS is deprecated. Please use " | |
+ "PLONE_ADDONS instead !!!", DeprecationWarning) | |
+ | |
+ zcml = self.env.get("PLONE_ZCML", | |
+ self.env.get("ZCML", "")).strip().split() | |
+ if not zcml: | |
+ zcml = self.env.get("BUILDOUT_ZCML", "").strip().split() | |
+ if zcml: | |
+ warnings.warn( | |
+ "BUILDOUT_ZCML is deprecated. Please use " | |
+ "PLONE_ZCML instead !!!", DeprecationWarning) | |
+ | |
+ develop = self.env.get("PLONE_DEVELOP", | |
+ self.env.get("DEVELOP", "")).strip().split() | |
+ if not develop: | |
+ develop = self.env.get("BUILDOUT_DEVELOP", "").strip().split() | |
+ if develop: | |
+ warnings.warn( | |
+ "BUILDOUT_DEVELOP is deprecated. Please use " | |
+ "PLONE_DEVELOP instead !!!", DeprecationWarning) | |
+ | |
+ if not (eggs or zcml or develop): | |
+ return | |
+ | |
+ buildout = BUILDOUT_TEMPLATE.format( | |
+ eggs="\n\t".join(eggs), | |
+ zcml="\n\t".join(zcml), | |
+ develop="\n\t".join(develop) | |
+ ) | |
+ | |
+ with open(self.custom_conf, 'w') as cfile: | |
+ cfile.write(buildout) | |
+ | |
+ def setup(self, **kwargs): | |
+ self.buildout() | |
+ self.zeoclient() | |
+ self.zeopack() | |
+ self.zeoserver() | |
+ | |
+ __call__ = setup | |
+ | |
+ZEO_TEMPLATE = """ | |
+ <zeoclient> | |
+ read-only {read_only} | |
+ read-only-fallback {zeo_client_read_only_fallback} | |
+ blob-dir /data/blobstorage | |
+ shared-blob-dir {shared_blob_dir} | |
+ server {zeo_address} | |
+ storage {zeo_storage} | |
+ name zeostorage | |
+ var /plone/instance/parts/instance/var | |
+ cache-size {zeo_client_cache_size} | |
+ </zeoclient> | |
+""".strip() | |
+ | |
+BUILDOUT_TEMPLATE = """ | |
+[buildout] | |
+extends = develop.cfg | |
+develop += {develop} | |
+eggs += {eggs} | |
+zcml += {zcml} | |
+""" | |
+ | |
+def initialize(): | |
+ """ Configure Plone instance as ZEO Client | |
+ """ | |
+ environment = Environment() | |
+ environment.setup() | |
+ | |
+if __name__ == "__main__": | |
+ initialize() | |
diff --git a/plone_4.3.7/Dockerfile b/plone_4.3.7/Dockerfile | |
new file mode 100644 | |
index 0000000..d51a337 | |
--- /dev/null | |
+++ b/plone_4.3.7/Dockerfile | |
@@ -0,0 +1,49 @@ | |
+FROM python:2.7-slim | |
+MAINTAINER "Plone Community" http://community.plone.org | |
+ | |
+RUN useradd --system -U -u 500 plone \ | |
+ && mkdir -p /plone /data/filestorage /data/blobstorage \ | |
+ && chown -R plone:plone /plone /data | |
+ | |
+ENV PLONE_MAJOR=4.3 | |
+ENV PLONE_VERSION=4.3.7 | |
+ENV PLONE_MD5=b4ece39a6dda7a72c9084057d8faae4f | |
+ | |
+RUN buildDeps="curl sudo python-setuptools python-dev build-essential libssl-dev libxml2-dev libxslt1-dev libbz2-dev libjpeg62-turbo-dev" \ | |
+ && runDeps="libxml2 libxslt1.1 libjpeg62 rsync" \ | |
+ && apt-get update \ | |
+ && apt-get install -y --no-install-recommends $buildDeps \ | |
+ && curl -o Plone.tgz -SL https://launchpad.net/plone/$PLONE_MAJOR/$PLONE_VERSION/+download/Plone-$PLONE_VERSION-UnifiedInstaller.tgz \ | |
+ && echo "$PLONE_MD5 Plone.tgz" | md5sum -c - \ | |
+ && tar -xzf Plone.tgz \ | |
+ && ./Plone-$PLONE_VERSION-UnifiedInstaller/install.sh \ | |
+ --password=admin \ | |
+ --daemon-user=plone \ | |
+ --owner=plone \ | |
+ --group=plone \ | |
+ --target=/plone \ | |
+ --instance=instance \ | |
+ --var=/data \ | |
+ none \ | |
+ && cd /plone/instance \ | |
+ && sed -i 's/parts =/parts =\n zeoserver/g' buildout.cfg \ | |
+ && echo '\n[zeoserver]\n<= zeoserver_base\nrecipe = plone.recipe.zeoserver' >> buildout.cfg \ | |
+ && sudo -u plone bin/buildout \ | |
+ && chown -R plone:plone /plone /data \ | |
+ && rm -rf /Plone* \ | |
+ && SUDO_FORCE_REMOVE=yes apt-get purge -y --auto-remove $buildDeps \ | |
+ && apt-get install -y --no-install-recommends $runDeps \ | |
+ && rm -rf /var/lib/apt/lists/* \ | |
+ && rm -rf /plone/buildout-cache/downloads/* \ | |
+ && find /plone \( -type f -a -name '*.pyc' -o -name '*.pyo' \) -exec rm -rf '{}' + | |
+ | |
+VOLUME /data | |
+ | |
+COPY docker-initialize.py docker-entrypoint.sh / | |
+ | |
+EXPOSE 8080 | |
+USER plone | |
+WORKDIR /plone/instance | |
+ | |
+ENTRYPOINT ["/docker-entrypoint.sh"] | |
+CMD ["start"] | |
diff --git a/plone_4.3.7/docker-entrypoint.sh b/plone_4.3.7/docker-entrypoint.sh | |
new file mode 100755 | |
index 0000000..5644bdb | |
--- /dev/null | |
+++ b/plone_4.3.7/docker-entrypoint.sh | |
@@ -0,0 +1,55 @@ | |
+#!/bin/bash | |
+set -e | |
+ | |
+COMMANDS="debug help logtail show stop adduser fg kill quit run wait console foreground logreopen reload shell status" | |
+START="start restart zeoserver" | |
+CMD="bin/instance" | |
+ | |
+python /docker-initialize.py | |
+ | |
+if [ -e "custom.cfg" ]; then | |
+ if [ ! -e "bin/develop" ]; then | |
+ bin/buildout -c custom.cfg | |
+ fi | |
+fi | |
+ | |
+if [[ "$1" == "zeo"* ]]; then | |
+ CMD="bin/zeoserver" | |
+fi | |
+ | |
+if [ -z "$HEALTH_CHECK_TIMEOUT" ]; then | |
+ HEALTH_CHECK_TIMEOUT=1 | |
+fi | |
+ | |
+if [ -z "$HEALTH_CHECK_INTERVAL" ]; then | |
+ HEALTH_CHECK_INTERVAL=1 | |
+fi | |
+ | |
+if [[ $START == *"$1"* ]]; then | |
+ _stop() { | |
+ $CMD stop | |
+ kill -TERM $child 2>/dev/null | |
+ } | |
+ | |
+ trap _stop SIGTERM SIGINT | |
+ $CMD start | |
+ $CMD logtail & | |
+ child=$! | |
+ | |
+ pid=`$CMD status | sed 's/[^0-9]*//g'` | |
+ if [ ! -z "$pid" ]; then | |
+ echo "Application running on pid=$pid" | |
+ sleep "$HEALTH_CHECK_TIMEOUT" | |
+ while kill -0 "$pid" 2> /dev/null; do | |
+ sleep "$HEALTH_CHECK_INTERVAL" | |
+ done | |
+ else | |
+ echo "Application didn't start normally. Shutting down!" | |
+ _stop | |
+ fi | |
+else | |
+ if [[ $COMMANDS == *"$1"* ]]; then | |
+ exec bin/instance "$@" | |
+ fi | |
+ exec "$@" | |
+fi | |
diff --git a/plone_4.3.7/docker-initialize.py b/plone_4.3.7/docker-initialize.py | |
new file mode 100755 | |
index 0000000..087bde9 | |
--- /dev/null | |
+++ b/plone_4.3.7/docker-initialize.py | |
@@ -0,0 +1,178 @@ | |
+#!/plone/instance/bin/python | |
+ | |
+import re | |
+import os | |
+import warnings | |
+warnings.simplefilter('always', DeprecationWarning) | |
+ | |
+class Environment(object): | |
+ """ Configure container via environment variables | |
+ """ | |
+ def __init__(self, env=os.environ, | |
+ zope_conf="/plone/instance/parts/instance/etc/zope.conf", | |
+ custom_conf="/plone/instance/custom.cfg", | |
+ zeopack_conf="/plone/instance/bin/zeopack", | |
+ zeoserver_conf="/plone/instance/parts/zeoserver/etc/zeo.conf" | |
+ ): | |
+ self.env = env | |
+ self.zope_conf = zope_conf | |
+ self.custom_conf = custom_conf | |
+ self.zeopack_conf = zeopack_conf | |
+ self.zeoserver_conf = zeoserver_conf | |
+ | |
+ def zeoclient(self): | |
+ """ ZEO Client | |
+ """ | |
+ server = self.env.get("ZEO_ADDRESS", None) | |
+ if not server: | |
+ return | |
+ | |
+ config = "" | |
+ with open(self.zope_conf, "r") as cfile: | |
+ config = cfile.read() | |
+ | |
+ # Already initialized | |
+ if "<blobstorage>" not in config: | |
+ return | |
+ | |
+ read_only = self.env.get("ZEO_READ_ONLY", "false") | |
+ zeo_ro_fallback = self.env.get("ZEO_CLIENT_READ_ONLY_FALLBACK", "false") | |
+ shared_blob_dir=self.env.get("ZEO_SHARED_BLOB_DIR", "off") | |
+ zeo_storage=self.env.get("ZEO_STORAGE", "1") | |
+ zeo_client_cache_size=self.env.get("ZEO_CLIENT_CACHE_SIZE", "128MB") | |
+ zeo_conf = ZEO_TEMPLATE.format( | |
+ zeo_address=server, | |
+ read_only=read_only, | |
+ zeo_client_read_only_fallback=zeo_ro_fallback, | |
+ shared_blob_dir=shared_blob_dir, | |
+ zeo_storage=zeo_storage, | |
+ zeo_client_cache_size=zeo_client_cache_size | |
+ ) | |
+ | |
+ pattern = re.compile(r"<blobstorage>.+</blobstorage>", re.DOTALL) | |
+ config = re.sub(pattern, zeo_conf, config) | |
+ | |
+ with open(self.zope_conf, "w") as cfile: | |
+ cfile.write(config) | |
+ | |
+ def zeopack(self): | |
+ """ ZEO Pack | |
+ """ | |
+ server = self.env.get("ZEO_ADDRESS", None) | |
+ if not server: | |
+ return | |
+ | |
+ if ":" in server: | |
+ host, port = server.split(":") | |
+ else: | |
+ host, port = (server, "8100") | |
+ | |
+ with open(self.zeopack_conf, 'r') as cfile: | |
+ text = cfile.read() | |
+ text = text.replace('address = "8100"', 'address = "%s"' % server) | |
+ text = text.replace('host = "127.0.0.1"', 'host = "%s"' % host) | |
+ text = text.replace('port = "8100"', 'port = "%s"' % port) | |
+ | |
+ with open(self.zeopack_conf, 'w') as cfile: | |
+ cfile.write(text) | |
+ | |
+ def zeoserver(self): | |
+ """ ZEO Server | |
+ """ | |
+ pack_keep_old = self.env.get("ZEO_PACK_KEEP_OLD", '') | |
+ if pack_keep_old.lower() in ("false", "no", "0", "n", "f"): | |
+ with open(self.zeoserver_conf, 'r') as cfile: | |
+ text = cfile.read() | |
+ if 'pack-keep-old' not in text: | |
+ text = text.replace( | |
+ '</filestorage>', | |
+ ' pack-keep-old false\n</filestorage>' | |
+ ) | |
+ | |
+ with open(self.zeoserver_conf, 'w') as cfile: | |
+ cfile.write(text) | |
+ | |
+ def buildout(self): | |
+ """ Buildout from environment variables | |
+ """ | |
+ # Already configured | |
+ if os.path.exists(self.custom_conf): | |
+ return | |
+ | |
+ eggs = self.env.get("PLONE_ADDONS", | |
+ self.env.get("ADDONS", "")).strip().split() | |
+ if not eggs: | |
+ eggs = self.env.get("BUILDOUT_EGGS", "").strip().split() | |
+ if eggs: | |
+ warnings.warn( | |
+ "BUILDOUT_EGGS is deprecated. Please use " | |
+ "PLONE_ADDONS instead !!!", DeprecationWarning) | |
+ | |
+ zcml = self.env.get("PLONE_ZCML", | |
+ self.env.get("ZCML", "")).strip().split() | |
+ if not zcml: | |
+ zcml = self.env.get("BUILDOUT_ZCML", "").strip().split() | |
+ if zcml: | |
+ warnings.warn( | |
+ "BUILDOUT_ZCML is deprecated. Please use " | |
+ "PLONE_ZCML instead !!!", DeprecationWarning) | |
+ | |
+ develop = self.env.get("PLONE_DEVELOP", | |
+ self.env.get("DEVELOP", "")).strip().split() | |
+ if not develop: | |
+ develop = self.env.get("BUILDOUT_DEVELOP", "").strip().split() | |
+ if develop: | |
+ warnings.warn( | |
+ "BUILDOUT_DEVELOP is deprecated. Please use " | |
+ "PLONE_DEVELOP instead !!!", DeprecationWarning) | |
+ | |
+ if not (eggs or zcml or develop): | |
+ return | |
+ | |
+ buildout = BUILDOUT_TEMPLATE.format( | |
+ eggs="\n\t".join(eggs), | |
+ zcml="\n\t".join(zcml), | |
+ develop="\n\t".join(develop) | |
+ ) | |
+ | |
+ with open(self.custom_conf, 'w') as cfile: | |
+ cfile.write(buildout) | |
+ | |
+ def setup(self, **kwargs): | |
+ self.buildout() | |
+ self.zeoclient() | |
+ self.zeopack() | |
+ self.zeoserver() | |
+ | |
+ __call__ = setup | |
+ | |
+ZEO_TEMPLATE = """ | |
+ <zeoclient> | |
+ read-only {read_only} | |
+ read-only-fallback {zeo_client_read_only_fallback} | |
+ blob-dir /data/blobstorage | |
+ shared-blob-dir {shared_blob_dir} | |
+ server {zeo_address} | |
+ storage {zeo_storage} | |
+ name zeostorage | |
+ var /plone/instance/parts/instance/var | |
+ cache-size {zeo_client_cache_size} | |
+ </zeoclient> | |
+""".strip() | |
+ | |
+BUILDOUT_TEMPLATE = """ | |
+[buildout] | |
+extends = develop.cfg | |
+develop += {develop} | |
+eggs += {eggs} | |
+zcml += {zcml} | |
+""" | |
+ | |
+def initialize(): | |
+ """ Configure Plone instance as ZEO Client | |
+ """ | |
+ environment = Environment() | |
+ environment.setup() | |
+ | |
+if __name__ == "__main__": | |
+ initialize() | |
diff --git a/plone_4.3.8/Dockerfile b/plone_4.3.8/Dockerfile | |
new file mode 100644 | |
index 0000000..61f481e | |
--- /dev/null | |
+++ b/plone_4.3.8/Dockerfile | |
@@ -0,0 +1,49 @@ | |
+FROM python:2.7-slim | |
+MAINTAINER "Plone Community" http://community.plone.org | |
+ | |
+RUN useradd --system -U -u 500 plone \ | |
+ && mkdir -p /plone /data/filestorage /data/blobstorage \ | |
+ && chown -R plone:plone /plone /data | |
+ | |
+ENV PLONE_MAJOR=4.3 | |
+ENV PLONE_VERSION=4.3.8 | |
+ENV PLONE_MD5=c308e7a2b37ff35825225afd982228aa | |
+ | |
+RUN buildDeps="curl sudo python-setuptools python-dev build-essential libssl-dev libxml2-dev libxslt1-dev libbz2-dev libjpeg62-turbo-dev" \ | |
+ && runDeps="libxml2 libxslt1.1 libjpeg62 rsync" \ | |
+ && apt-get update \ | |
+ && apt-get install -y --no-install-recommends $buildDeps \ | |
+ && curl -o Plone.tgz -SL https://launchpad.net/plone/$PLONE_MAJOR/$PLONE_VERSION/+download/Plone-$PLONE_VERSION-UnifiedInstaller.tgz \ | |
+ && echo "$PLONE_MD5 Plone.tgz" | md5sum -c - \ | |
+ && tar -xzf Plone.tgz \ | |
+ && ./Plone-$PLONE_VERSION-UnifiedInstaller/install.sh \ | |
+ --password=admin \ | |
+ --daemon-user=plone \ | |
+ --owner=plone \ | |
+ --group=plone \ | |
+ --target=/plone \ | |
+ --instance=instance \ | |
+ --var=/data \ | |
+ none \ | |
+ && cd /plone/instance \ | |
+ && sed -i 's/parts =/parts =\n zeoserver/g' buildout.cfg \ | |
+ && echo '\n[zeoserver]\n<= zeoserver_base\nrecipe = plone.recipe.zeoserver' >> buildout.cfg \ | |
+ && sudo -u plone bin/buildout \ | |
+ && chown -R plone:plone /plone /data \ | |
+ && rm -rf /Plone* \ | |
+ && SUDO_FORCE_REMOVE=yes apt-get purge -y --auto-remove $buildDeps \ | |
+ && apt-get install -y --no-install-recommends $runDeps \ | |
+ && rm -rf /var/lib/apt/lists/* \ | |
+ && rm -rf /plone/buildout-cache/downloads/* \ | |
+ && find /plone \( -type f -a -name '*.pyc' -o -name '*.pyo' \) -exec rm -rf '{}' + | |
+ | |
+VOLUME /data | |
+ | |
+COPY docker-initialize.py docker-entrypoint.sh / | |
+ | |
+EXPOSE 8080 | |
+USER plone | |
+WORKDIR /plone/instance | |
+ | |
+ENTRYPOINT ["/docker-entrypoint.sh"] | |
+CMD ["start"] | |
diff --git a/plone_4.3.8/docker-entrypoint.sh b/plone_4.3.8/docker-entrypoint.sh | |
new file mode 100755 | |
index 0000000..5644bdb | |
--- /dev/null | |
+++ b/plone_4.3.8/docker-entrypoint.sh | |
@@ -0,0 +1,55 @@ | |
+#!/bin/bash | |
+set -e | |
+ | |
+COMMANDS="debug help logtail show stop adduser fg kill quit run wait console foreground logreopen reload shell status" | |
+START="start restart zeoserver" | |
+CMD="bin/instance" | |
+ | |
+python /docker-initialize.py | |
+ | |
+if [ -e "custom.cfg" ]; then | |
+ if [ ! -e "bin/develop" ]; then | |
+ bin/buildout -c custom.cfg | |
+ fi | |
+fi | |
+ | |
+if [[ "$1" == "zeo"* ]]; then | |
+ CMD="bin/zeoserver" | |
+fi | |
+ | |
+if [ -z "$HEALTH_CHECK_TIMEOUT" ]; then | |
+ HEALTH_CHECK_TIMEOUT=1 | |
+fi | |
+ | |
+if [ -z "$HEALTH_CHECK_INTERVAL" ]; then | |
+ HEALTH_CHECK_INTERVAL=1 | |
+fi | |
+ | |
+if [[ $START == *"$1"* ]]; then | |
+ _stop() { | |
+ $CMD stop | |
+ kill -TERM $child 2>/dev/null | |
+ } | |
+ | |
+ trap _stop SIGTERM SIGINT | |
+ $CMD start | |
+ $CMD logtail & | |
+ child=$! | |
+ | |
+ pid=`$CMD status | sed 's/[^0-9]*//g'` | |
+ if [ ! -z "$pid" ]; then | |
+ echo "Application running on pid=$pid" | |
+ sleep "$HEALTH_CHECK_TIMEOUT" | |
+ while kill -0 "$pid" 2> /dev/null; do | |
+ sleep "$HEALTH_CHECK_INTERVAL" | |
+ done | |
+ else | |
+ echo "Application didn't start normally. Shutting down!" | |
+ _stop | |
+ fi | |
+else | |
+ if [[ $COMMANDS == *"$1"* ]]; then | |
+ exec bin/instance "$@" | |
+ fi | |
+ exec "$@" | |
+fi | |
diff --git a/plone_4.3.8/docker-initialize.py b/plone_4.3.8/docker-initialize.py | |
new file mode 100755 | |
index 0000000..087bde9 | |
--- /dev/null | |
+++ b/plone_4.3.8/docker-initialize.py | |
@@ -0,0 +1,178 @@ | |
+#!/plone/instance/bin/python | |
+ | |
+import re | |
+import os | |
+import warnings | |
+warnings.simplefilter('always', DeprecationWarning) | |
+ | |
+class Environment(object): | |
+ """ Configure container via environment variables | |
+ """ | |
+ def __init__(self, env=os.environ, | |
+ zope_conf="/plone/instance/parts/instance/etc/zope.conf", | |
+ custom_conf="/plone/instance/custom.cfg", | |
+ zeopack_conf="/plone/instance/bin/zeopack", | |
+ zeoserver_conf="/plone/instance/parts/zeoserver/etc/zeo.conf" | |
+ ): | |
+ self.env = env | |
+ self.zope_conf = zope_conf | |
+ self.custom_conf = custom_conf | |
+ self.zeopack_conf = zeopack_conf | |
+ self.zeoserver_conf = zeoserver_conf | |
+ | |
+ def zeoclient(self): | |
+ """ ZEO Client | |
+ """ | |
+ server = self.env.get("ZEO_ADDRESS", None) | |
+ if not server: | |
+ return | |
+ | |
+ config = "" | |
+ with open(self.zope_conf, "r") as cfile: | |
+ config = cfile.read() | |
+ | |
+ # Already initialized | |
+ if "<blobstorage>" not in config: | |
+ return | |
+ | |
+ read_only = self.env.get("ZEO_READ_ONLY", "false") | |
+ zeo_ro_fallback = self.env.get("ZEO_CLIENT_READ_ONLY_FALLBACK", "false") | |
+ shared_blob_dir=self.env.get("ZEO_SHARED_BLOB_DIR", "off") | |
+ zeo_storage=self.env.get("ZEO_STORAGE", "1") | |
+ zeo_client_cache_size=self.env.get("ZEO_CLIENT_CACHE_SIZE", "128MB") | |
+ zeo_conf = ZEO_TEMPLATE.format( | |
+ zeo_address=server, | |
+ read_only=read_only, | |
+ zeo_client_read_only_fallback=zeo_ro_fallback, | |
+ shared_blob_dir=shared_blob_dir, | |
+ zeo_storage=zeo_storage, | |
+ zeo_client_cache_size=zeo_client_cache_size | |
+ ) | |
+ | |
+ pattern = re.compile(r"<blobstorage>.+</blobstorage>", re.DOTALL) | |
+ config = re.sub(pattern, zeo_conf, config) | |
+ | |
+ with open(self.zope_conf, "w") as cfile: | |
+ cfile.write(config) | |
+ | |
+ def zeopack(self): | |
+ """ ZEO Pack | |
+ """ | |
+ server = self.env.get("ZEO_ADDRESS", None) | |
+ if not server: | |
+ return | |
+ | |
+ if ":" in server: | |
+ host, port = server.split(":") | |
+ else: | |
+ host, port = (server, "8100") | |
+ | |
+ with open(self.zeopack_conf, 'r') as cfile: | |
+ text = cfile.read() | |
+ text = text.replace('address = "8100"', 'address = "%s"' % server) | |
+ text = text.replace('host = "127.0.0.1"', 'host = "%s"' % host) | |
+ text = text.replace('port = "8100"', 'port = "%s"' % port) | |
+ | |
+ with open(self.zeopack_conf, 'w') as cfile: | |
+ cfile.write(text) | |
+ | |
+ def zeoserver(self): | |
+ """ ZEO Server | |
+ """ | |
+ pack_keep_old = self.env.get("ZEO_PACK_KEEP_OLD", '') | |
+ if pack_keep_old.lower() in ("false", "no", "0", "n", "f"): | |
+ with open(self.zeoserver_conf, 'r') as cfile: | |
+ text = cfile.read() | |
+ if 'pack-keep-old' not in text: | |
+ text = text.replace( | |
+ '</filestorage>', | |
+ ' pack-keep-old false\n</filestorage>' | |
+ ) | |
+ | |
+ with open(self.zeoserver_conf, 'w') as cfile: | |
+ cfile.write(text) | |
+ | |
+ def buildout(self): | |
+ """ Buildout from environment variables | |
+ """ | |
+ # Already configured | |
+ if os.path.exists(self.custom_conf): | |
+ return | |
+ | |
+ eggs = self.env.get("PLONE_ADDONS", | |
+ self.env.get("ADDONS", "")).strip().split() | |
+ if not eggs: | |
+ eggs = self.env.get("BUILDOUT_EGGS", "").strip().split() | |
+ if eggs: | |
+ warnings.warn( | |
+ "BUILDOUT_EGGS is deprecated. Please use " | |
+ "PLONE_ADDONS instead !!!", DeprecationWarning) | |
+ | |
+ zcml = self.env.get("PLONE_ZCML", | |
+ self.env.get("ZCML", "")).strip().split() | |
+ if not zcml: | |
+ zcml = self.env.get("BUILDOUT_ZCML", "").strip().split() | |
+ if zcml: | |
+ warnings.warn( | |
+ "BUILDOUT_ZCML is deprecated. Please use " | |
+ "PLONE_ZCML instead !!!", DeprecationWarning) | |
+ | |
+ develop = self.env.get("PLONE_DEVELOP", | |
+ self.env.get("DEVELOP", "")).strip().split() | |
+ if not develop: | |
+ develop = self.env.get("BUILDOUT_DEVELOP", "").strip().split() | |
+ if develop: | |
+ warnings.warn( | |
+ "BUILDOUT_DEVELOP is deprecated. Please use " | |
+ "PLONE_DEVELOP instead !!!", DeprecationWarning) | |
+ | |
+ if not (eggs or zcml or develop): | |
+ return | |
+ | |
+ buildout = BUILDOUT_TEMPLATE.format( | |
+ eggs="\n\t".join(eggs), | |
+ zcml="\n\t".join(zcml), | |
+ develop="\n\t".join(develop) | |
+ ) | |
+ | |
+ with open(self.custom_conf, 'w') as cfile: | |
+ cfile.write(buildout) | |
+ | |
+ def setup(self, **kwargs): | |
+ self.buildout() | |
+ self.zeoclient() | |
+ self.zeopack() | |
+ self.zeoserver() | |
+ | |
+ __call__ = setup | |
+ | |
+ZEO_TEMPLATE = """ | |
+ <zeoclient> | |
+ read-only {read_only} | |
+ read-only-fallback {zeo_client_read_only_fallback} | |
+ blob-dir /data/blobstorage | |
+ shared-blob-dir {shared_blob_dir} | |
+ server {zeo_address} | |
+ storage {zeo_storage} | |
+ name zeostorage | |
+ var /plone/instance/parts/instance/var | |
+ cache-size {zeo_client_cache_size} | |
+ </zeoclient> | |
+""".strip() | |
+ | |
+BUILDOUT_TEMPLATE = """ | |
+[buildout] | |
+extends = develop.cfg | |
+develop += {develop} | |
+eggs += {eggs} | |
+zcml += {zcml} | |
+""" | |
+ | |
+def initialize(): | |
+ """ Configure Plone instance as ZEO Client | |
+ """ | |
+ environment = Environment() | |
+ environment.setup() | |
+ | |
+if __name__ == "__main__": | |
+ initialize() | |
diff --git a/plone_4.3.9/Dockerfile b/plone_4.3.9/Dockerfile | |
new file mode 100644 | |
index 0000000..465d402 | |
--- /dev/null | |
+++ b/plone_4.3.9/Dockerfile | |
@@ -0,0 +1,49 @@ | |
+FROM python:2.7-slim | |
+MAINTAINER "Plone Community" http://community.plone.org | |
+ | |
+RUN useradd --system -U -u 500 plone \ | |
+ && mkdir -p /plone /data/filestorage /data/blobstorage \ | |
+ && chown -R plone:plone /plone /data | |
+ | |
+ENV PLONE_MAJOR=4.3 | |
+ENV PLONE_VERSION=4.3.9 | |
+ENV PLONE_MD5=fef5beaaf82692de601f558afa404d01 | |
+ | |
+RUN buildDeps="curl sudo python-setuptools python-dev build-essential libssl-dev libxml2-dev libxslt1-dev libbz2-dev libjpeg62-turbo-dev" \ | |
+ && runDeps="libxml2 libxslt1.1 libjpeg62 rsync" \ | |
+ && apt-get update \ | |
+ && apt-get install -y --no-install-recommends $buildDeps \ | |
+ && curl -o Plone.tgz -SL https://launchpad.net/plone/$PLONE_MAJOR/$PLONE_VERSION/+download/Plone-$PLONE_VERSION-UnifiedInstaller.tgz \ | |
+ && echo "$PLONE_MD5 Plone.tgz" | md5sum -c - \ | |
+ && tar -xzf Plone.tgz \ | |
+ && ./Plone-$PLONE_VERSION-UnifiedInstaller/install.sh \ | |
+ --password=admin \ | |
+ --daemon-user=plone \ | |
+ --owner=plone \ | |
+ --group=plone \ | |
+ --target=/plone \ | |
+ --instance=instance \ | |
+ --var=/data \ | |
+ none \ | |
+ && cd /plone/instance \ | |
+ && sed -i 's/parts =/parts =\n zeoserver/g' buildout.cfg \ | |
+ && echo '\n[zeoserver]\n<= zeoserver_base\nrecipe = plone.recipe.zeoserver' >> buildout.cfg \ | |
+ && sudo -u plone bin/buildout \ | |
+ && chown -R plone:plone /plone /data \ | |
+ && rm -rf /Plone* \ | |
+ && SUDO_FORCE_REMOVE=yes apt-get purge -y --auto-remove $buildDeps \ | |
+ && apt-get install -y --no-install-recommends $runDeps \ | |
+ && rm -rf /var/lib/apt/lists/* \ | |
+ && rm -rf /plone/buildout-cache/downloads/* \ | |
+ && find /plone \( -type f -a -name '*.pyc' -o -name '*.pyo' \) -exec rm -rf '{}' + | |
+ | |
+VOLUME /data | |
+ | |
+COPY docker-initialize.py docker-entrypoint.sh / | |
+ | |
+EXPOSE 8080 | |
+USER plone | |
+WORKDIR /plone/instance | |
+ | |
+ENTRYPOINT ["/docker-entrypoint.sh"] | |
+CMD ["start"] | |
diff --git a/plone_4.3.9/docker-entrypoint.sh b/plone_4.3.9/docker-entrypoint.sh | |
new file mode 100755 | |
index 0000000..5644bdb | |
--- /dev/null | |
+++ b/plone_4.3.9/docker-entrypoint.sh | |
@@ -0,0 +1,55 @@ | |
+#!/bin/bash | |
+set -e | |
+ | |
+COMMANDS="debug help logtail show stop adduser fg kill quit run wait console foreground logreopen reload shell status" | |
+START="start restart zeoserver" | |
+CMD="bin/instance" | |
+ | |
+python /docker-initialize.py | |
+ | |
+if [ -e "custom.cfg" ]; then | |
+ if [ ! -e "bin/develop" ]; then | |
+ bin/buildout -c custom.cfg | |
+ fi | |
+fi | |
+ | |
+if [[ "$1" == "zeo"* ]]; then | |
+ CMD="bin/zeoserver" | |
+fi | |
+ | |
+if [ -z "$HEALTH_CHECK_TIMEOUT" ]; then | |
+ HEALTH_CHECK_TIMEOUT=1 | |
+fi | |
+ | |
+if [ -z "$HEALTH_CHECK_INTERVAL" ]; then | |
+ HEALTH_CHECK_INTERVAL=1 | |
+fi | |
+ | |
+if [[ $START == *"$1"* ]]; then | |
+ _stop() { | |
+ $CMD stop | |
+ kill -TERM $child 2>/dev/null | |
+ } | |
+ | |
+ trap _stop SIGTERM SIGINT | |
+ $CMD start | |
+ $CMD logtail & | |
+ child=$! | |
+ | |
+ pid=`$CMD status | sed 's/[^0-9]*//g'` | |
+ if [ ! -z "$pid" ]; then | |
+ echo "Application running on pid=$pid" | |
+ sleep "$HEALTH_CHECK_TIMEOUT" | |
+ while kill -0 "$pid" 2> /dev/null; do | |
+ sleep "$HEALTH_CHECK_INTERVAL" | |
+ done | |
+ else | |
+ echo "Application didn't start normally. Shutting down!" | |
+ _stop | |
+ fi | |
+else | |
+ if [[ $COMMANDS == *"$1"* ]]; then | |
+ exec bin/instance "$@" | |
+ fi | |
+ exec "$@" | |
+fi | |
diff --git a/plone_4.3.9/docker-initialize.py b/plone_4.3.9/docker-initialize.py | |
new file mode 100755 | |
index 0000000..087bde9 | |
--- /dev/null | |
+++ b/plone_4.3.9/docker-initialize.py | |
@@ -0,0 +1,178 @@ | |
+#!/plone/instance/bin/python | |
+ | |
+import re | |
+import os | |
+import warnings | |
+warnings.simplefilter('always', DeprecationWarning) | |
+ | |
+class Environment(object): | |
+ """ Configure container via environment variables | |
+ """ | |
+ def __init__(self, env=os.environ, | |
+ zope_conf="/plone/instance/parts/instance/etc/zope.conf", | |
+ custom_conf="/plone/instance/custom.cfg", | |
+ zeopack_conf="/plone/instance/bin/zeopack", | |
+ zeoserver_conf="/plone/instance/parts/zeoserver/etc/zeo.conf" | |
+ ): | |
+ self.env = env | |
+ self.zope_conf = zope_conf | |
+ self.custom_conf = custom_conf | |
+ self.zeopack_conf = zeopack_conf | |
+ self.zeoserver_conf = zeoserver_conf | |
+ | |
+ def zeoclient(self): | |
+ """ ZEO Client | |
+ """ | |
+ server = self.env.get("ZEO_ADDRESS", None) | |
+ if not server: | |
+ return | |
+ | |
+ config = "" | |
+ with open(self.zope_conf, "r") as cfile: | |
+ config = cfile.read() | |
+ | |
+ # Already initialized | |
+ if "<blobstorage>" not in config: | |
+ return | |
+ | |
+ read_only = self.env.get("ZEO_READ_ONLY", "false") | |
+ zeo_ro_fallback = self.env.get("ZEO_CLIENT_READ_ONLY_FALLBACK", "false") | |
+ shared_blob_dir=self.env.get("ZEO_SHARED_BLOB_DIR", "off") | |
+ zeo_storage=self.env.get("ZEO_STORAGE", "1") | |
+ zeo_client_cache_size=self.env.get("ZEO_CLIENT_CACHE_SIZE", "128MB") | |
+ zeo_conf = ZEO_TEMPLATE.format( | |
+ zeo_address=server, | |
+ read_only=read_only, | |
+ zeo_client_read_only_fallback=zeo_ro_fallback, | |
+ shared_blob_dir=shared_blob_dir, | |
+ zeo_storage=zeo_storage, | |
+ zeo_client_cache_size=zeo_client_cache_size | |
+ ) | |
+ | |
+ pattern = re.compile(r"<blobstorage>.+</blobstorage>", re.DOTALL) | |
+ config = re.sub(pattern, zeo_conf, config) | |
+ | |
+ with open(self.zope_conf, "w") as cfile: | |
+ cfile.write(config) | |
+ | |
+ def zeopack(self): | |
+ """ ZEO Pack | |
+ """ | |
+ server = self.env.get("ZEO_ADDRESS", None) | |
+ if not server: | |
+ return | |
+ | |
+ if ":" in server: | |
+ host, port = server.split(":") | |
+ else: | |
+ host, port = (server, "8100") | |
+ | |
+ with open(self.zeopack_conf, 'r') as cfile: | |
+ text = cfile.read() | |
+ text = text.replace('address = "8100"', 'address = "%s"' % server) | |
+ text = text.replace('host = "127.0.0.1"', 'host = "%s"' % host) | |
+ text = text.replace('port = "8100"', 'port = "%s"' % port) | |
+ | |
+ with open(self.zeopack_conf, 'w') as cfile: | |
+ cfile.write(text) | |
+ | |
+ def zeoserver(self): | |
+ """ ZEO Server | |
+ """ | |
+ pack_keep_old = self.env.get("ZEO_PACK_KEEP_OLD", '') | |
+ if pack_keep_old.lower() in ("false", "no", "0", "n", "f"): | |
+ with open(self.zeoserver_conf, 'r') as cfile: | |
+ text = cfile.read() | |
+ if 'pack-keep-old' not in text: | |
+ text = text.replace( | |
+ '</filestorage>', | |
+ ' pack-keep-old false\n</filestorage>' | |
+ ) | |
+ | |
+ with open(self.zeoserver_conf, 'w') as cfile: | |
+ cfile.write(text) | |
+ | |
+ def buildout(self): | |
+ """ Buildout from environment variables | |
+ """ | |
+ # Already configured | |
+ if os.path.exists(self.custom_conf): | |
+ return | |
+ | |
+ eggs = self.env.get("PLONE_ADDONS", | |
+ self.env.get("ADDONS", "")).strip().split() | |
+ if not eggs: | |
+ eggs = self.env.get("BUILDOUT_EGGS", "").strip().split() | |
+ if eggs: | |
+ warnings.warn( | |
+ "BUILDOUT_EGGS is deprecated. Please use " | |
+ "PLONE_ADDONS instead !!!", DeprecationWarning) | |
+ | |
+ zcml = self.env.get("PLONE_ZCML", | |
+ self.env.get("ZCML", "")).strip().split() | |
+ if not zcml: | |
+ zcml = self.env.get("BUILDOUT_ZCML", "").strip().split() | |
+ if zcml: | |
+ warnings.warn( | |
+ "BUILDOUT_ZCML is deprecated. Please use " | |
+ "PLONE_ZCML instead !!!", DeprecationWarning) | |
+ | |
+ develop = self.env.get("PLONE_DEVELOP", | |
+ self.env.get("DEVELOP", "")).strip().split() | |
+ if not develop: | |
+ develop = self.env.get("BUILDOUT_DEVELOP", "").strip().split() | |
+ if develop: | |
+ warnings.warn( | |
+ "BUILDOUT_DEVELOP is deprecated. Please use " | |
+ "PLONE_DEVELOP instead !!!", DeprecationWarning) | |
+ | |
+ if not (eggs or zcml or develop): | |
+ return | |
+ | |
+ buildout = BUILDOUT_TEMPLATE.format( | |
+ eggs="\n\t".join(eggs), | |
+ zcml="\n\t".join(zcml), | |
+ develop="\n\t".join(develop) | |
+ ) | |
+ | |
+ with open(self.custom_conf, 'w') as cfile: | |
+ cfile.write(buildout) | |
+ | |
+ def setup(self, **kwargs): | |
+ self.buildout() | |
+ self.zeoclient() | |
+ self.zeopack() | |
+ self.zeoserver() | |
+ | |
+ __call__ = setup | |
+ | |
+ZEO_TEMPLATE = """ | |
+ <zeoclient> | |
+ read-only {read_only} | |
+ read-only-fallback {zeo_client_read_only_fallback} | |
+ blob-dir /data/blobstorage | |
+ shared-blob-dir {shared_blob_dir} | |
+ server {zeo_address} | |
+ storage {zeo_storage} | |
+ name zeostorage | |
+ var /plone/instance/parts/instance/var | |
+ cache-size {zeo_client_cache_size} | |
+ </zeoclient> | |
+""".strip() | |
+ | |
+BUILDOUT_TEMPLATE = """ | |
+[buildout] | |
+extends = develop.cfg | |
+develop += {develop} | |
+eggs += {eggs} | |
+zcml += {zcml} | |
+""" | |
+ | |
+def initialize(): | |
+ """ Configure Plone instance as ZEO Client | |
+ """ | |
+ environment = Environment() | |
+ environment.setup() | |
+ | |
+if __name__ == "__main__": | |
+ initialize() | |
diff --git a/plone_4/Dockerfile b/plone_4/Dockerfile | |
new file mode 100644 | |
index 0000000..a7a7b01 | |
--- /dev/null | |
+++ b/plone_4/Dockerfile | |
@@ -0,0 +1,49 @@ | |
+FROM python:2.7-slim | |
+MAINTAINER "Plone Community" http://community.plone.org | |
+ | |
+RUN useradd --system -U -u 500 plone \ | |
+ && mkdir -p /plone /data/filestorage /data/blobstorage \ | |
+ && chown -R plone:plone /plone /data | |
+ | |
+ENV PLONE_MAJOR=4.3 | |
+ENV PLONE_VERSION=4.3.11 | |
+ENV PLONE_MD5=207cdf096869d11cee69339e95ace496 | |
+ | |
+RUN buildDeps="curl sudo python-setuptools python-dev build-essential libssl-dev libxml2-dev libxslt1-dev libbz2-dev libjpeg62-turbo-dev" \ | |
+ && runDeps="libxml2 libxslt1.1 libjpeg62 rsync" \ | |
+ && apt-get update \ | |
+ && apt-get install -y --no-install-recommends $buildDeps \ | |
+ && curl -o Plone.tgz -SL https://launchpad.net/plone/$PLONE_MAJOR/$PLONE_VERSION/+download/Plone-$PLONE_VERSION-UnifiedInstaller.tgz \ | |
+ && echo "$PLONE_MD5 Plone.tgz" | md5sum -c - \ | |
+ && tar -xzf Plone.tgz \ | |
+ && ./Plone-$PLONE_VERSION-UnifiedInstaller/install.sh \ | |
+ --password=admin \ | |
+ --daemon-user=plone \ | |
+ --owner=plone \ | |
+ --group=plone \ | |
+ --target=/plone \ | |
+ --instance=instance \ | |
+ --var=/data \ | |
+ none \ | |
+ && cd /plone/instance \ | |
+ && sed -i 's/parts =/parts =\n zeoserver/g' buildout.cfg \ | |
+ && echo '\n[zeoserver]\n<= zeoserver_base\nrecipe = plone.recipe.zeoserver' >> buildout.cfg \ | |
+ && sudo -u plone bin/buildout \ | |
+ && chown -R plone:plone /plone /data \ | |
+ && rm -rf /Plone* \ | |
+ && SUDO_FORCE_REMOVE=yes apt-get purge -y --auto-remove $buildDeps \ | |
+ && apt-get install -y --no-install-recommends $runDeps \ | |
+ && rm -rf /var/lib/apt/lists/* \ | |
+ && rm -rf /plone/buildout-cache/downloads/* \ | |
+ && find /plone \( -type f -a -name '*.pyc' -o -name '*.pyo' \) -exec rm -rf '{}' + | |
+ | |
+VOLUME /data | |
+ | |
+COPY docker-initialize.py docker-entrypoint.sh / | |
+ | |
+EXPOSE 8080 | |
+USER plone | |
+WORKDIR /plone/instance | |
+ | |
+ENTRYPOINT ["/docker-entrypoint.sh"] | |
+CMD ["start"] | |
diff --git a/plone_4/docker-entrypoint.sh b/plone_4/docker-entrypoint.sh | |
new file mode 100755 | |
index 0000000..5644bdb | |
--- /dev/null | |
+++ b/plone_4/docker-entrypoint.sh | |
@@ -0,0 +1,55 @@ | |
+#!/bin/bash | |
+set -e | |
+ | |
+COMMANDS="debug help logtail show stop adduser fg kill quit run wait console foreground logreopen reload shell status" | |
+START="start restart zeoserver" | |
+CMD="bin/instance" | |
+ | |
+python /docker-initialize.py | |
+ | |
+if [ -e "custom.cfg" ]; then | |
+ if [ ! -e "bin/develop" ]; then | |
+ bin/buildout -c custom.cfg | |
+ fi | |
+fi | |
+ | |
+if [[ "$1" == "zeo"* ]]; then | |
+ CMD="bin/zeoserver" | |
+fi | |
+ | |
+if [ -z "$HEALTH_CHECK_TIMEOUT" ]; then | |
+ HEALTH_CHECK_TIMEOUT=1 | |
+fi | |
+ | |
+if [ -z "$HEALTH_CHECK_INTERVAL" ]; then | |
+ HEALTH_CHECK_INTERVAL=1 | |
+fi | |
+ | |
+if [[ $START == *"$1"* ]]; then | |
+ _stop() { | |
+ $CMD stop | |
+ kill -TERM $child 2>/dev/null | |
+ } | |
+ | |
+ trap _stop SIGTERM SIGINT | |
+ $CMD start | |
+ $CMD logtail & | |
+ child=$! | |
+ | |
+ pid=`$CMD status | sed 's/[^0-9]*//g'` | |
+ if [ ! -z "$pid" ]; then | |
+ echo "Application running on pid=$pid" | |
+ sleep "$HEALTH_CHECK_TIMEOUT" | |
+ while kill -0 "$pid" 2> /dev/null; do | |
+ sleep "$HEALTH_CHECK_INTERVAL" | |
+ done | |
+ else | |
+ echo "Application didn't start normally. Shutting down!" | |
+ _stop | |
+ fi | |
+else | |
+ if [[ $COMMANDS == *"$1"* ]]; then | |
+ exec bin/instance "$@" | |
+ fi | |
+ exec "$@" | |
+fi | |
diff --git a/plone_4/docker-initialize.py b/plone_4/docker-initialize.py | |
new file mode 100755 | |
index 0000000..087bde9 | |
--- /dev/null | |
+++ b/plone_4/docker-initialize.py | |
@@ -0,0 +1,178 @@ | |
+#!/plone/instance/bin/python | |
+ | |
+import re | |
+import os | |
+import warnings | |
+warnings.simplefilter('always', DeprecationWarning) | |
+ | |
+class Environment(object): | |
+ """ Configure container via environment variables | |
+ """ | |
+ def __init__(self, env=os.environ, | |
+ zope_conf="/plone/instance/parts/instance/etc/zope.conf", | |
+ custom_conf="/plone/instance/custom.cfg", | |
+ zeopack_conf="/plone/instance/bin/zeopack", | |
+ zeoserver_conf="/plone/instance/parts/zeoserver/etc/zeo.conf" | |
+ ): | |
+ self.env = env | |
+ self.zope_conf = zope_conf | |
+ self.custom_conf = custom_conf | |
+ self.zeopack_conf = zeopack_conf | |
+ self.zeoserver_conf = zeoserver_conf | |
+ | |
+ def zeoclient(self): | |
+ """ ZEO Client | |
+ """ | |
+ server = self.env.get("ZEO_ADDRESS", None) | |
+ if not server: | |
+ return | |
+ | |
+ config = "" | |
+ with open(self.zope_conf, "r") as cfile: | |
+ config = cfile.read() | |
+ | |
+ # Already initialized | |
+ if "<blobstorage>" not in config: | |
+ return | |
+ | |
+ read_only = self.env.get("ZEO_READ_ONLY", "false") | |
+ zeo_ro_fallback = self.env.get("ZEO_CLIENT_READ_ONLY_FALLBACK", "false") | |
+ shared_blob_dir=self.env.get("ZEO_SHARED_BLOB_DIR", "off") | |
+ zeo_storage=self.env.get("ZEO_STORAGE", "1") | |
+ zeo_client_cache_size=self.env.get("ZEO_CLIENT_CACHE_SIZE", "128MB") | |
+ zeo_conf = ZEO_TEMPLATE.format( | |
+ zeo_address=server, | |
+ read_only=read_only, | |
+ zeo_client_read_only_fallback=zeo_ro_fallback, | |
+ shared_blob_dir=shared_blob_dir, | |
+ zeo_storage=zeo_storage, | |
+ zeo_client_cache_size=zeo_client_cache_size | |
+ ) | |
+ | |
+ pattern = re.compile(r"<blobstorage>.+</blobstorage>", re.DOTALL) | |
+ config = re.sub(pattern, zeo_conf, config) | |
+ | |
+ with open(self.zope_conf, "w") as cfile: | |
+ cfile.write(config) | |
+ | |
+ def zeopack(self): | |
+ """ ZEO Pack | |
+ """ | |
+ server = self.env.get("ZEO_ADDRESS", None) | |
+ if not server: | |
+ return | |
+ | |
+ if ":" in server: | |
+ host, port = server.split(":") | |
+ else: | |
+ host, port = (server, "8100") | |
+ | |
+ with open(self.zeopack_conf, 'r') as cfile: | |
+ text = cfile.read() | |
+ text = text.replace('address = "8100"', 'address = "%s"' % server) | |
+ text = text.replace('host = "127.0.0.1"', 'host = "%s"' % host) | |
+ text = text.replace('port = "8100"', 'port = "%s"' % port) | |
+ | |
+ with open(self.zeopack_conf, 'w') as cfile: | |
+ cfile.write(text) | |
+ | |
+ def zeoserver(self): | |
+ """ ZEO Server | |
+ """ | |
+ pack_keep_old = self.env.get("ZEO_PACK_KEEP_OLD", '') | |
+ if pack_keep_old.lower() in ("false", "no", "0", "n", "f"): | |
+ with open(self.zeoserver_conf, 'r') as cfile: | |
+ text = cfile.read() | |
+ if 'pack-keep-old' not in text: | |
+ text = text.replace( | |
+ '</filestorage>', | |
+ ' pack-keep-old false\n</filestorage>' | |
+ ) | |
+ | |
+ with open(self.zeoserver_conf, 'w') as cfile: | |
+ cfile.write(text) | |
+ | |
+ def buildout(self): | |
+ """ Buildout from environment variables | |
+ """ | |
+ # Already configured | |
+ if os.path.exists(self.custom_conf): | |
+ return | |
+ | |
+ eggs = self.env.get("PLONE_ADDONS", | |
+ self.env.get("ADDONS", "")).strip().split() | |
+ if not eggs: | |
+ eggs = self.env.get("BUILDOUT_EGGS", "").strip().split() | |
+ if eggs: | |
+ warnings.warn( | |
+ "BUILDOUT_EGGS is deprecated. Please use " | |
+ "PLONE_ADDONS instead !!!", DeprecationWarning) | |
+ | |
+ zcml = self.env.get("PLONE_ZCML", | |
+ self.env.get("ZCML", "")).strip().split() | |
+ if not zcml: | |
+ zcml = self.env.get("BUILDOUT_ZCML", "").strip().split() | |
+ if zcml: | |
+ warnings.warn( | |
+ "BUILDOUT_ZCML is deprecated. Please use " | |
+ "PLONE_ZCML instead !!!", DeprecationWarning) | |
+ | |
+ develop = self.env.get("PLONE_DEVELOP", | |
+ self.env.get("DEVELOP", "")).strip().split() | |
+ if not develop: | |
+ develop = self.env.get("BUILDOUT_DEVELOP", "").strip().split() | |
+ if develop: | |
+ warnings.warn( | |
+ "BUILDOUT_DEVELOP is deprecated. Please use " | |
+ "PLONE_DEVELOP instead !!!", DeprecationWarning) | |
+ | |
+ if not (eggs or zcml or develop): | |
+ return | |
+ | |
+ buildout = BUILDOUT_TEMPLATE.format( | |
+ eggs="\n\t".join(eggs), | |
+ zcml="\n\t".join(zcml), | |
+ develop="\n\t".join(develop) | |
+ ) | |
+ | |
+ with open(self.custom_conf, 'w') as cfile: | |
+ cfile.write(buildout) | |
+ | |
+ def setup(self, **kwargs): | |
+ self.buildout() | |
+ self.zeoclient() | |
+ self.zeopack() | |
+ self.zeoserver() | |
+ | |
+ __call__ = setup | |
+ | |
+ZEO_TEMPLATE = """ | |
+ <zeoclient> | |
+ read-only {read_only} | |
+ read-only-fallback {zeo_client_read_only_fallback} | |
+ blob-dir /data/blobstorage | |
+ shared-blob-dir {shared_blob_dir} | |
+ server {zeo_address} | |
+ storage {zeo_storage} | |
+ name zeostorage | |
+ var /plone/instance/parts/instance/var | |
+ cache-size {zeo_client_cache_size} | |
+ </zeoclient> | |
+""".strip() | |
+ | |
+BUILDOUT_TEMPLATE = """ | |
+[buildout] | |
+extends = develop.cfg | |
+develop += {develop} | |
+eggs += {eggs} | |
+zcml += {zcml} | |
+""" | |
+ | |
+def initialize(): | |
+ """ Configure Plone instance as ZEO Client | |
+ """ | |
+ environment = Environment() | |
+ environment.setup() | |
+ | |
+if __name__ == "__main__": | |
+ initialize() | |
diff --git a/plone_5.0.2/Dockerfile b/plone_5.0.2/Dockerfile | |
new file mode 100644 | |
index 0000000..69f098e | |
--- /dev/null | |
+++ b/plone_5.0.2/Dockerfile | |
@@ -0,0 +1,49 @@ | |
+FROM python:2.7-slim | |
+MAINTAINER "Plone Community" http://community.plone.org | |
+ | |
+RUN useradd --system -U -u 500 plone \ | |
+ && mkdir -p /plone /data/filestorage /data/blobstorage \ | |
+ && chown -R plone:plone /plone /data | |
+ | |
+ENV PLONE_MAJOR=5.0 | |
+ENV PLONE_VERSION=5.0.2 | |
+ENV PLONE_MD5=b141f65cef30e3e47456b7a6968616c5 | |
+ | |
+RUN buildDeps="curl sudo python-setuptools python-dev build-essential libssl-dev libxml2-dev libxslt1-dev libbz2-dev libjpeg62-turbo-dev" \ | |
+ && runDeps="libxml2 libxslt1.1 libjpeg62 rsync" \ | |
+ && apt-get update \ | |
+ && apt-get install -y --no-install-recommends $buildDeps \ | |
+ && curl -o Plone.tgz -SL https://launchpad.net/plone/$PLONE_MAJOR/$PLONE_VERSION/+download/Plone-$PLONE_VERSION-UnifiedInstaller.tgz \ | |
+ && echo "$PLONE_MD5 Plone.tgz" | md5sum -c - \ | |
+ && tar -xzf Plone.tgz \ | |
+ && ./Plone-$PLONE_VERSION-UnifiedInstaller/install.sh \ | |
+ --password=admin \ | |
+ --daemon-user=plone \ | |
+ --owner=plone \ | |
+ --group=plone \ | |
+ --target=/plone \ | |
+ --instance=instance \ | |
+ --var=/data \ | |
+ none \ | |
+ && cd /plone/instance \ | |
+ && sed -i 's/parts =/parts =\n zeoserver/g' buildout.cfg \ | |
+ && echo '\n[zeoserver]\n<= zeoserver_base\nrecipe = plone.recipe.zeoserver' >> buildout.cfg \ | |
+ && sudo -u plone bin/buildout \ | |
+ && chown -R plone:plone /plone /data \ | |
+ && rm -rf /Plone* \ | |
+ && SUDO_FORCE_REMOVE=yes apt-get purge -y --auto-remove $buildDeps \ | |
+ && apt-get install -y --no-install-recommends $runDeps \ | |
+ && rm -rf /var/lib/apt/lists/* \ | |
+ && rm -rf /plone/buildout-cache/downloads/* \ | |
+ && find /plone \( -type f -a -name '*.pyc' -o -name '*.pyo' \) -exec rm -rf '{}' + | |
+ | |
+VOLUME /data | |
+ | |
+COPY docker-initialize.py docker-entrypoint.sh / | |
+ | |
+EXPOSE 8080 | |
+USER plone | |
+WORKDIR /plone/instance | |
+ | |
+ENTRYPOINT ["/docker-entrypoint.sh"] | |
+CMD ["start"] | |
diff --git a/plone_5.0.2/docker-entrypoint.sh b/plone_5.0.2/docker-entrypoint.sh | |
new file mode 100755 | |
index 0000000..5644bdb | |
--- /dev/null | |
+++ b/plone_5.0.2/docker-entrypoint.sh | |
@@ -0,0 +1,55 @@ | |
+#!/bin/bash | |
+set -e | |
+ | |
+COMMANDS="debug help logtail show stop adduser fg kill quit run wait console foreground logreopen reload shell status" | |
+START="start restart zeoserver" | |
+CMD="bin/instance" | |
+ | |
+python /docker-initialize.py | |
+ | |
+if [ -e "custom.cfg" ]; then | |
+ if [ ! -e "bin/develop" ]; then | |
+ bin/buildout -c custom.cfg | |
+ fi | |
+fi | |
+ | |
+if [[ "$1" == "zeo"* ]]; then | |
+ CMD="bin/zeoserver" | |
+fi | |
+ | |
+if [ -z "$HEALTH_CHECK_TIMEOUT" ]; then | |
+ HEALTH_CHECK_TIMEOUT=1 | |
+fi | |
+ | |
+if [ -z "$HEALTH_CHECK_INTERVAL" ]; then | |
+ HEALTH_CHECK_INTERVAL=1 | |
+fi | |
+ | |
+if [[ $START == *"$1"* ]]; then | |
+ _stop() { | |
+ $CMD stop | |
+ kill -TERM $child 2>/dev/null | |
+ } | |
+ | |
+ trap _stop SIGTERM SIGINT | |
+ $CMD start | |
+ $CMD logtail & | |
+ child=$! | |
+ | |
+ pid=`$CMD status | sed 's/[^0-9]*//g'` | |
+ if [ ! -z "$pid" ]; then | |
+ echo "Application running on pid=$pid" | |
+ sleep "$HEALTH_CHECK_TIMEOUT" | |
+ while kill -0 "$pid" 2> /dev/null; do | |
+ sleep "$HEALTH_CHECK_INTERVAL" | |
+ done | |
+ else | |
+ echo "Application didn't start normally. Shutting down!" | |
+ _stop | |
+ fi | |
+else | |
+ if [[ $COMMANDS == *"$1"* ]]; then | |
+ exec bin/instance "$@" | |
+ fi | |
+ exec "$@" | |
+fi | |
diff --git a/plone_5.0.2/docker-initialize.py b/plone_5.0.2/docker-initialize.py | |
new file mode 100755 | |
index 0000000..087bde9 | |
--- /dev/null | |
+++ b/plone_5.0.2/docker-initialize.py | |
@@ -0,0 +1,178 @@ | |
+#!/plone/instance/bin/python | |
+ | |
+import re | |
+import os | |
+import warnings | |
+warnings.simplefilter('always', DeprecationWarning) | |
+ | |
+class Environment(object): | |
+ """ Configure container via environment variables | |
+ """ | |
+ def __init__(self, env=os.environ, | |
+ zope_conf="/plone/instance/parts/instance/etc/zope.conf", | |
+ custom_conf="/plone/instance/custom.cfg", | |
+ zeopack_conf="/plone/instance/bin/zeopack", | |
+ zeoserver_conf="/plone/instance/parts/zeoserver/etc/zeo.conf" | |
+ ): | |
+ self.env = env | |
+ self.zope_conf = zope_conf | |
+ self.custom_conf = custom_conf | |
+ self.zeopack_conf = zeopack_conf | |
+ self.zeoserver_conf = zeoserver_conf | |
+ | |
+ def zeoclient(self): | |
+ """ ZEO Client | |
+ """ | |
+ server = self.env.get("ZEO_ADDRESS", None) | |
+ if not server: | |
+ return | |
+ | |
+ config = "" | |
+ with open(self.zope_conf, "r") as cfile: | |
+ config = cfile.read() | |
+ | |
+ # Already initialized | |
+ if "<blobstorage>" not in config: | |
+ return | |
+ | |
+ read_only = self.env.get("ZEO_READ_ONLY", "false") | |
+ zeo_ro_fallback = self.env.get("ZEO_CLIENT_READ_ONLY_FALLBACK", "false") | |
+ shared_blob_dir=self.env.get("ZEO_SHARED_BLOB_DIR", "off") | |
+ zeo_storage=self.env.get("ZEO_STORAGE", "1") | |
+ zeo_client_cache_size=self.env.get("ZEO_CLIENT_CACHE_SIZE", "128MB") | |
+ zeo_conf = ZEO_TEMPLATE.format( | |
+ zeo_address=server, | |
+ read_only=read_only, | |
+ zeo_client_read_only_fallback=zeo_ro_fallback, | |
+ shared_blob_dir=shared_blob_dir, | |
+ zeo_storage=zeo_storage, | |
+ zeo_client_cache_size=zeo_client_cache_size | |
+ ) | |
+ | |
+ pattern = re.compile(r"<blobstorage>.+</blobstorage>", re.DOTALL) | |
+ config = re.sub(pattern, zeo_conf, config) | |
+ | |
+ with open(self.zope_conf, "w") as cfile: | |
+ cfile.write(config) | |
+ | |
+ def zeopack(self): | |
+ """ ZEO Pack | |
+ """ | |
+ server = self.env.get("ZEO_ADDRESS", None) | |
+ if not server: | |
+ return | |
+ | |
+ if ":" in server: | |
+ host, port = server.split(":") | |
+ else: | |
+ host, port = (server, "8100") | |
+ | |
+ with open(self.zeopack_conf, 'r') as cfile: | |
+ text = cfile.read() | |
+ text = text.replace('address = "8100"', 'address = "%s"' % server) | |
+ text = text.replace('host = "127.0.0.1"', 'host = "%s"' % host) | |
+ text = text.replace('port = "8100"', 'port = "%s"' % port) | |
+ | |
+ with open(self.zeopack_conf, 'w') as cfile: | |
+ cfile.write(text) | |
+ | |
+ def zeoserver(self): | |
+ """ ZEO Server | |
+ """ | |
+ pack_keep_old = self.env.get("ZEO_PACK_KEEP_OLD", '') | |
+ if pack_keep_old.lower() in ("false", "no", "0", "n", "f"): | |
+ with open(self.zeoserver_conf, 'r') as cfile: | |
+ text = cfile.read() | |
+ if 'pack-keep-old' not in text: | |
+ text = text.replace( | |
+ '</filestorage>', | |
+ ' pack-keep-old false\n</filestorage>' | |
+ ) | |
+ | |
+ with open(self.zeoserver_conf, 'w') as cfile: | |
+ cfile.write(text) | |
+ | |
+ def buildout(self): | |
+ """ Buildout from environment variables | |
+ """ | |
+ # Already configured | |
+ if os.path.exists(self.custom_conf): | |
+ return | |
+ | |
+ eggs = self.env.get("PLONE_ADDONS", | |
+ self.env.get("ADDONS", "")).strip().split() | |
+ if not eggs: | |
+ eggs = self.env.get("BUILDOUT_EGGS", "").strip().split() | |
+ if eggs: | |
+ warnings.warn( | |
+ "BUILDOUT_EGGS is deprecated. Please use " | |
+ "PLONE_ADDONS instead !!!", DeprecationWarning) | |
+ | |
+ zcml = self.env.get("PLONE_ZCML", | |
+ self.env.get("ZCML", "")).strip().split() | |
+ if not zcml: | |
+ zcml = self.env.get("BUILDOUT_ZCML", "").strip().split() | |
+ if zcml: | |
+ warnings.warn( | |
+ "BUILDOUT_ZCML is deprecated. Please use " | |
+ "PLONE_ZCML instead !!!", DeprecationWarning) | |
+ | |
+ develop = self.env.get("PLONE_DEVELOP", | |
+ self.env.get("DEVELOP", "")).strip().split() | |
+ if not develop: | |
+ develop = self.env.get("BUILDOUT_DEVELOP", "").strip().split() | |
+ if develop: | |
+ warnings.warn( | |
+ "BUILDOUT_DEVELOP is deprecated. Please use " | |
+ "PLONE_DEVELOP instead !!!", DeprecationWarning) | |
+ | |
+ if not (eggs or zcml or develop): | |
+ return | |
+ | |
+ buildout = BUILDOUT_TEMPLATE.format( | |
+ eggs="\n\t".join(eggs), | |
+ zcml="\n\t".join(zcml), | |
+ develop="\n\t".join(develop) | |
+ ) | |
+ | |
+ with open(self.custom_conf, 'w') as cfile: | |
+ cfile.write(buildout) | |
+ | |
+ def setup(self, **kwargs): | |
+ self.buildout() | |
+ self.zeoclient() | |
+ self.zeopack() | |
+ self.zeoserver() | |
+ | |
+ __call__ = setup | |
+ | |
+ZEO_TEMPLATE = """ | |
+ <zeoclient> | |
+ read-only {read_only} | |
+ read-only-fallback {zeo_client_read_only_fallback} | |
+ blob-dir /data/blobstorage | |
+ shared-blob-dir {shared_blob_dir} | |
+ server {zeo_address} | |
+ storage {zeo_storage} | |
+ name zeostorage | |
+ var /plone/instance/parts/instance/var | |
+ cache-size {zeo_client_cache_size} | |
+ </zeoclient> | |
+""".strip() | |
+ | |
+BUILDOUT_TEMPLATE = """ | |
+[buildout] | |
+extends = develop.cfg | |
+develop += {develop} | |
+eggs += {eggs} | |
+zcml += {zcml} | |
+""" | |
+ | |
+def initialize(): | |
+ """ Configure Plone instance as ZEO Client | |
+ """ | |
+ environment = Environment() | |
+ environment.setup() | |
+ | |
+if __name__ == "__main__": | |
+ initialize() | |
diff --git a/plone_5.0.3/Dockerfile b/plone_5.0.3/Dockerfile | |
new file mode 100644 | |
index 0000000..947c820 | |
--- /dev/null | |
+++ b/plone_5.0.3/Dockerfile | |
@@ -0,0 +1,49 @@ | |
+FROM python:2.7-slim | |
+MAINTAINER "Plone Community" http://community.plone.org | |
+ | |
+RUN useradd --system -U -u 500 plone \ | |
+ && mkdir -p /plone /data/filestorage /data/blobstorage \ | |
+ && chown -R plone:plone /plone /data | |
+ | |
+ENV PLONE_MAJOR=5.0 | |
+ENV PLONE_VERSION=5.0.3 | |
+ENV PLONE_MD5=6c0f560c3c5f23d8838c2df9a3b380f9 | |
+ | |
+RUN buildDeps="curl sudo python-setuptools python-dev build-essential libssl-dev libxml2-dev libxslt1-dev libbz2-dev libjpeg62-turbo-dev" \ | |
+ && runDeps="libxml2 libxslt1.1 libjpeg62 rsync" \ | |
+ && apt-get update \ | |
+ && apt-get install -y --no-install-recommends $buildDeps \ | |
+ && curl -o Plone.tgz -SL https://launchpad.net/plone/$PLONE_MAJOR/$PLONE_VERSION/+download/Plone-$PLONE_VERSION-UnifiedInstaller.tgz \ | |
+ && echo "$PLONE_MD5 Plone.tgz" | md5sum -c - \ | |
+ && tar -xzf Plone.tgz \ | |
+ && ./Plone-$PLONE_VERSION-UnifiedInstaller/install.sh \ | |
+ --password=admin \ | |
+ --daemon-user=plone \ | |
+ --owner=plone \ | |
+ --group=plone \ | |
+ --target=/plone \ | |
+ --instance=instance \ | |
+ --var=/data \ | |
+ none \ | |
+ && cd /plone/instance \ | |
+ && sed -i 's/parts =/parts =\n zeoserver/g' buildout.cfg \ | |
+ && echo '\n[zeoserver]\n<= zeoserver_base\nrecipe = plone.recipe.zeoserver' >> buildout.cfg \ | |
+ && sudo -u plone bin/buildout \ | |
+ && chown -R plone:plone /plone /data \ | |
+ && rm -rf /Plone* \ | |
+ && SUDO_FORCE_REMOVE=yes apt-get purge -y --auto-remove $buildDeps \ | |
+ && apt-get install -y --no-install-recommends $runDeps \ | |
+ && rm -rf /var/lib/apt/lists/* \ | |
+ && rm -rf /plone/buildout-cache/downloads/* \ | |
+ && find /plone \( -type f -a -name '*.pyc' -o -name '*.pyo' \) -exec rm -rf '{}' + | |
+ | |
+VOLUME /data | |
+ | |
+COPY docker-initialize.py docker-entrypoint.sh / | |
+ | |
+EXPOSE 8080 | |
+USER plone | |
+WORKDIR /plone/instance | |
+ | |
+ENTRYPOINT ["/docker-entrypoint.sh"] | |
+CMD ["start"] | |
diff --git a/plone_5.0.3/docker-entrypoint.sh b/plone_5.0.3/docker-entrypoint.sh | |
new file mode 100755 | |
index 0000000..5644bdb | |
--- /dev/null | |
+++ b/plone_5.0.3/docker-entrypoint.sh | |
@@ -0,0 +1,55 @@ | |
+#!/bin/bash | |
+set -e | |
+ | |
+COMMANDS="debug help logtail show stop adduser fg kill quit run wait console foreground logreopen reload shell status" | |
+START="start restart zeoserver" | |
+CMD="bin/instance" | |
+ | |
+python /docker-initialize.py | |
+ | |
+if [ -e "custom.cfg" ]; then | |
+ if [ ! -e "bin/develop" ]; then | |
+ bin/buildout -c custom.cfg | |
+ fi | |
+fi | |
+ | |
+if [[ "$1" == "zeo"* ]]; then | |
+ CMD="bin/zeoserver" | |
+fi | |
+ | |
+if [ -z "$HEALTH_CHECK_TIMEOUT" ]; then | |
+ HEALTH_CHECK_TIMEOUT=1 | |
+fi | |
+ | |
+if [ -z "$HEALTH_CHECK_INTERVAL" ]; then | |
+ HEALTH_CHECK_INTERVAL=1 | |
+fi | |
+ | |
+if [[ $START == *"$1"* ]]; then | |
+ _stop() { | |
+ $CMD stop | |
+ kill -TERM $child 2>/dev/null | |
+ } | |
+ | |
+ trap _stop SIGTERM SIGINT | |
+ $CMD start | |
+ $CMD logtail & | |
+ child=$! | |
+ | |
+ pid=`$CMD status | sed 's/[^0-9]*//g'` | |
+ if [ ! -z "$pid" ]; then | |
+ echo "Application running on pid=$pid" | |
+ sleep "$HEALTH_CHECK_TIMEOUT" | |
+ while kill -0 "$pid" 2> /dev/null; do | |
+ sleep "$HEALTH_CHECK_INTERVAL" | |
+ done | |
+ else | |
+ echo "Application didn't start normally. Shutting down!" | |
+ _stop | |
+ fi | |
+else | |
+ if [[ $COMMANDS == *"$1"* ]]; then | |
+ exec bin/instance "$@" | |
+ fi | |
+ exec "$@" | |
+fi | |
diff --git a/plone_5.0.3/docker-initialize.py b/plone_5.0.3/docker-initialize.py | |
new file mode 100755 | |
index 0000000..087bde9 | |
--- /dev/null | |
+++ b/plone_5.0.3/docker-initialize.py | |
@@ -0,0 +1,178 @@ | |
+#!/plone/instance/bin/python | |
+ | |
+import re | |
+import os | |
+import warnings | |
+warnings.simplefilter('always', DeprecationWarning) | |
+ | |
+class Environment(object): | |
+ """ Configure container via environment variables | |
+ """ | |
+ def __init__(self, env=os.environ, | |
+ zope_conf="/plone/instance/parts/instance/etc/zope.conf", | |
+ custom_conf="/plone/instance/custom.cfg", | |
+ zeopack_conf="/plone/instance/bin/zeopack", | |
+ zeoserver_conf="/plone/instance/parts/zeoserver/etc/zeo.conf" | |
+ ): | |
+ self.env = env | |
+ self.zope_conf = zope_conf | |
+ self.custom_conf = custom_conf | |
+ self.zeopack_conf = zeopack_conf | |
+ self.zeoserver_conf = zeoserver_conf | |
+ | |
+ def zeoclient(self): | |
+ """ ZEO Client | |
+ """ | |
+ server = self.env.get("ZEO_ADDRESS", None) | |
+ if not server: | |
+ return | |
+ | |
+ config = "" | |
+ with open(self.zope_conf, "r") as cfile: | |
+ config = cfile.read() | |
+ | |
+ # Already initialized | |
+ if "<blobstorage>" not in config: | |
+ return | |
+ | |
+ read_only = self.env.get("ZEO_READ_ONLY", "false") | |
+ zeo_ro_fallback = self.env.get("ZEO_CLIENT_READ_ONLY_FALLBACK", "false") | |
+ shared_blob_dir=self.env.get("ZEO_SHARED_BLOB_DIR", "off") | |
+ zeo_storage=self.env.get("ZEO_STORAGE", "1") | |
+ zeo_client_cache_size=self.env.get("ZEO_CLIENT_CACHE_SIZE", "128MB") | |
+ zeo_conf = ZEO_TEMPLATE.format( | |
+ zeo_address=server, | |
+ read_only=read_only, | |
+ zeo_client_read_only_fallback=zeo_ro_fallback, | |
+ shared_blob_dir=shared_blob_dir, | |
+ zeo_storage=zeo_storage, | |
+ zeo_client_cache_size=zeo_client_cache_size | |
+ ) | |
+ | |
+ pattern = re.compile(r"<blobstorage>.+</blobstorage>", re.DOTALL) | |
+ config = re.sub(pattern, zeo_conf, config) | |
+ | |
+ with open(self.zope_conf, "w") as cfile: | |
+ cfile.write(config) | |
+ | |
+ def zeopack(self): | |
+ """ ZEO Pack | |
+ """ | |
+ server = self.env.get("ZEO_ADDRESS", None) | |
+ if not server: | |
+ return | |
+ | |
+ if ":" in server: | |
+ host, port = server.split(":") | |
+ else: | |
+ host, port = (server, "8100") | |
+ | |
+ with open(self.zeopack_conf, 'r') as cfile: | |
+ text = cfile.read() | |
+ text = text.replace('address = "8100"', 'address = "%s"' % server) | |
+ text = text.replace('host = "127.0.0.1"', 'host = "%s"' % host) | |
+ text = text.replace('port = "8100"', 'port = "%s"' % port) | |
+ | |
+ with open(self.zeopack_conf, 'w') as cfile: | |
+ cfile.write(text) | |
+ | |
+ def zeoserver(self): | |
+ """ ZEO Server | |
+ """ | |
+ pack_keep_old = self.env.get("ZEO_PACK_KEEP_OLD", '') | |
+ if pack_keep_old.lower() in ("false", "no", "0", "n", "f"): | |
+ with open(self.zeoserver_conf, 'r') as cfile: | |
+ text = cfile.read() | |
+ if 'pack-keep-old' not in text: | |
+ text = text.replace( | |
+ '</filestorage>', | |
+ ' pack-keep-old false\n</filestorage>' | |
+ ) | |
+ | |
+ with open(self.zeoserver_conf, 'w') as cfile: | |
+ cfile.write(text) | |
+ | |
+ def buildout(self): | |
+ """ Buildout from environment variables | |
+ """ | |
+ # Already configured | |
+ if os.path.exists(self.custom_conf): | |
+ return | |
+ | |
+ eggs = self.env.get("PLONE_ADDONS", | |
+ self.env.get("ADDONS", "")).strip().split() | |
+ if not eggs: | |
+ eggs = self.env.get("BUILDOUT_EGGS", "").strip().split() | |
+ if eggs: | |
+ warnings.warn( | |
+ "BUILDOUT_EGGS is deprecated. Please use " | |
+ "PLONE_ADDONS instead !!!", DeprecationWarning) | |
+ | |
+ zcml = self.env.get("PLONE_ZCML", | |
+ self.env.get("ZCML", "")).strip().split() | |
+ if not zcml: | |
+ zcml = self.env.get("BUILDOUT_ZCML", "").strip().split() | |
+ if zcml: | |
+ warnings.warn( | |
+ "BUILDOUT_ZCML is deprecated. Please use " | |
+ "PLONE_ZCML instead !!!", DeprecationWarning) | |
+ | |
+ develop = self.env.get("PLONE_DEVELOP", | |
+ self.env.get("DEVELOP", "")).strip().split() | |
+ if not develop: | |
+ develop = self.env.get("BUILDOUT_DEVELOP", "").strip().split() | |
+ if develop: | |
+ warnings.warn( | |
+ "BUILDOUT_DEVELOP is deprecated. Please use " | |
+ "PLONE_DEVELOP instead !!!", DeprecationWarning) | |
+ | |
+ if not (eggs or zcml or develop): | |
+ return | |
+ | |
+ buildout = BUILDOUT_TEMPLATE.format( | |
+ eggs="\n\t".join(eggs), | |
+ zcml="\n\t".join(zcml), | |
+ develop="\n\t".join(develop) | |
+ ) | |
+ | |
+ with open(self.custom_conf, 'w') as cfile: | |
+ cfile.write(buildout) | |
+ | |
+ def setup(self, **kwargs): | |
+ self.buildout() | |
+ self.zeoclient() | |
+ self.zeopack() | |
+ self.zeoserver() | |
+ | |
+ __call__ = setup | |
+ | |
+ZEO_TEMPLATE = """ | |
+ <zeoclient> | |
+ read-only {read_only} | |
+ read-only-fallback {zeo_client_read_only_fallback} | |
+ blob-dir /data/blobstorage | |
+ shared-blob-dir {shared_blob_dir} | |
+ server {zeo_address} | |
+ storage {zeo_storage} | |
+ name zeostorage | |
+ var /plone/instance/parts/instance/var | |
+ cache-size {zeo_client_cache_size} | |
+ </zeoclient> | |
+""".strip() | |
+ | |
+BUILDOUT_TEMPLATE = """ | |
+[buildout] | |
+extends = develop.cfg | |
+develop += {develop} | |
+eggs += {eggs} | |
+zcml += {zcml} | |
+""" | |
+ | |
+def initialize(): | |
+ """ Configure Plone instance as ZEO Client | |
+ """ | |
+ environment = Environment() | |
+ environment.setup() | |
+ | |
+if __name__ == "__main__": | |
+ initialize() | |
diff --git a/plone_5.0.4/Dockerfile b/plone_5.0.4/Dockerfile | |
new file mode 100644 | |
index 0000000..c7578c5 | |
--- /dev/null | |
+++ b/plone_5.0.4/Dockerfile | |
@@ -0,0 +1,49 @@ | |
+FROM python:2.7-slim | |
+MAINTAINER "Plone Community" http://community.plone.org | |
+ | |
+RUN useradd --system -U -u 500 plone \ | |
+ && mkdir -p /plone /data/filestorage /data/blobstorage \ | |
+ && chown -R plone:plone /plone /data | |
+ | |
+ENV PLONE_MAJOR=5.0 | |
+ENV PLONE_VERSION=5.0.4 | |
+ENV PLONE_MD5=4cbef57b520e83126c2b2c4b0e55db51 | |
+ | |
+RUN buildDeps="curl sudo python-setuptools python-dev build-essential libssl-dev libxml2-dev libxslt1-dev libbz2-dev libjpeg62-turbo-dev" \ | |
+ && runDeps="libxml2 libxslt1.1 libjpeg62 rsync" \ | |
+ && apt-get update \ | |
+ && apt-get install -y --no-install-recommends $buildDeps \ | |
+ && curl -o Plone.tgz -SL https://launchpad.net/plone/$PLONE_MAJOR/$PLONE_VERSION/+download/Plone-$PLONE_VERSION-UnifiedInstaller.tgz \ | |
+ && echo "$PLONE_MD5 Plone.tgz" | md5sum -c - \ | |
+ && tar -xzf Plone.tgz \ | |
+ && ./Plone-$PLONE_VERSION-UnifiedInstaller/install.sh \ | |
+ --password=admin \ | |
+ --daemon-user=plone \ | |
+ --owner=plone \ | |
+ --group=plone \ | |
+ --target=/plone \ | |
+ --instance=instance \ | |
+ --var=/data \ | |
+ none \ | |
+ && cd /plone/instance \ | |
+ && sed -i 's/parts =/parts =\n zeoserver/g' buildout.cfg \ | |
+ && echo '\n[zeoserver]\n<= zeoserver_base\nrecipe = plone.recipe.zeoserver' >> buildout.cfg \ | |
+ && sudo -u plone bin/buildout \ | |
+ && chown -R plone:plone /plone /data \ | |
+ && rm -rf /Plone* \ | |
+ && SUDO_FORCE_REMOVE=yes apt-get purge -y --auto-remove $buildDeps \ | |
+ && apt-get install -y --no-install-recommends $runDeps \ | |
+ && rm -rf /var/lib/apt/lists/* \ | |
+ && rm -rf /plone/buildout-cache/downloads/* \ | |
+ && find /plone \( -type f -a -name '*.pyc' -o -name '*.pyo' \) -exec rm -rf '{}' + | |
+ | |
+VOLUME /data | |
+ | |
+COPY docker-initialize.py docker-entrypoint.sh / | |
+ | |
+EXPOSE 8080 | |
+USER plone | |
+WORKDIR /plone/instance | |
+ | |
+ENTRYPOINT ["/docker-entrypoint.sh"] | |
+CMD ["start"] | |
diff --git a/plone_5.0.4/docker-entrypoint.sh b/plone_5.0.4/docker-entrypoint.sh | |
new file mode 100755 | |
index 0000000..5644bdb | |
--- /dev/null | |
+++ b/plone_5.0.4/docker-entrypoint.sh | |
@@ -0,0 +1,55 @@ | |
+#!/bin/bash | |
+set -e | |
+ | |
+COMMANDS="debug help logtail show stop adduser fg kill quit run wait console foreground logreopen reload shell status" | |
+START="start restart zeoserver" | |
+CMD="bin/instance" | |
+ | |
+python /docker-initialize.py | |
+ | |
+if [ -e "custom.cfg" ]; then | |
+ if [ ! -e "bin/develop" ]; then | |
+ bin/buildout -c custom.cfg | |
+ fi | |
+fi | |
+ | |
+if [[ "$1" == "zeo"* ]]; then | |
+ CMD="bin/zeoserver" | |
+fi | |
+ | |
+if [ -z "$HEALTH_CHECK_TIMEOUT" ]; then | |
+ HEALTH_CHECK_TIMEOUT=1 | |
+fi | |
+ | |
+if [ -z "$HEALTH_CHECK_INTERVAL" ]; then | |
+ HEALTH_CHECK_INTERVAL=1 | |
+fi | |
+ | |
+if [[ $START == *"$1"* ]]; then | |
+ _stop() { | |
+ $CMD stop | |
+ kill -TERM $child 2>/dev/null | |
+ } | |
+ | |
+ trap _stop SIGTERM SIGINT | |
+ $CMD start | |
+ $CMD logtail & | |
+ child=$! | |
+ | |
+ pid=`$CMD status | sed 's/[^0-9]*//g'` | |
+ if [ ! -z "$pid" ]; then | |
+ echo "Application running on pid=$pid" | |
+ sleep "$HEALTH_CHECK_TIMEOUT" | |
+ while kill -0 "$pid" 2> /dev/null; do | |
+ sleep "$HEALTH_CHECK_INTERVAL" | |
+ done | |
+ else | |
+ echo "Application didn't start normally. Shutting down!" | |
+ _stop | |
+ fi | |
+else | |
+ if [[ $COMMANDS == *"$1"* ]]; then | |
+ exec bin/instance "$@" | |
+ fi | |
+ exec "$@" | |
+fi | |
diff --git a/plone_5.0.4/docker-initialize.py b/plone_5.0.4/docker-initialize.py | |
new file mode 100755 | |
index 0000000..087bde9 | |
--- /dev/null | |
+++ b/plone_5.0.4/docker-initialize.py | |
@@ -0,0 +1,178 @@ | |
+#!/plone/instance/bin/python | |
+ | |
+import re | |
+import os | |
+import warnings | |
+warnings.simplefilter('always', DeprecationWarning) | |
+ | |
+class Environment(object): | |
+ """ Configure container via environment variables | |
+ """ | |
+ def __init__(self, env=os.environ, | |
+ zope_conf="/plone/instance/parts/instance/etc/zope.conf", | |
+ custom_conf="/plone/instance/custom.cfg", | |
+ zeopack_conf="/plone/instance/bin/zeopack", | |
+ zeoserver_conf="/plone/instance/parts/zeoserver/etc/zeo.conf" | |
+ ): | |
+ self.env = env | |
+ self.zope_conf = zope_conf | |
+ self.custom_conf = custom_conf | |
+ self.zeopack_conf = zeopack_conf | |
+ self.zeoserver_conf = zeoserver_conf | |
+ | |
+ def zeoclient(self): | |
+ """ ZEO Client | |
+ """ | |
+ server = self.env.get("ZEO_ADDRESS", None) | |
+ if not server: | |
+ return | |
+ | |
+ config = "" | |
+ with open(self.zope_conf, "r") as cfile: | |
+ config = cfile.read() | |
+ | |
+ # Already initialized | |
+ if "<blobstorage>" not in config: | |
+ return | |
+ | |
+ read_only = self.env.get("ZEO_READ_ONLY", "false") | |
+ zeo_ro_fallback = self.env.get("ZEO_CLIENT_READ_ONLY_FALLBACK", "false") | |
+ shared_blob_dir=self.env.get("ZEO_SHARED_BLOB_DIR", "off") | |
+ zeo_storage=self.env.get("ZEO_STORAGE", "1") | |
+ zeo_client_cache_size=self.env.get("ZEO_CLIENT_CACHE_SIZE", "128MB") | |
+ zeo_conf = ZEO_TEMPLATE.format( | |
+ zeo_address=server, | |
+ read_only=read_only, | |
+ zeo_client_read_only_fallback=zeo_ro_fallback, | |
+ shared_blob_dir=shared_blob_dir, | |
+ zeo_storage=zeo_storage, | |
+ zeo_client_cache_size=zeo_client_cache_size | |
+ ) | |
+ | |
+ pattern = re.compile(r"<blobstorage>.+</blobstorage>", re.DOTALL) | |
+ config = re.sub(pattern, zeo_conf, config) | |
+ | |
+ with open(self.zope_conf, "w") as cfile: | |
+ cfile.write(config) | |
+ | |
+ def zeopack(self): | |
+ """ ZEO Pack | |
+ """ | |
+ server = self.env.get("ZEO_ADDRESS", None) | |
+ if not server: | |
+ return | |
+ | |
+ if ":" in server: | |
+ host, port = server.split(":") | |
+ else: | |
+ host, port = (server, "8100") | |
+ | |
+ with open(self.zeopack_conf, 'r') as cfile: | |
+ text = cfile.read() | |
+ text = text.replace('address = "8100"', 'address = "%s"' % server) | |
+ text = text.replace('host = "127.0.0.1"', 'host = "%s"' % host) | |
+ text = text.replace('port = "8100"', 'port = "%s"' % port) | |
+ | |
+ with open(self.zeopack_conf, 'w') as cfile: | |
+ cfile.write(text) | |
+ | |
+ def zeoserver(self): | |
+ """ ZEO Server | |
+ """ | |
+ pack_keep_old = self.env.get("ZEO_PACK_KEEP_OLD", '') | |
+ if pack_keep_old.lower() in ("false", "no", "0", "n", "f"): | |
+ with open(self.zeoserver_conf, 'r') as cfile: | |
+ text = cfile.read() | |
+ if 'pack-keep-old' not in text: | |
+ text = text.replace( | |
+ '</filestorage>', | |
+ ' pack-keep-old false\n</filestorage>' | |
+ ) | |
+ | |
+ with open(self.zeoserver_conf, 'w') as cfile: | |
+ cfile.write(text) | |
+ | |
+ def buildout(self): | |
+ """ Buildout from environment variables | |
+ """ | |
+ # Already configured | |
+ if os.path.exists(self.custom_conf): | |
+ return | |
+ | |
+ eggs = self.env.get("PLONE_ADDONS", | |
+ self.env.get("ADDONS", "")).strip().split() | |
+ if not eggs: | |
+ eggs = self.env.get("BUILDOUT_EGGS", "").strip().split() | |
+ if eggs: | |
+ warnings.warn( | |
+ "BUILDOUT_EGGS is deprecated. Please use " | |
+ "PLONE_ADDONS instead !!!", DeprecationWarning) | |
+ | |
+ zcml = self.env.get("PLONE_ZCML", | |
+ self.env.get("ZCML", "")).strip().split() | |
+ if not zcml: | |
+ zcml = self.env.get("BUILDOUT_ZCML", "").strip().split() | |
+ if zcml: | |
+ warnings.warn( | |
+ "BUILDOUT_ZCML is deprecated. Please use " | |
+ "PLONE_ZCML instead !!!", DeprecationWarning) | |
+ | |
+ develop = self.env.get("PLONE_DEVELOP", | |
+ self.env.get("DEVELOP", "")).strip().split() | |
+ if not develop: | |
+ develop = self.env.get("BUILDOUT_DEVELOP", "").strip().split() | |
+ if develop: | |
+ warnings.warn( | |
+ "BUILDOUT_DEVELOP is deprecated. Please use " | |
+ "PLONE_DEVELOP instead !!!", DeprecationWarning) | |
+ | |
+ if not (eggs or zcml or develop): | |
+ return | |
+ | |
+ buildout = BUILDOUT_TEMPLATE.format( | |
+ eggs="\n\t".join(eggs), | |
+ zcml="\n\t".join(zcml), | |
+ develop="\n\t".join(develop) | |
+ ) | |
+ | |
+ with open(self.custom_conf, 'w') as cfile: | |
+ cfile.write(buildout) | |
+ | |
+ def setup(self, **kwargs): | |
+ self.buildout() | |
+ self.zeoclient() | |
+ self.zeopack() | |
+ self.zeoserver() | |
+ | |
+ __call__ = setup | |
+ | |
+ZEO_TEMPLATE = """ | |
+ <zeoclient> | |
+ read-only {read_only} | |
+ read-only-fallback {zeo_client_read_only_fallback} | |
+ blob-dir /data/blobstorage | |
+ shared-blob-dir {shared_blob_dir} | |
+ server {zeo_address} | |
+ storage {zeo_storage} | |
+ name zeostorage | |
+ var /plone/instance/parts/instance/var | |
+ cache-size {zeo_client_cache_size} | |
+ </zeoclient> | |
+""".strip() | |
+ | |
+BUILDOUT_TEMPLATE = """ | |
+[buildout] | |
+extends = develop.cfg | |
+develop += {develop} | |
+eggs += {eggs} | |
+zcml += {zcml} | |
+""" | |
+ | |
+def initialize(): | |
+ """ Configure Plone instance as ZEO Client | |
+ """ | |
+ environment = Environment() | |
+ environment.setup() | |
+ | |
+if __name__ == "__main__": | |
+ initialize() | |
diff --git a/plone_5.0.5/Dockerfile b/plone_5.0.5/Dockerfile | |
new file mode 100644 | |
index 0000000..3364c59 | |
--- /dev/null | |
+++ b/plone_5.0.5/Dockerfile | |
@@ -0,0 +1,49 @@ | |
+FROM python:2.7-slim | |
+MAINTAINER "Plone Community" http://community.plone.org | |
+ | |
+RUN useradd --system -U -u 500 plone \ | |
+ && mkdir -p /plone /data/filestorage /data/blobstorage \ | |
+ && chown -R plone:plone /plone /data | |
+ | |
+ENV PLONE_MAJOR=5.0 | |
+ENV PLONE_VERSION=5.0.5 | |
+ENV PLONE_MD5=4072f0dda7ecd31d4d19827fd2f06d67 | |
+ | |
+RUN buildDeps="curl sudo python-setuptools python-dev build-essential libssl-dev libxml2-dev libxslt1-dev libbz2-dev libjpeg62-turbo-dev" \ | |
+ && runDeps="libxml2 libxslt1.1 libjpeg62 rsync" \ | |
+ && apt-get update \ | |
+ && apt-get install -y --no-install-recommends $buildDeps \ | |
+ && curl -o Plone.tgz -SL https://launchpad.net/plone/$PLONE_MAJOR/$PLONE_VERSION/+download/Plone-$PLONE_VERSION-UnifiedInstaller.tgz \ | |
+ && echo "$PLONE_MD5 Plone.tgz" | md5sum -c - \ | |
+ && tar -xzf Plone.tgz \ | |
+ && ./Plone-$PLONE_VERSION-UnifiedInstaller/install.sh \ | |
+ --password=admin \ | |
+ --daemon-user=plone \ | |
+ --owner=plone \ | |
+ --group=plone \ | |
+ --target=/plone \ | |
+ --instance=instance \ | |
+ --var=/data \ | |
+ none \ | |
+ && cd /plone/instance \ | |
+ && sed -i 's/parts =/parts =\n zeoserver/g' buildout.cfg \ | |
+ && echo '\n[zeoserver]\n<= zeoserver_base\nrecipe = plone.recipe.zeoserver' >> buildout.cfg \ | |
+ && sudo -u plone bin/buildout \ | |
+ && chown -R plone:plone /plone /data \ | |
+ && rm -rf /Plone* \ | |
+ && SUDO_FORCE_REMOVE=yes apt-get purge -y --auto-remove $buildDeps \ | |
+ && apt-get install -y --no-install-recommends $runDeps \ | |
+ && rm -rf /var/lib/apt/lists/* \ | |
+ && rm -rf /plone/buildout-cache/downloads/* \ | |
+ && find /plone \( -type f -a -name '*.pyc' -o -name '*.pyo' \) -exec rm -rf '{}' + | |
+ | |
+VOLUME /data | |
+ | |
+COPY docker-initialize.py docker-entrypoint.sh / | |
+ | |
+EXPOSE 8080 | |
+USER plone | |
+WORKDIR /plone/instance | |
+ | |
+ENTRYPOINT ["/docker-entrypoint.sh"] | |
+CMD ["start"] | |
diff --git a/plone_5.0.5/docker-entrypoint.sh b/plone_5.0.5/docker-entrypoint.sh | |
new file mode 100755 | |
index 0000000..5644bdb | |
--- /dev/null | |
+++ b/plone_5.0.5/docker-entrypoint.sh | |
@@ -0,0 +1,55 @@ | |
+#!/bin/bash | |
+set -e | |
+ | |
+COMMANDS="debug help logtail show stop adduser fg kill quit run wait console foreground logreopen reload shell status" | |
+START="start restart zeoserver" | |
+CMD="bin/instance" | |
+ | |
+python /docker-initialize.py | |
+ | |
+if [ -e "custom.cfg" ]; then | |
+ if [ ! -e "bin/develop" ]; then | |
+ bin/buildout -c custom.cfg | |
+ fi | |
+fi | |
+ | |
+if [[ "$1" == "zeo"* ]]; then | |
+ CMD="bin/zeoserver" | |
+fi | |
+ | |
+if [ -z "$HEALTH_CHECK_TIMEOUT" ]; then | |
+ HEALTH_CHECK_TIMEOUT=1 | |
+fi | |
+ | |
+if [ -z "$HEALTH_CHECK_INTERVAL" ]; then | |
+ HEALTH_CHECK_INTERVAL=1 | |
+fi | |
+ | |
+if [[ $START == *"$1"* ]]; then | |
+ _stop() { | |
+ $CMD stop | |
+ kill -TERM $child 2>/dev/null | |
+ } | |
+ | |
+ trap _stop SIGTERM SIGINT | |
+ $CMD start | |
+ $CMD logtail & | |
+ child=$! | |
+ | |
+ pid=`$CMD status | sed 's/[^0-9]*//g'` | |
+ if [ ! -z "$pid" ]; then | |
+ echo "Application running on pid=$pid" | |
+ sleep "$HEALTH_CHECK_TIMEOUT" | |
+ while kill -0 "$pid" 2> /dev/null; do | |
+ sleep "$HEALTH_CHECK_INTERVAL" | |
+ done | |
+ else | |
+ echo "Application didn't start normally. Shutting down!" | |
+ _stop | |
+ fi | |
+else | |
+ if [[ $COMMANDS == *"$1"* ]]; then | |
+ exec bin/instance "$@" | |
+ fi | |
+ exec "$@" | |
+fi | |
diff --git a/plone_5.0.5/docker-initialize.py b/plone_5.0.5/docker-initialize.py | |
new file mode 100755 | |
index 0000000..087bde9 | |
--- /dev/null | |
+++ b/plone_5.0.5/docker-initialize.py | |
@@ -0,0 +1,178 @@ | |
+#!/plone/instance/bin/python | |
+ | |
+import re | |
+import os | |
+import warnings | |
+warnings.simplefilter('always', DeprecationWarning) | |
+ | |
+class Environment(object): | |
+ """ Configure container via environment variables | |
+ """ | |
+ def __init__(self, env=os.environ, | |
+ zope_conf="/plone/instance/parts/instance/etc/zope.conf", | |
+ custom_conf="/plone/instance/custom.cfg", | |
+ zeopack_conf="/plone/instance/bin/zeopack", | |
+ zeoserver_conf="/plone/instance/parts/zeoserver/etc/zeo.conf" | |
+ ): | |
+ self.env = env | |
+ self.zope_conf = zope_conf | |
+ self.custom_conf = custom_conf | |
+ self.zeopack_conf = zeopack_conf | |
+ self.zeoserver_conf = zeoserver_conf | |
+ | |
+ def zeoclient(self): | |
+ """ ZEO Client | |
+ """ | |
+ server = self.env.get("ZEO_ADDRESS", None) | |
+ if not server: | |
+ return | |
+ | |
+ config = "" | |
+ with open(self.zope_conf, "r") as cfile: | |
+ config = cfile.read() | |
+ | |
+ # Already initialized | |
+ if "<blobstorage>" not in config: | |
+ return | |
+ | |
+ read_only = self.env.get("ZEO_READ_ONLY", "false") | |
+ zeo_ro_fallback = self.env.get("ZEO_CLIENT_READ_ONLY_FALLBACK", "false") | |
+ shared_blob_dir=self.env.get("ZEO_SHARED_BLOB_DIR", "off") | |
+ zeo_storage=self.env.get("ZEO_STORAGE", "1") | |
+ zeo_client_cache_size=self.env.get("ZEO_CLIENT_CACHE_SIZE", "128MB") | |
+ zeo_conf = ZEO_TEMPLATE.format( | |
+ zeo_address=server, | |
+ read_only=read_only, | |
+ zeo_client_read_only_fallback=zeo_ro_fallback, | |
+ shared_blob_dir=shared_blob_dir, | |
+ zeo_storage=zeo_storage, | |
+ zeo_client_cache_size=zeo_client_cache_size | |
+ ) | |
+ | |
+ pattern = re.compile(r"<blobstorage>.+</blobstorage>", re.DOTALL) | |
+ config = re.sub(pattern, zeo_conf, config) | |
+ | |
+ with open(self.zope_conf, "w") as cfile: | |
+ cfile.write(config) | |
+ | |
+ def zeopack(self): | |
+ """ ZEO Pack | |
+ """ | |
+ server = self.env.get("ZEO_ADDRESS", None) | |
+ if not server: | |
+ return | |
+ | |
+ if ":" in server: | |
+ host, port = server.split(":") | |
+ else: | |
+ host, port = (server, "8100") | |
+ | |
+ with open(self.zeopack_conf, 'r') as cfile: | |
+ text = cfile.read() | |
+ text = text.replace('address = "8100"', 'address = "%s"' % server) | |
+ text = text.replace('host = "127.0.0.1"', 'host = "%s"' % host) | |
+ text = text.replace('port = "8100"', 'port = "%s"' % port) | |
+ | |
+ with open(self.zeopack_conf, 'w') as cfile: | |
+ cfile.write(text) | |
+ | |
+ def zeoserver(self): | |
+ """ ZEO Server | |
+ """ | |
+ pack_keep_old = self.env.get("ZEO_PACK_KEEP_OLD", '') | |
+ if pack_keep_old.lower() in ("false", "no", "0", "n", "f"): | |
+ with open(self.zeoserver_conf, 'r') as cfile: | |
+ text = cfile.read() | |
+ if 'pack-keep-old' not in text: | |
+ text = text.replace( | |
+ '</filestorage>', | |
+ ' pack-keep-old false\n</filestorage>' | |
+ ) | |
+ | |
+ with open(self.zeoserver_conf, 'w') as cfile: | |
+ cfile.write(text) | |
+ | |
+ def buildout(self): | |
+ """ Buildout from environment variables | |
+ """ | |
+ # Already configured | |
+ if os.path.exists(self.custom_conf): | |
+ return | |
+ | |
+ eggs = self.env.get("PLONE_ADDONS", | |
+ self.env.get("ADDONS", "")).strip().split() | |
+ if not eggs: | |
+ eggs = self.env.get("BUILDOUT_EGGS", "").strip().split() | |
+ if eggs: | |
+ warnings.warn( | |
+ "BUILDOUT_EGGS is deprecated. Please use " | |
+ "PLONE_ADDONS instead !!!", DeprecationWarning) | |
+ | |
+ zcml = self.env.get("PLONE_ZCML", | |
+ self.env.get("ZCML", "")).strip().split() | |
+ if not zcml: | |
+ zcml = self.env.get("BUILDOUT_ZCML", "").strip().split() | |
+ if zcml: | |
+ warnings.warn( | |
+ "BUILDOUT_ZCML is deprecated. Please use " | |
+ "PLONE_ZCML instead !!!", DeprecationWarning) | |
+ | |
+ develop = self.env.get("PLONE_DEVELOP", | |
+ self.env.get("DEVELOP", "")).strip().split() | |
+ if not develop: | |
+ develop = self.env.get("BUILDOUT_DEVELOP", "").strip().split() | |
+ if develop: | |
+ warnings.warn( | |
+ "BUILDOUT_DEVELOP is deprecated. Please use " | |
+ "PLONE_DEVELOP instead !!!", DeprecationWarning) | |
+ | |
+ if not (eggs or zcml or develop): | |
+ return | |
+ | |
+ buildout = BUILDOUT_TEMPLATE.format( | |
+ eggs="\n\t".join(eggs), | |
+ zcml="\n\t".join(zcml), | |
+ develop="\n\t".join(develop) | |
+ ) | |
+ | |
+ with open(self.custom_conf, 'w') as cfile: | |
+ cfile.write(buildout) | |
+ | |
+ def setup(self, **kwargs): | |
+ self.buildout() | |
+ self.zeoclient() | |
+ self.zeopack() | |
+ self.zeoserver() | |
+ | |
+ __call__ = setup | |
+ | |
+ZEO_TEMPLATE = """ | |
+ <zeoclient> | |
+ read-only {read_only} | |
+ read-only-fallback {zeo_client_read_only_fallback} | |
+ blob-dir /data/blobstorage | |
+ shared-blob-dir {shared_blob_dir} | |
+ server {zeo_address} | |
+ storage {zeo_storage} | |
+ name zeostorage | |
+ var /plone/instance/parts/instance/var | |
+ cache-size {zeo_client_cache_size} | |
+ </zeoclient> | |
+""".strip() | |
+ | |
+BUILDOUT_TEMPLATE = """ | |
+[buildout] | |
+extends = develop.cfg | |
+develop += {develop} | |
+eggs += {eggs} | |
+zcml += {zcml} | |
+""" | |
+ | |
+def initialize(): | |
+ """ Configure Plone instance as ZEO Client | |
+ """ | |
+ environment = Environment() | |
+ environment.setup() | |
+ | |
+if __name__ == "__main__": | |
+ initialize() | |
diff --git a/plone_latest/Dockerfile b/plone_latest/Dockerfile | |
new file mode 100644 | |
index 0000000..86bfcf0 | |
--- /dev/null | |
+++ b/plone_latest/Dockerfile | |
@@ -0,0 +1,49 @@ | |
+FROM python:2.7-slim | |
+MAINTAINER "Plone Community" http://community.plone.org | |
+ | |
+RUN useradd --system -U -u 500 plone \ | |
+ && mkdir -p /plone /data/filestorage /data/blobstorage \ | |
+ && chown -R plone:plone /plone /data | |
+ | |
+ENV PLONE_MAJOR=5.0 | |
+ENV PLONE_VERSION=5.0.6 | |
+ENV PLONE_MD5=c6951b0f79be1bf12337d49f34afc524 | |
+ | |
+RUN buildDeps="curl sudo python-setuptools python-dev build-essential libssl-dev libxml2-dev libxslt1-dev libbz2-dev libjpeg62-turbo-dev" \ | |
+ && runDeps="libxml2 libxslt1.1 libjpeg62 rsync" \ | |
+ && apt-get update \ | |
+ && apt-get install -y --no-install-recommends $buildDeps \ | |
+ && curl -o Plone.tgz -SL https://launchpad.net/plone/$PLONE_MAJOR/$PLONE_VERSION/+download/Plone-$PLONE_VERSION-UnifiedInstaller.tgz \ | |
+ && echo "$PLONE_MD5 Plone.tgz" | md5sum -c - \ | |
+ && tar -xzf Plone.tgz \ | |
+ && ./Plone-$PLONE_VERSION-UnifiedInstaller/install.sh \ | |
+ --password=admin \ | |
+ --daemon-user=plone \ | |
+ --owner=plone \ | |
+ --group=plone \ | |
+ --target=/plone \ | |
+ --instance=instance \ | |
+ --var=/data \ | |
+ none \ | |
+ && cd /plone/instance \ | |
+ && sed -i 's/parts =/parts =\n zeoserver/g' buildout.cfg \ | |
+ && echo '\n[zeoserver]\n<= zeoserver_base\nrecipe = plone.recipe.zeoserver' >> buildout.cfg \ | |
+ && sudo -u plone bin/buildout \ | |
+ && chown -R plone:plone /plone /data \ | |
+ && rm -rf /Plone* \ | |
+ && SUDO_FORCE_REMOVE=yes apt-get purge -y --auto-remove $buildDeps \ | |
+ && apt-get install -y --no-install-recommends $runDeps \ | |
+ && rm -rf /var/lib/apt/lists/* \ | |
+ && rm -rf /plone/buildout-cache/downloads/* \ | |
+ && find /plone \( -type f -a -name '*.pyc' -o -name '*.pyo' \) -exec rm -rf '{}' + | |
+ | |
+VOLUME /data | |
+ | |
+COPY docker-initialize.py docker-entrypoint.sh / | |
+ | |
+EXPOSE 8080 | |
+USER plone | |
+WORKDIR /plone/instance | |
+ | |
+ENTRYPOINT ["/docker-entrypoint.sh"] | |
+CMD ["start"] | |
diff --git a/plone_latest/docker-entrypoint.sh b/plone_latest/docker-entrypoint.sh | |
new file mode 100755 | |
index 0000000..5644bdb | |
--- /dev/null | |
+++ b/plone_latest/docker-entrypoint.sh | |
@@ -0,0 +1,55 @@ | |
+#!/bin/bash | |
+set -e | |
+ | |
+COMMANDS="debug help logtail show stop adduser fg kill quit run wait console foreground logreopen reload shell status" | |
+START="start restart zeoserver" | |
+CMD="bin/instance" | |
+ | |
+python /docker-initialize.py | |
+ | |
+if [ -e "custom.cfg" ]; then | |
+ if [ ! -e "bin/develop" ]; then | |
+ bin/buildout -c custom.cfg | |
+ fi | |
+fi | |
+ | |
+if [[ "$1" == "zeo"* ]]; then | |
+ CMD="bin/zeoserver" | |
+fi | |
+ | |
+if [ -z "$HEALTH_CHECK_TIMEOUT" ]; then | |
+ HEALTH_CHECK_TIMEOUT=1 | |
+fi | |
+ | |
+if [ -z "$HEALTH_CHECK_INTERVAL" ]; then | |
+ HEALTH_CHECK_INTERVAL=1 | |
+fi | |
+ | |
+if [[ $START == *"$1"* ]]; then | |
+ _stop() { | |
+ $CMD stop | |
+ kill -TERM $child 2>/dev/null | |
+ } | |
+ | |
+ trap _stop SIGTERM SIGINT | |
+ $CMD start | |
+ $CMD logtail & | |
+ child=$! | |
+ | |
+ pid=`$CMD status | sed 's/[^0-9]*//g'` | |
+ if [ ! -z "$pid" ]; then | |
+ echo "Application running on pid=$pid" | |
+ sleep "$HEALTH_CHECK_TIMEOUT" | |
+ while kill -0 "$pid" 2> /dev/null; do | |
+ sleep "$HEALTH_CHECK_INTERVAL" | |
+ done | |
+ else | |
+ echo "Application didn't start normally. Shutting down!" | |
+ _stop | |
+ fi | |
+else | |
+ if [[ $COMMANDS == *"$1"* ]]; then | |
+ exec bin/instance "$@" | |
+ fi | |
+ exec "$@" | |
+fi | |
diff --git a/plone_latest/docker-initialize.py b/plone_latest/docker-initialize.py | |
new file mode 100755 | |
index 0000000..087bde9 | |
--- /dev/null | |
+++ b/plone_latest/docker-initialize.py | |
@@ -0,0 +1,178 @@ | |
+#!/plone/instance/bin/python | |
+ | |
+import re | |
+import os | |
+import warnings | |
+warnings.simplefilter('always', DeprecationWarning) | |
+ | |
+class Environment(object): | |
+ """ Configure container via environment variables | |
+ """ | |
+ def __init__(self, env=os.environ, | |
+ zope_conf="/plone/instance/parts/instance/etc/zope.conf", | |
+ custom_conf="/plone/instance/custom.cfg", | |
+ zeopack_conf="/plone/instance/bin/zeopack", | |
+ zeoserver_conf="/plone/instance/parts/zeoserver/etc/zeo.conf" | |
+ ): | |
+ self.env = env | |
+ self.zope_conf = zope_conf | |
+ self.custom_conf = custom_conf | |
+ self.zeopack_conf = zeopack_conf | |
+ self.zeoserver_conf = zeoserver_conf | |
+ | |
+ def zeoclient(self): | |
+ """ ZEO Client | |
+ """ | |
+ server = self.env.get("ZEO_ADDRESS", None) | |
+ if not server: | |
+ return | |
+ | |
+ config = "" | |
+ with open(self.zope_conf, "r") as cfile: | |
+ config = cfile.read() | |
+ | |
+ # Already initialized | |
+ if "<blobstorage>" not in config: | |
+ return | |
+ | |
+ read_only = self.env.get("ZEO_READ_ONLY", "false") | |
+ zeo_ro_fallback = self.env.get("ZEO_CLIENT_READ_ONLY_FALLBACK", "false") | |
+ shared_blob_dir=self.env.get("ZEO_SHARED_BLOB_DIR", "off") | |
+ zeo_storage=self.env.get("ZEO_STORAGE", "1") | |
+ zeo_client_cache_size=self.env.get("ZEO_CLIENT_CACHE_SIZE", "128MB") | |
+ zeo_conf = ZEO_TEMPLATE.format( | |
+ zeo_address=server, | |
+ read_only=read_only, | |
+ zeo_client_read_only_fallback=zeo_ro_fallback, | |
+ shared_blob_dir=shared_blob_dir, | |
+ zeo_storage=zeo_storage, | |
+ zeo_client_cache_size=zeo_client_cache_size | |
+ ) | |
+ | |
+ pattern = re.compile(r"<blobstorage>.+</blobstorage>", re.DOTALL) | |
+ config = re.sub(pattern, zeo_conf, config) | |
+ | |
+ with open(self.zope_conf, "w") as cfile: | |
+ cfile.write(config) | |
+ | |
+ def zeopack(self): | |
+ """ ZEO Pack | |
+ """ | |
+ server = self.env.get("ZEO_ADDRESS", None) | |
+ if not server: | |
+ return | |
+ | |
+ if ":" in server: | |
+ host, port = server.split(":") | |
+ else: | |
+ host, port = (server, "8100") | |
+ | |
+ with open(self.zeopack_conf, 'r') as cfile: | |
+ text = cfile.read() | |
+ text = text.replace('address = "8100"', 'address = "%s"' % server) | |
+ text = text.replace('host = "127.0.0.1"', 'host = "%s"' % host) | |
+ text = text.replace('port = "8100"', 'port = "%s"' % port) | |
+ | |
+ with open(self.zeopack_conf, 'w') as cfile: | |
+ cfile.write(text) | |
+ | |
+ def zeoserver(self): | |
+ """ ZEO Server | |
+ """ | |
+ pack_keep_old = self.env.get("ZEO_PACK_KEEP_OLD", '') | |
+ if pack_keep_old.lower() in ("false", "no", "0", "n", "f"): | |
+ with open(self.zeoserver_conf, 'r') as cfile: | |
+ text = cfile.read() | |
+ if 'pack-keep-old' not in text: | |
+ text = text.replace( | |
+ '</filestorage>', | |
+ ' pack-keep-old false\n</filestorage>' | |
+ ) | |
+ | |
+ with open(self.zeoserver_conf, 'w') as cfile: | |
+ cfile.write(text) | |
+ | |
+ def buildout(self): | |
+ """ Buildout from environment variables | |
+ """ | |
+ # Already configured | |
+ if os.path.exists(self.custom_conf): | |
+ return | |
+ | |
+ eggs = self.env.get("PLONE_ADDONS", | |
+ self.env.get("ADDONS", "")).strip().split() | |
+ if not eggs: | |
+ eggs = self.env.get("BUILDOUT_EGGS", "").strip().split() | |
+ if eggs: | |
+ warnings.warn( | |
+ "BUILDOUT_EGGS is deprecated. Please use " | |
+ "PLONE_ADDONS instead !!!", DeprecationWarning) | |
+ | |
+ zcml = self.env.get("PLONE_ZCML", | |
+ self.env.get("ZCML", "")).strip().split() | |
+ if not zcml: | |
+ zcml = self.env.get("BUILDOUT_ZCML", "").strip().split() | |
+ if zcml: | |
+ warnings.warn( | |
+ "BUILDOUT_ZCML is deprecated. Please use " | |
+ "PLONE_ZCML instead !!!", DeprecationWarning) | |
+ | |
+ develop = self.env.get("PLONE_DEVELOP", | |
+ self.env.get("DEVELOP", "")).strip().split() | |
+ if not develop: | |
+ develop = self.env.get("BUILDOUT_DEVELOP", "").strip().split() | |
+ if develop: | |
+ warnings.warn( | |
+ "BUILDOUT_DEVELOP is deprecated. Please use " | |
+ "PLONE_DEVELOP instead !!!", DeprecationWarning) | |
+ | |
+ if not (eggs or zcml or develop): | |
+ return | |
+ | |
+ buildout = BUILDOUT_TEMPLATE.format( | |
+ eggs="\n\t".join(eggs), | |
+ zcml="\n\t".join(zcml), | |
+ develop="\n\t".join(develop) | |
+ ) | |
+ | |
+ with open(self.custom_conf, 'w') as cfile: | |
+ cfile.write(buildout) | |
+ | |
+ def setup(self, **kwargs): | |
+ self.buildout() | |
+ self.zeoclient() | |
+ self.zeopack() | |
+ self.zeoserver() | |
+ | |
+ __call__ = setup | |
+ | |
+ZEO_TEMPLATE = """ | |
+ <zeoclient> | |
+ read-only {read_only} | |
+ read-only-fallback {zeo_client_read_only_fallback} | |
+ blob-dir /data/blobstorage | |
+ shared-blob-dir {shared_blob_dir} | |
+ server {zeo_address} | |
+ storage {zeo_storage} | |
+ name zeostorage | |
+ var /plone/instance/parts/instance/var | |
+ cache-size {zeo_client_cache_size} | |
+ </zeoclient> | |
+""".strip() | |
+ | |
+BUILDOUT_TEMPLATE = """ | |
+[buildout] | |
+extends = develop.cfg | |
+develop += {develop} | |
+eggs += {eggs} | |
+zcml += {zcml} | |
+""" | |
+ | |
+def initialize(): | |
+ """ Configure Plone instance as ZEO Client | |
+ """ | |
+ environment = Environment() | |
+ environment.setup() | |
+ | |
+if __name__ == "__main__": | |
+ initialize() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment