Add docker image building parts

This commit is contained in:
Nicolas Demonte 2022-06-09 15:24:19 +02:00
parent 7fd9e8c2dd
commit 4a2e537cdd
3 changed files with 331 additions and 0 deletions

99
Dockerfile Normal file
View File

@ -0,0 +1,99 @@
FROM ubuntu:18.04
RUN apt-get -qy update && apt-get -o APT::Install-Recommends=false -qy install bash-completion curl htop less locales make ncurses-term software-properties-common telnet tzdata vim
RUN ln -sf /usr/share/zoneinfo/Europe/Brussels /etc/localtime
RUN echo "Europe/Brussels" > /etc/timezone; dpkg-reconfigure -f noninteractive tzdata
ENV PIP=9.0.3 \
ZC_BUILDOUT=2.11.5 \
SETUPTOOLS=38.7.0 \
WHEEL=0.33.1 \
PLONE_MAJOR=4 \
PLONE_MINOR=4.3 \
PLONE_VERSION=4.3.2
LABEL plone=$PLONE_VERSION \
os="ubuntu" \
os.version="18.04" \
name="Buildout GED Parlement de la Fédération Wallonie-Bruxelles" \
description="Plone image for PFWB GED" \
maintainer="Affinitic"
RUN groupadd -g 209 plone \
&& useradd --system -m -d /plone -u 913 -g 209 plone \
&& mkdir -p /plone/ /data/filestorage /data/blobstorage /data/log /buildout-cache/download /buildout-cache/eggs
RUN apt-get update \
&& apt full-upgrade -y \
&& apt-get install -y --no-install-recommends \
build-essential \
cabextract \
default-jre \
dpkg-dev \
gcc \
ghostscript \
git \
gosu \
graphicsmagick \
libc6-dev \
libjpeg-dev \
libldap-2.4-2 \
libldap2-dev \
libmagic1 \
libmemcached-dev \
libmemcached11 \
libpq-dev \
libreadline-dev \
libreoffice \
libreoffice-java-common \
libreoffice-script-provider-python \
libsasl2-dev \
libtiff5 \
libtiff5-dev \
libxml2 \
libxml2-dev \
libxslt1.1 \
libxslt1-dev \
multitail \
netcat \
openssh-client \
poppler-utils \
python \
python-dev \
python-pip \
rsync \
ruby \
wv
COPY *.cfg /plone/
WORKDIR /plone
RUN pip install setuptools==$SETUPTOOLS zc.buildout==$ZC_BUILDOUT wheel==$WHEEL \
&& buildout -c docker.cfg \
&& find /data -not -user plone -exec chown plone:plone {} \+ \
&& find /plone -not -user plone -exec chown plone:plone {} \+ \
&& find /buildout-cache -not -user plone -exec chown plone:plone {} \+ \
&& rm -rf /Plone* \
&& rm -rf /var/lib/apt/lists/* \
&& rm -rf /buildout-cache/download/* \
&& rm -f /plone/.installed.cfg
RUN gem install docsplit \
&& ln -sf /usr/bin/virtualenv /usr/local/bin/virtualenv-2.7
USER plone
WORKDIR /plone
VOLUME /data/blobstorage
VOLUME /data/filestorage
VOLUME /data/log
VOLUME /data/solr
HEALTHCHECK --interval=1m --timeout=5s --start-period=1m \
CMD nc -z -w5 127.0.0.1 8080 || exit 1
COPY docker-entrypoint.sh /
ENTRYPOINT ["/docker-entrypoint.sh"]
CMD ["start"]

37
docker-entrypoint.sh Executable file
View File

@ -0,0 +1,37 @@
#!/bin/bash
set -e
# ZConfig 2.9.1 is too old to do environment variable substitution on its own.
sed -i "s/\$(HOSTNAME)/$HOSTNAME/g" /plone/parts/instance/etc/zope.conf
sed -i "s/\$(HOSTNAME)/$HOSTNAME/g" /plone/parts/worker/etc/zope.conf
COMMANDS="adduser debug fg foreground help kill logreopen logtail reopen_transcript run show status stop wait"
START="console start restart"
# zeo
if [[ "$1" == "zeo"* ]]; then
exec bin/$1 fg
fi
# worker
if [[ "$1" == "worker"* ]]; then
exec bin/$1 fg
fi
# solr-instance
if [[ "$1" == "solr-instance"* ]]; then
exec bin/$1 fg
fi
# Plone instance start
if [[ $START == *"$1"* ]]; then
exec bin/instance console
fi
# Plone instance helpers
if [[ $COMMANDS == *"$1"* ]]; then
exec bin/instance "$@"
fi
# Custom
exec "$@"

195
docker.cfg Normal file
View File

@ -0,0 +1,195 @@
[buildout]
extends =
https://dist.affinitic.be/plone/4.3.2/docker.cfg
http://dist.plone.org/release/4.3.2/versions.cfg
sources.cfg
checkouts.cfg
versions.cfg
parts =
solr
zeoserver
instance
worker
extensions =
mr.developer
versions = versions
allow-hosts =
pypi.org
pypi.python.org
effbot.org
robotframework.googlecode.com
robotframework-ride.googlecode.com
code.google.com
files.pythonhosted.org
index = https://pypi.org/simple
download-cache = ${buildout:directory}/download-cache
eggs =
Pillow
collective.wfcomment
collective.contact.facetednav
show-picked-versions = true
[zeoserver]
recipe = plone.recipe.zeoserver
zeo-address = 8100
file-storage = /data/filestorage/Data.fs
blob-storage = /data/blobstorage
[instance]
recipe = plone.recipe.zope2instance
user = admin:admin
blob-storage = /data/blobstorage
shared-blob = on
zeo-client = true
zeo-address = zeo:8100
effective-user = plone
http-address = 8080
eggs =
${buildout:eggs}
pfwbged.policy
collective.contact.core
collective.contact.widget
collective.dms.batchimport
collective.dms.thesaurus
collective.solr
pfwbged.basecontent
pfwbged.mockups
pfwbged.collection
pfwbged.folder
pfwbged.theme
eea.facetednavigation
plone.app.async
plone.app.ldap
zcml =
pfwbged.policy
zcml-additional =
<include package="plone.app.async" file="single_db_instance.zcml" />
zope-conf-additional =
%import collective.taskqueue
<taskqueue>
type redis
host redis
port 6379
</taskqueue>
zeo-client-cache-size = 256MB
zodb-cache-size = 60000
environment-vars =
PYTHON_EGG_CACHE ${buildout:directory}/tmp
TMPDIR ${buildout:directory}/tmp
zope_i18n_compile_mo_files true
event-log-custom =
<logfile>
level info
path /data/log/instance-$(HOSTNAME).log
max-size 1MB
old-files 720
</logfile>
<logfile>
level error
path /data/log/error.log
max-size 1MB
old-files 720
</logfile>
access-log-custom =
<logfile>
path /data/log/z2-$(HOSTNAME).log
max-size 1MB
old-files 720
</logfile>
[worker]
<= instance
environment-vars =
${instance:environment-vars}
ZC_ASYNC_UUID ${buildout:directory}/var/worker-uuid.txt
zcml-additional =
<include package="plone.app.async" file="single_db_worker.zcml" />
zope-conf-additional =
%import collective.taskqueue
<taskqueue>
type redis
host redis
port 6379
</taskqueue>
<taskqueue-server>
name ${:_buildout_section_name_}
</taskqueue-server>
[solr]
recipe = collective.recipe.solrinstance
host = 0.0.0.0
port = 8983
management-port = 8094
min-ram = 256M
max-ram = 1024M
basepath = /solr
logdir = /data/log
vardir = /data/solr
pidpath = /data/solr
solr-version = 3
default-search-field = default
java-opts =
-Dcom.sun.management.jmxremote
-Djava.rmi.server.hostname=${solr:host}
-Dcom.sun.management.jmxremote.port=${:management-port}
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
-server
-Xms${solr:min-ram}
-Xmx${solr:max-ram}
default-operator = AND
maxWarmingSearchers = 1
unique-key = UID
index =
name:allowedRolesAndUsers type:string stored:false multivalued:true
name:created type:date stored:true
name:Creator type:string stored:true
name:Date type:date stored:true
name:default type:text indexed:true stored:false multivalued:true
name:Description type:text copyfield:default stored:true
name:effective type:date stored:true
name:exclude_from_nav type:boolean indexed:false stored:true
name:expires type:date stored:true
name:getIcon type:string indexed:false stored:true
name:getId type:string indexed:false stored:true
name:getRemoteUrl type:string indexed:false stored:true
name:is_folderish type:boolean stored:true
name:Language type:string stored:true
name:modified type:date stored:true
name:object_provides type:string stored:false multivalued:true
name:path_depth type:integer indexed:true stored:false
name:path_parents type:string indexed:true stored:false multivalued:true
name:path_string type:string indexed:false stored:true
name:portal_type type:string stored:true
name:review_state type:string stored:true
name:SearchableText type:text copyfield:default stored:false
name:searchwords type:string stored:false multivalued:true
name:showinsearch type:boolean stored:false
name:Subject type:string copyfield:default stored:true multivalued:true
name:Title type:text copyfield:default stored:true
name:Type type:string stored:true
name:UID type:string stored:true required:true
name:get_full_title type:string stored:true
name:has_final_unsigned_version type:boolean stored:true
name:can_last_version_validate type:boolean stored:true
name:has_last_version_accept type:boolean stored:true
name:has_last_version_refuse type:boolean stored:true
name:sender_as_text type:text stored:true
name:recipients_as_text type:text stored:true
name:object_folders type:string stored:false multivalued:true
name:object_direct_folders type:string stored:false multivalued:true
name:thesaurus_keywords type:string stored:false multivalued:true
name:reception_date type:date stored:true
name:mail_date type:date stored:true
name:meeting_date type:date stored:true
name:sortable_title type:string stored:true
name:internal_reference_number type:string stored:true