256 lines
8.0 KiB
Docker
256 lines
8.0 KiB
Docker
#
|
|
# build arguments, amd64 is the default
|
|
#
|
|
ARG DIST=ubuntu
|
|
ARG REL=20.04
|
|
ARG ARCH
|
|
|
|
FROM ${ARCH:+$ARCH/}$DIST:$REL AS base
|
|
LABEL maintainer=mlan
|
|
ENV DEBIAN_FRONTEND=noninteractive \
|
|
PYTHONDONTWRITEBYTECODE=PleaseNoPyCache \
|
|
SVDIR=/etc/service \
|
|
DOCKER_BIN_DIR=/usr/local/bin \
|
|
DOCKER_ENTRY_DIR=/etc/docker/entry.d \
|
|
DOCKER_EXIT_DIR=/etc/docker/exit.d \
|
|
DOCKER_CRONTAB_FILE=/etc/kopano/docker-crontab \
|
|
DOCKER_CRONTAB_DIR=/etc/cron.d \
|
|
DOCKER_CONF_DIR1=/etc/kopano \
|
|
DOCKER_SMPL_DIR1=/usr/share/doc/kopano/example-config \
|
|
DOCKER_PLUG_DIR=/usr/share/kopano-dagent/python/plugins \
|
|
DOCKER_CONF_DIR2=/usr/share/z-push \
|
|
DOCKER_APPL_LIB=/var/lib/kopano \
|
|
DOCKER_APPL_SSL_DIR=/etc/kopano/ssl \
|
|
DOCKER_ACME_SSL_DIR=/etc/ssl/acme \
|
|
KOPANO_SPAMD_LIB=/var/lib/kopano/spamd \
|
|
DOCKER_APPL_RUNAS=kopano \
|
|
DOCKER_BUILD_DEB_DIR=/tmp/deb \
|
|
DOCKER_BUILD_PASSES=1 \
|
|
DOCKER_UNLOCK_FILE=/etc/kopano/.docker.unlock \
|
|
SYSLOG_OPTIONS='-S' \
|
|
SYSLOG_LEVEL=5
|
|
#
|
|
# Copy utility scripts including docker-entrypoint.sh to image
|
|
#
|
|
COPY src/*/bin $DOCKER_BIN_DIR/
|
|
COPY src/*/entry.d $DOCKER_ENTRY_DIR/
|
|
COPY src/*/exit.d $DOCKER_EXIT_DIR/
|
|
COPY src/*/config $DOCKER_CONF_DIR1/
|
|
COPY src/*/plugin $DOCKER_PLUG_DIR/
|
|
|
|
#
|
|
# Install helpers. Set bash as default shell. Setup syslogs service.
|
|
#
|
|
RUN apt-get update && apt-get install --yes --no-install-recommends \
|
|
apt-utils \
|
|
busybox-syslogd \
|
|
runit \
|
|
wget \
|
|
curl \
|
|
ca-certificates \
|
|
tar \
|
|
gnupg \
|
|
jq \
|
|
inotify-tools \
|
|
cron \
|
|
&& ln -s $DOCKER_CRONTAB_FILE $DOCKER_CRONTAB_DIR \
|
|
&& docker-service.sh \
|
|
"syslogd -nO- -l$SYSLOG_LEVEL $SYSLOG_OPTIONS" \
|
|
"cron -f"
|
|
# "cron -f -L 4"
|
|
|
|
|
|
|
|
FROM base AS base-man
|
|
#
|
|
# get man pages to work
|
|
#
|
|
#
|
|
# Do not exclude man pages & other documentation
|
|
# Reinstall all currently installed packages in order to get the man pages back
|
|
#
|
|
#ENV DEBIAN_FRONTEND=noninteractive
|
|
RUN rm -f /etc/dpkg/dpkg.cfg.d/excludes \
|
|
&& apt-get update \
|
|
&& dpkg -l | grep ^ii | cut -d' ' -f3 | xargs apt-get install -y --reinstall \
|
|
&& apt-get install --yes --no-install-recommends \
|
|
man \
|
|
manpages \
|
|
bash-completion \
|
|
&& rm -r /var/lib/apt/lists/*
|
|
|
|
|
|
|
|
#
|
|
# Kopano-core
|
|
#
|
|
FROM base-man AS core
|
|
#
|
|
# build arguments, amd64 is the default
|
|
#
|
|
ARG DIST
|
|
ARG REL
|
|
ARG ARCH=amd64
|
|
#
|
|
# variables
|
|
#
|
|
ENV DEBIAN_FRONTEND=noninteractive \
|
|
SVDIR=/etc/service \
|
|
DOCKER_BIN_DIR=/usr/local/bin \
|
|
LMTP_LISTEN=*:2003 \
|
|
SA_GROUP=kopano \
|
|
DOCKER_BUILD_DEB_DIR=/tmp/deb \
|
|
DOCKER_BUILD_PASSES=1
|
|
#
|
|
# Install kopano-core
|
|
#
|
|
RUN mkdir -p $DOCKER_BUILD_DEB_DIR \
|
|
&& webaddr=$(kopano-webaddr.sh core \
|
|
https://download.kopano.io/community ${DIST} ${REL} ${ARCH}) \
|
|
&& echo "$webaddr<->${DIST} ${REL} ${ARCH}<-" \
|
|
&& curl $webaddr | tar -xzC $DOCKER_BUILD_DEB_DIR \
|
|
&& webaddr=$(kopano-webaddr.sh archiver \
|
|
https://download.kopano.io/community ${DIST} ${REL} ${ARCH}) \
|
|
&& echo "$webaddr<->${DIST} ${REL} ${ARCH}<-" \
|
|
&& curl $webaddr | tar -xzC $DOCKER_BUILD_DEB_DIR \
|
|
&& apt-get update \
|
|
&& for i in $(seq ${DOCKER_BUILD_PASSES}); do echo "\033[1;36mKOPANO CORE INSTALL PASS: $i\033[0m" \
|
|
&& dpkg --install --force-depends --skip-same-version --recursive $DOCKER_BUILD_DEB_DIR \
|
|
&& apt-get install --yes --no-install-recommends --fix-broken; done \
|
|
&& apt-get install --yes --no-install-recommends python3-ldap \
|
|
&& mkdir -p /var/lib/kopano/attachments && chown $DOCKER_APPL_RUNAS: /var/lib/kopano/attachments \
|
|
&& mkdir -p $DOCKER_APPL_SSL_DIR \
|
|
&& mkdir -p $DOCKER_ACME_SSL_DIR \
|
|
&& mkdir -p $KOPANO_SPAMD_LIB/ham && chown $DOCKER_APPL_RUNAS: $KOPANO_SPAMD_LIB/ham \
|
|
&& rm -rf $DOCKER_BUILD_DEB_DIR \
|
|
&& rm $DOCKER_CONF_DIR1/*.cfg \
|
|
&& . docker-common.sh \
|
|
&& . docker-config.sh \
|
|
&& dc_comment /etc/ssl/openssl.cnf RANDFILE \
|
|
&& docker-service.sh \
|
|
"kopano-dagent -l" \
|
|
"kopano-gateway" \
|
|
"kopano-ical" \
|
|
"kopano-search" \
|
|
"kopano-server" \
|
|
"kopano-spooler" \
|
|
"-f kopano-spamd" \
|
|
"-d kopano-grapi serve" \
|
|
"-d kopano-kapid serve --log-timestamp=false" \
|
|
"-d kopano-konnectd serve --log-timestamp=false" \
|
|
"-d kopano-monitor" \
|
|
&& echo "This file unlocks the configuration, so it will be deleted after initialization." > $DOCKER_UNLOCK_FILE
|
|
#
|
|
# Have runit's runsvdir start all services
|
|
#
|
|
CMD runsvdir -P ${SVDIR}
|
|
#
|
|
# Entrypoint, how container is run
|
|
#
|
|
ENTRYPOINT ["docker-entrypoint.sh"]
|
|
#
|
|
# Check if all services are running
|
|
#
|
|
HEALTHCHECK CMD sv status ${SVDIR}/*
|
|
|
|
|
|
|
|
#
|
|
# Kopano-webapp
|
|
#
|
|
FROM core AS core-webapp
|
|
#
|
|
# build arguments
|
|
#
|
|
ARG DIST
|
|
ARG REL
|
|
#
|
|
# variables
|
|
#
|
|
ENV DEBIAN_FRONTEND=noninteractive \
|
|
SVDIR=/etc/service \
|
|
DOCKER_BUILD_DEB_DIR=/tmp/deb \
|
|
DOCKER_BUILD_PASSES=1
|
|
#
|
|
# Install Kopano webapp
|
|
#
|
|
RUN apt-get install --yes --no-install-recommends apache2 libapache2-mod-php \
|
|
&& mkdir -p $DOCKER_BUILD_DEB_DIR \
|
|
&& webaddr=$(kopano-webaddr.sh webapp \
|
|
https://download.kopano.io/community ${DIST} ${REL} all) \
|
|
&& echo "$webaddr<->${DIST} ${REL} all<-" \
|
|
&& curl $webaddr | tar -xzC $DOCKER_BUILD_DEB_DIR \
|
|
&& webaddr=$(kopano-webaddr.sh mdm \
|
|
https://download.kopano.io/community ${DIST} ${REL} all) \
|
|
&& echo "$webaddr<->${DIST} ${REL} all<-" \
|
|
&& curl $webaddr | tar -xzC $DOCKER_BUILD_DEB_DIR \
|
|
&& webaddr=$(kopano-webaddr.sh smime \
|
|
https://download.kopano.io/community ${DIST} ${REL} ${ARCH}) \
|
|
&& echo "$webaddr<->${DIST} ${REL} all<-" \
|
|
&& curl $webaddr | tar -xzC $DOCKER_BUILD_DEB_DIR \
|
|
&& apt-get update \
|
|
&& for i in $(seq ${DOCKER_BUILD_PASSES}); do echo "\033[1;36mKOPANO WEBAPP INSTALL PASS: $i\033[0m" \
|
|
&& dpkg --install --force-depends --skip-same-version --recursive $DOCKER_BUILD_DEB_DIR \
|
|
&& apt-get install --yes --no-install-recommends --fix-broken; done \
|
|
&& dpkg-reconfigure php7-mapi \
|
|
&& . docker-common.sh \
|
|
&& . docker-config.sh \
|
|
&& dc_replace /etc/kopano/webapp/config.php 'define("SECURE_COOKIES", true);' 'define("SECURE_COOKIES", false);' \
|
|
&& dc_replace /etc/apache2/sites-available/kopano-webapp.conf 'Alias /webapp /usr/share/kopano-webapp' '<VirtualHost *:80>\\nDocumentRoot /usr/share/kopano-webapp' \
|
|
&& echo '</VirtualHost>' >> /etc/apache2/sites-available/kopano-webapp.conf \
|
|
&& dc_modify /etc/apache2/apache2.conf '^ErrorLog' syslog:user \
|
|
&& echo 'CustomLog "||/usr/bin/logger -t apache -i -p user.debug" common' >> /etc/apache2/apache2.conf \
|
|
&& echo 'ServerName localhost' >> /etc/apache2/apache2.conf \
|
|
&& mkdir -p /etc/kopano/theme/Custom \
|
|
&& ln -sf /etc/kopano/theme/Custom /usr/share/kopano-webapp/plugins/. \
|
|
# && dc_modify /etc/apache2/apache2.conf '^LogLevel' crit \
|
|
&& a2disconf other-vhosts-access-log \
|
|
&& a2dissite 000-default.conf \
|
|
&& a2ensite kopano-webapp \
|
|
&& rm -rf $DOCKER_BUILD_DEB_DIR \
|
|
&& cp -r $DOCKER_CONF_DIR1/webapp $DOCKER_SMPL_DIR1 \
|
|
&& docker-service.sh "-f -s /etc/apache2/envvars -q apache2 -DFOREGROUND -DNO_DETACH -k start"
|
|
#
|
|
# Ports
|
|
#
|
|
EXPOSE 80 443
|
|
|
|
|
|
|
|
#
|
|
# Z-Push
|
|
#
|
|
FROM core-webapp AS full
|
|
#
|
|
# build arguments
|
|
#
|
|
ARG DIST
|
|
ARG REL
|
|
#
|
|
# variables
|
|
#
|
|
ENV DEBIAN_FRONTEND=noninteractive \
|
|
SVDIR=/etc/service \
|
|
DOCKER_BUILD_DEB_DIR=/tmp/deb \
|
|
DOCKER_BUILD_PASSES=1
|
|
#
|
|
# Add Z-Push repository and install Z-Push configured to be used with Kopano and Apache
|
|
#
|
|
RUN debaddr="$(kopano-webaddr.sh --deb final https://download.kopano.io/zhub/z-push: ${DIST} ${REL})" \
|
|
&& echo "deb $debaddr/ /" > /etc/apt/sources.list.d/z-push.list \
|
|
&& wget -qO - $debaddr/Release.key | apt-key add - \
|
|
&& mkdir -p /var/lib/z-push && chown www-data: /var/lib/z-push \
|
|
&& mkdir -p /var/log/z-push && chown www-data: /var/log/z-push \
|
|
&& apt-get update && apt-get install --yes --no-install-recommends \
|
|
z-push-backend-kopano \
|
|
z-push-kopano \
|
|
z-push-config-apache \
|
|
z-push-autodiscover \
|
|
z-push-state-sql \
|
|
&& . docker-common.sh \
|
|
&& . docker-config.sh \
|
|
&& dc_addafter /etc/apache2/conf-available/z-push.conf 'Alias /Microsoft-Server-ActiveSync' 'AliasMatch (?i)/Autodiscover/Autodiscover.xml "/usr/share/z-push/autodiscover/autodiscover.php"' '</IfModule>' \
|
|
&& dc_replace /usr/share/z-push/config.php 'define(\x27USE_CUSTOM_REMOTE_IP_HEADER\x27, false);' 'define(\x27USE_CUSTOM_REMOTE_IP_HEADER\x27, \x27HTTP_X_FORWARDED_FOR\x27);' \
|
|
&& dc_replace /usr/share/z-push/config.php 'define(\x27LOGBACKEND\x27, \x27filelog\x27);' 'define(\x27LOGBACKEND\x27, \x27syslog\x27);'
|
|
|