1
0
mirror of https://github.com/zokradonh/kopano-docker synced 2025-06-07 07:56: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 **/.vscode
apt_auth.conf apt_auth.conf
build.tags build.tags
calendar/kopano-calendar-*/
data/* data/*
dive.log dive.log
docker-compose.override.yml docker-compose.override.yml

View File

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

View File

@ -12,7 +12,7 @@ ARG KOPANO_UID=999
ARG KOPANO_GID=999 ARG KOPANO_GID=999
ENV \ ENV \
BASE_VERSION=2.0.0 \ BASE_VERSION=2.1.0 \
DEBIAN_FRONTEND=noninteractive \ DEBIAN_FRONTEND=noninteractive \
DEBUG="" 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 # get common utilities
COPY create-kopano-repo.sh /kopano/helper/ COPY create-kopano-repo.sh /kopano/helper/
COPY kcconf.py /kopano/ COPY kcconf.py defaultconfigs/ /kopano/
SHELL [ "/bin/bash", "-c"] SHELL [ "/bin/bash", "-c"]

View File

@ -1,4 +1,4 @@
import os #!/usr/bin/env python3
import kcconf import kcconf
# Override configs from environment variables # 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 - kopanograpi/:/var/lib/kopano-grapi
- kopanosocket/:/run/kopano - kopanosocket/:/run/kopano
environment: 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_INSECURE=${INSECURE}
- KCCONF_GRAPI_PERSISTENCY_PATH=/var/lib/kopano-grapi - KCCONF_GRAPI_PERSISTENCY_PATH=/var/lib/kopano-grapi
- SERVICE_TO_START=grapi - SERVICE_TO_START=grapi
@ -218,6 +218,26 @@ services:
tmpfs: tmpfs:
- /tmp - /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: kopano_kdav:
image: ${docker_repo:-zokradonh}/kopano_kdav:${KDAV_VERSION:-latest} image: ${docker_repo:-zokradonh}/kopano_kdav:${KDAV_VERSION:-latest}
read_only: true read_only: true
@ -457,7 +477,6 @@ services:
- KCCONF_MEET_guests_enabled=true - 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_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 - KCCONF_MEET_minimumVersion=20200121 # can be used force updates of Meet
- SERVICE_TO_START=meet
env_file: env_file:
- kopano_meet.env - kopano_meet.env
depends_on: 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_REPOSITORY_URL=$KOPANO_CORE_REPOSITORY_URL \
KOPANO_CORE_VERSION=$KOPANO_CORE_VERSION \ KOPANO_CORE_VERSION=$KOPANO_CORE_VERSION \
KOPANO_REPOSITORY_FLAGS=$KOPANO_REPOSITORY_FLAGS \ 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 \ LABEL maintainer=az@zok.xyz \
org.label-schema.name="Kopano Meet container" \ 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 # 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 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/ COPY goss.yaml /goss/
CMD [ "/kopano/start-service.sh" ] 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 mkdir -p /tmp/kopano
cp /etc/kopano/*.cfg /tmp/kopano cp /etc/kopano/*.cfg /tmp/kopano
if [ ! -e /kopano/"$SERVICE_TO_START".py ]; then echo "Applying cfg changes from env"
echo "Invalid service specified: $SERVICE_TO_START" | ts /usr/bin/python3 /kopano/cfg-from-env.py
exit 1
fi
echo "Configure service '$SERVICE_TO_START'" | ts
/usr/bin/python3 /kopano/"$SERVICE_TO_START".py
meetversion=$(dpkg-query --showformat='${Version}' --show kopano-meet-webapp) meetversion=$(dpkg-query --showformat='${Version}' --show kopano-meet-webapp)
echo "Using Kopano Meet: $meetversion" 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 jq '.apps.enabled += ["kopano-webapp"]' $CONFIG_JSON | sponge $CONFIG_JSON
fi 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 sed s/\ *=\ */=/g /tmp/kopano/kwebd.cfg > /tmp/kweb-env
# always disable tls # always disable tls
export tls=no export tls=no

View File

@ -41,7 +41,7 @@ if [ ! -e /etc/machine-id ]; then
fi fi
echo "Creating individual env files for containers (if they do not exist already)" 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 touch ./"$dockerenv".env
done done

View File

@ -22,17 +22,18 @@ ENV \
# This causes issues when using kweb in kubernetes. # This causes issues when using kweb in kubernetes.
# Related issue https://github.com/docker/compose/issues/229 # Related issue https://github.com/docker/compose/issues/229
ENV \ 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_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 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 \ 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 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 { proxy /webapp/ {%KWEBD_DNS_WEBAPP%}:9080 {
fail_timeout 10s fail_timeout 10s
try_duration 30s try_duration 30s