1
0
mirror of https://github.com/zokradonh/kopano-docker synced 2025-06-05 23:16:12 +00:00

Add container for kapps (which includes the new calendar) (#397)

* Add container for kapps (which includes the new calendar)
* remove calendar.yml
This commit is contained in:
Felix Bartels 2020-05-26 12:10:59 +02:00 committed by GitHub
parent e583247a58
commit 4e2060e491
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
16 changed files with 224 additions and 37 deletions

1
.gitignore vendored
View File

@ -8,7 +8,6 @@
**/.vscode
apt_auth.conf
build.tags
calendar/kopano-calendar-*/
data/*
dive.log
docker-compose.override.yml

View File

@ -10,6 +10,7 @@ docker_repo := zokradonh
base_download_version := $(shell ./version.sh core)
core_download_version := $(shell ./version.sh core)
kapps_download_version := $(shell ./version.sh kapps)
meet_download_version := $(shell ./version.sh meet)
webapp_download_version := $(shell ./version.sh webapp)
zpush_download_version := $(shell ./version.sh zpush)
@ -132,6 +133,9 @@ build-core-dagent:
build-helper:
component=build make build-simple
build-kapps:
component=kapps make build
build-konnect:
component=konnect make build-simple

View File

@ -12,7 +12,7 @@ ARG KOPANO_UID=999
ARG KOPANO_GID=999
ENV \
BASE_VERSION=2.0.0 \
BASE_VERSION=2.1.0 \
DEBIAN_FRONTEND=noninteractive \
DEBUG=""
@ -73,7 +73,7 @@ RUN sed -i -e 's/# en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/' /etc/locale.gen && \
# get common utilities
COPY create-kopano-repo.sh /kopano/helper/
COPY kcconf.py /kopano/
COPY kcconf.py defaultconfigs/ /kopano/
SHELL [ "/bin/bash", "-c"]

View File

@ -1,4 +1,4 @@
import os
#!/usr/bin/env python3
import kcconf
# Override configs from environment variables

View File

@ -1,10 +0,0 @@
version: "3.5"
services:
web:
volumes:
- ./calendar/kweb-calendar.cfg:/etc/kweb-extras/kweb-calendar.cfg
- ./calendar/kopano-calendar-0.20.0/:/usr/share/kopano-calendar/
- ./calendar/kopano-calendar-0.20.0/config.json.in:/var/www/api/config/v1/kopano/calendar/config.json
kopano_grapi:
environment:
- KCCONF_GRAPI_ENABLE_EXPERIMENTAL_ENDPOINTS=yes

View File

@ -1 +0,0 @@
staticpwa /calendar /usr/share/kopano-calendar/calendar-webapp

View File

@ -173,7 +173,7 @@ services:
- kopanograpi/:/var/lib/kopano-grapi
- kopanosocket/:/run/kopano
environment:
- KCCONF_GRAPI_ENABLE_EXPERIMENTAL_ENDPOINTS=no
- KCCONF_GRAPI_ENABLE_EXPERIMENTAL_ENDPOINTS=no # needs to be set to yes for grapi versions prior to 10.3 to use calendar
- KCCONF_GRAPI_INSECURE=${INSECURE}
- KCCONF_GRAPI_PERSISTENCY_PATH=/var/lib/kopano-grapi
- SERVICE_TO_START=grapi
@ -218,6 +218,26 @@ services:
tmpfs:
- /tmp
kopano_kapps:
image: ${docker_repo:-zokradonh}/kopano_kapps:${CORE_VERSION:-latest}
read_only: true
restart: unless-stopped
environment:
- SERVICE_TO_START=kapps
env_file:
- kopano_kapps.env
depends_on:
- kopano_kapi
- kopano_konnect
- web
volumes:
- /etc/machine-id:/etc/machine-id
- /etc/machine-id:/var/lib/dbus/machine-id
networks:
- web-net
tmpfs:
- /tmp
kopano_kdav:
image: ${docker_repo:-zokradonh}/kopano_kdav:${KDAV_VERSION:-latest}
read_only: true
@ -457,7 +477,6 @@ services:
- KCCONF_MEET_guests_enabled=true
- KCCONF_MEET_oidc_useImplicitFlow=true # workaround for guest login with meet https://stash.kopano.io/projects/KWM/repos/meet/pull-requests/102/overview
- KCCONF_MEET_minimumVersion=20200121 # can be used force updates of Meet
- SERVICE_TO_START=meet
env_file:
- kopano_meet.env
depends_on:

63
kapps/Dockerfile Normal file
View File

@ -0,0 +1,63 @@
ARG docker_repo=zokradonh
FROM ${docker_repo}/kopano_base:latest
ARG ADDITIONAL_KOPANO_PACKAGES=""
ARG DOWNLOAD_COMMUNITY_PACKAGES=1
ARG KOPANO_REPOSITORY_FLAGS="trusted=yes"
ARG RELEASE_KEY_DOWNLOAD=0
ARG DEBIAN_FRONTEND=noninteractive
ARG KOPANO_CORE_REPOSITORY_URL="file:/kopano/repo/core"
ARG KOPANO_CORE_VERSION=newest
ARG KOPANO_KAPPS_REPOSITORY_URL="file:/kopano/repo/kapps"
ARG KOPANO_KAPPS_VERSION=newest
ENV KOPANO_KAPPS_VERSION=$KOPANO_KAPPS_VERSION
ENV \
ADDITIONAL_KOPANO_PACKAGES=$ADDITIONAL_KOPANO_PACKAGES \
DOWNLOAD_COMMUNITY_PACKAGES=$DOWNLOAD_COMMUNITY_PACKAGES \
KOPANO_CORE_REPOSITORY_URL=$KOPANO_CORE_REPOSITORY_URL \
KOPANO_CORE_VERSION=$KOPANO_CORE_VERSION \
KOPANO_REPOSITORY_FLAGS=$KOPANO_REPOSITORY_FLAGS \
RELEASE_KEY_DOWNLOAD=$RELEASE_KEY_DOWNLOAD
LABEL maintainer=az@zok.xyz \
org.label-schema.name="Kopano apps container" \
org.label-schema.description="Container for running Kopano Apps" \
org.label-schema.url="https://kopano.io" \
org.label-schema.vcs-url="https://github.com/zokradonh/kopano-docker" \
org.label-schema.version=$KOPANO_KAPPS_VERSION \
org.label-schema.schema-version="1.0"
SHELL ["/bin/bash", "-o", "pipefail", "-c"]
# install Kopano Core and refresh ca-certificates
RUN \
# community download and package as apt source repository
. /kopano/helper/create-kopano-repo.sh && \
if [ ${DOWNLOAD_COMMUNITY_PACKAGES} -eq 1 ]; then \
dl_and_package_community "kapps"; \
fi; \
echo "deb [${KOPANO_REPOSITORY_FLAGS}] ${KOPANO_KAPPS_REPOSITORY_URL} ./" > /etc/apt/sources.list.d/kopano.list; \
# install
apt-get update && \
# TODO mime-support could be remove once its an official dependency of kopano-kwebd
apt-get install --no-install-recommends -y \
mime-support \
kopano-kwebd \
kopano-calendar \
${ADDITIONAL_KOPANO_PACKAGES} \
&& \
rm -rf /var/cache/apt /var/lib/apt/lists && \
# make configuration a symlink to prevent overwriting it
# TODO better would be to override its configuration in kweb.cfg
ln -s /tmp/calendar.json /usr/share/kopano-kweb/www/config/kopano/calendar.json
COPY start-service.sh /kopano/
COPY goss.yaml /goss/
CMD [ "/kopano/start-service.sh" ]
HEALTHCHECK --interval=1m --timeout=10s \
CMD goss -g /goss/goss.yaml validate
ARG VCS_REF
LABEL org.label-schema.vcs-ref=$VCS_REF

18
kapps/goss.yaml Normal file
View File

@ -0,0 +1,18 @@
file:
/tmp/calendar.json:
exists: true
mode: "0644"
owner: root
group: root
filetype: file
contains: []
process:
kwebd:
running: true
http:
http://localhost:9080/calendar:
status: 200
allow-insecure: false
no-follow-redirects: false
timeout: 5000
body: []

78
kapps/start-service.sh Executable file
View File

@ -0,0 +1,78 @@
#!/bin/bash
ADDITIONAL_KOPANO_PACKAGES=${ADDITIONAL_KOPANO_PACKAGES:-""}
set -eu # unset variables are errors & non-zero return values exit the whole script
[ "$DEBUG" ] && set -x
# copy configuration files to /tmp/kopano to prevent modification of mounted config files
mkdir -p /tmp/kopano
cp /etc/kopano/*.cfg /tmp/kopano
echo "Applying cfg changes from env"
/usr/bin/python3 /kopano/cfg-from-env.py
meetversion=$(dpkg-query --showformat='${Version}' --show kopano-calendar-webapp)
echo "Using Kopano Calendar: $meetversion"
# allow helper commands given by "docker-compose run"
if [ $# -gt 0 ]; then
exec "$@"
exit
fi
cp /usr/share/doc/kopano-calendar-webapp/config.json.in /tmp/calendar.json
CONFIG_JSON="/tmp/calendar.json"
# TODO move into extra file to make it easier to reuse
echo "Updating $CONFIG_JSON"
for setting in $(compgen -A variable KCCONF_CALENDAR); do
setting2=${setting#KCCONF_CALENDAR_}
# dots in setting2 need to be escaped to not be handled as separate entities in the json file
case ${!setting} in
true|TRUE|false|FALSE|[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9])
jq ".\"${setting2//_/\".\"}\" = ${!setting}" $CONFIG_JSON | sponge $CONFIG_JSON
;;
*)
jq ".\"${setting2//_/\".\"}\" = \"${!setting}\"" $CONFIG_JSON | sponge $CONFIG_JSON
;;
esac
done
# Populate app grid
# TODO move into extra file to make it easier to reuse
# Note: if all of below variables are set to "no" kpop will fall back to its default behaviour and show all known apps.
# enable Kopano Konnect in the app grid
if [ "${GRID_KONNECT:-yes}" = "yes" ]; then
jq '.apps.enabled += ["kopano-konnect"]' $CONFIG_JSON | sponge $CONFIG_JSON
fi
# enable Kopano Meet in the app grid
if [ "${GRID_MEET:-yes}" = "yes" ]; then
jq '.apps.enabled += ["kopano-meet"]' $CONFIG_JSON | sponge $CONFIG_JSON
fi
# enable Kopano WebApp in the app grid
if [ "${GRID_WEBAPP:-yes}" = "yes" ]; then
jq '.apps.enabled += ["kopano-webapp"]' $CONFIG_JSON | sponge $CONFIG_JSON
fi
# enable Kopano WebApp in the app grid
if [ "${GRID_CALENDAR:-yes}" = "yes" ]; then
jq '.apps.enabled += ["kopano-calendar"]' $CONFIG_JSON | sponge $CONFIG_JSON
fi
sed s/\ *=\ */=/g /tmp/kopano/kwebd.cfg > /tmp/kweb-env
# always disable tls
export tls=no
# shellcheck disable=SC2046
export $(grep -v '^#' /tmp/kweb-env | xargs -d '\n')
# services need to be aware of the machine-id
dockerize \
-wait file:///etc/machine-id \
-wait file:///var/lib/dbus/machine-id
# cleaning up env variables
unset "${!KCCONF_@}"
exec kopano-kwebd serve

View File

@ -19,7 +19,8 @@ ENV \
KOPANO_CORE_REPOSITORY_URL=$KOPANO_CORE_REPOSITORY_URL \
KOPANO_CORE_VERSION=$KOPANO_CORE_VERSION \
KOPANO_REPOSITORY_FLAGS=$KOPANO_REPOSITORY_FLAGS \
RELEASE_KEY_DOWNLOAD=$RELEASE_KEY_DOWNLOAD
RELEASE_KEY_DOWNLOAD=$RELEASE_KEY_DOWNLOAD \
SERVICE_TO_START=meet
LABEL maintainer=az@zok.xyz \
org.label-schema.name="Kopano Meet container" \
@ -54,7 +55,7 @@ RUN --mount=type=secret,id=repocred,dst=/etc/apt/apt_auth.conf \
# TODO better would be to override its configuration in kweb.cfg
ln -s /tmp/meet.json /usr/share/kopano-kweb/www/config/kopano/meet.json
COPY defaultconfigs/ start-service.sh /kopano/
COPY start-service.sh /kopano/
COPY goss.yaml /goss/
CMD [ "/kopano/start-service.sh" ]

View File

@ -9,13 +9,8 @@ set -eu # unset variables are errors & non-zero return values exit the whole scr
mkdir -p /tmp/kopano
cp /etc/kopano/*.cfg /tmp/kopano
if [ ! -e /kopano/"$SERVICE_TO_START".py ]; then
echo "Invalid service specified: $SERVICE_TO_START" | ts
exit 1
fi
echo "Configure service '$SERVICE_TO_START'" | ts
/usr/bin/python3 /kopano/"$SERVICE_TO_START".py
echo "Applying cfg changes from env"
/usr/bin/python3 /kopano/cfg-from-env.py
meetversion=$(dpkg-query --showformat='${Version}' --show kopano-meet-webapp)
echo "Using Kopano Meet: $meetversion"
@ -59,6 +54,11 @@ if [ "${GRID_WEBAPP:-yes}" = "yes" ]; then
jq '.apps.enabled += ["kopano-webapp"]' $CONFIG_JSON | sponge $CONFIG_JSON
fi
# enable Kopano WebApp in the app grid
if [ "${GRID_CALENDAR:-yes}" = "yes" ]; then
jq '.apps.enabled += ["kopano-calendar"]' $CONFIG_JSON | sponge $CONFIG_JSON
fi
sed s/\ *=\ */=/g /tmp/kopano/kwebd.cfg > /tmp/kweb-env
# always disable tls
export tls=no

View File

@ -41,7 +41,7 @@ if [ ! -e /etc/machine-id ]; then
fi
echo "Creating individual env files for containers (if they do not exist already)"
for dockerenv in ldap password-self-service mail db kopano_ssl kopano_server kopano_webapp kopano_zpush kopano_grapi kopano_kapi kopano_dagent kopano_spooler kopano_gateway kopano_ical kopano_monitor kopano_scheduler kopano_search kopano_konnect kopano_kwmserver kopano_meet; do
for dockerenv in ldap password-self-service mail db kopano_ssl kopano_server kopano_webapp kopano_zpush kopano_grapi kopano_kapi kopano_dagent kopano_spooler kopano_gateway kopano_ical kopano_monitor kopano_scheduler kopano_search kopano_konnect kopano_kwmserver kopano_meet kopano_kapps; do
touch ./"$dockerenv".env
done

View File

@ -22,17 +22,18 @@ ENV \
# This causes issues when using kweb in kubernetes.
# Related issue https://github.com/docker/compose/issues/229
ENV \
KWEBD_DNS_KONNECT="kopano_konnect" \
KWEBD_DNS_MEET="kopano_meet" \
KWEBD_DNS_KAPI="kopano_kapi" \
KWEBD_DNS_PLAYGROUND="kopano_playground" \
KWEBD_DNS_KWMSERVER="kopano_kwmserver" \
KWEBD_DNS_WEBAPP="kopano_webapp" \
KWEBD_DNS_ZPUSH="kopano_zpush" \
KWEBD_DNS_ICAL="kopano_ical" \
KWEBD_DNS_KDAV="kopano_kdav" \
KWEBD_DNS_GRAPI="kopano_grapi" \
KWEBD_DNS_ICAL="kopano_ical"
KWEBD_DNS_ICAL="kopano_ical" \
KWEBD_DNS_ICAL="kopano_ical" \
KWEBD_DNS_KAPI="kopano_kapi" \
KWEBD_DNS_KAPPS="kopano_kapps" \
KWEBD_DNS_KDAV="kopano_kdav" \
KWEBD_DNS_KONNECT="kopano_konnect" \
KWEBD_DNS_KWMSERVER="kopano_kwmserver" \
KWEBD_DNS_MEET="kopano_meet" \
KWEBD_DNS_PLAYGROUND="kopano_playground" \
KWEBD_DNS_WEBAPP="kopano_webapp" \
KWEBD_DNS_ZPUSH="kopano_zpush"
ENV DOCKERIZE_VERSION v0.6.1
RUN wget https://github.com/jwilder/dockerize/releases/download/$DOCKERIZE_VERSION/dockerize-alpine-linux-amd64-$DOCKERIZE_VERSION.tar.gz \

View File

@ -145,6 +145,21 @@
}
folderish /meet
proxy /api/config/v1/kopano/calendar/ http://{%KWEBD_DNS_KAPPS%}:9080/ {
fail_timeout 10s
try_duration 30s
transparent
keepalive 100
}
proxy /calendar/ {%KWEBD_DNS_KAPPS%}:9080 {
fail_timeout 10s
try_duration 30s
transparent
keepalive 100
}
folderish /calendar
proxy /webapp/ {%KWEBD_DNS_WEBAPP%}:9080 {
fail_timeout 10s
try_duration 30s