Add docker image building parts
This commit is contained in:
parent
7fd9e8c2dd
commit
4a2e537cdd
|
@ -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"]
|
|
@ -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 "$@"
|
|
@ -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
|
||||
|
Reference in New Issue