diff --git a/Makefile b/Makefile index 49f5346..a5a2fd4 100644 --- a/Makefile +++ b/Makefile @@ -206,12 +206,15 @@ check-scripts: git ls-files --exclude='Dockerfile*' --ignored | xargs --max-lines=1 hadolint test: - docker-compose -f $(COMPOSE_FILE) down -v || true + docker-compose -f $(COMPOSE_FILE) down -v --remove-orphans || true make build-all docker-compose -f $(COMPOSE_FILE) build docker-compose -f $(COMPOSE_FILE) up -d docker-compose -f $(COMPOSE_FILE) ps +test-update-env: + docker-compose -f $(COMPOSE_FILE) up -d + test-quick: docker-compose -f $(COMPOSE_FILE) stop || true docker-compose -f $(COMPOSE_FILE) up -d diff --git a/README.md b/README.md index 06db6ea..30b3404 100644 --- a/README.md +++ b/README.md @@ -32,12 +32,53 @@ Yes, indeed. You could for example use this to easily try out newer Kopano WebAp And last but not least this project also offers a `zokradonh/kopano_utils` image to easily run tools such as `kopano-backup`, `kopano-migration-pst`, `kopano-migration-imap` and all the other utilities that are bundles with Kopano. See [below](#some-more-commands-for-those-unfamilar-with-docker-compose) to see how to run `zokradonh/kopano_utils`. -### Need to adjust any values after the initial run of `setup.sh`? +### Additional configuration / Need to adjust any values after the initial run of `setup.sh`? If you want to modify some of the values from the `setup.sh` run you can simply edit `.env` in your favourite editor. Repeated runs of `setup.sh` will neither modify `docker-compose.yml` nor `.env`. In the ´.env´ file you will also find some given defaults like ldap query filters and the local ports for the reverse proxy. Additionally a dedicated env file is created for each container (at least where that would make sense). The env file has the container name as part of the file name. For example for the `kopano_server` container the filename is `kopano_server.env`. These additional env files are auto created when running `setup.sh` +Any additional configuration should be done through environment variables and not done in the actual container. The images working with configuration files (e.g. `kopano_core`, `kopano_webapp`, `kopano_meet`) have a mechanism built in to translate env variables into configuration files. For services that can directly work with env variables (e.g. `kopano_konnect`, ´kopano_kwmserver´) these can be specified directly. + +Examples of env variables: + +``` +KCCONF_KWEBD_TLS=no +^ ^ ^ ^ +| | | | +General prefix | + | | | + Name of the relevant configuration file (kwebd.cfg in this case) + | | + Name of the configuration option in the configuration file + | + Value of the configuration option + +KCCONF_WEBAPP_CLIENT_TIMEOUT=3600 +^ ^ ^ ^ +| | | | +General prefix| | + | | | + Special value to signal the change should go into config.php belonging to WebApp + | | + Name of the configuration option in the configuration file + | + Value of the configuration option + +KCCONF_WEBAPPPLUGIN_MDM_PLUGIN_MDM_USER_DEFAULT_ENABLE_MDM=true +^ ^ ^ ^ ^ +| | | | | +General prefix | | | + | | | | + Special value to signal the change should go into config-$identifier.php (located in /etc/kopano/webapp) + | | | + Identifier for the configuration file (config-$identifier.php) + | | + Name of the configuration option in the configuration file + | + Value of the configuration option +``` + ### How to use a newer version than the one available from the Docker Hub? In this repository you can also find a Makefile that automates the process of building newer images. diff --git a/webapp/start.sh b/webapp/start.sh index a7d6847..3826966 100755 --- a/webapp/start.sh +++ b/webapp/start.sh @@ -8,6 +8,28 @@ ADDITIONAL_KOPANO_WEBAPP_PLUGINS=${ADDITIONAL_KOPANO_WEBAPP_PLUGINS:-""} set -eu # unset variables are errors & non-zero return values exit the whole script +php_cfg_gen() { + local cfg_file="$1" + local cfg_setting="$2" + local cfg_value="$3" + if [ -e "$cfg_file" ]; then + if grep -q "$cfg_setting" "$cfg_file"; then + echo "Setting $cfg_setting = $cfg_value in $cfg_file" + sed -ri "s#(\s*define).+${cfg_setting}.+#\define(\x27${cfg_setting}\x27, \x27${cfg_value}\x27\);#g" "$cfg_file" + else + echo "Error: Config option $cfg_setting not found in $cfg_file" + cat "$cfg_file" + exit 1 + fi + else + echo "Error: Config file $cfg_file not found. Plugin not installed?" + local dir + dir=$(dirname "$cfg_file") + ls -la "$dir" + exit 1 + fi +} + ADDITIONAL_KOPANO_PACKAGES="$ADDITIONAL_KOPANO_PACKAGES $ADDITIONAL_KOPANO_WEBAPP_PLUGINS" [ -n "${ADDITIONAL_KOPANO_PACKAGES// }" ] && apt update @@ -18,22 +40,33 @@ ADDITIONAL_KOPANO_PACKAGES="$ADDITIONAL_KOPANO_PACKAGES $ADDITIONAL_KOPANO_WEBAP fi done -echo "Ensure directories" +# Ensure directories exist mkdir -p /run/sessions /tmp/webapp if [ "$KCCONF_SERVERHOSTNAME" == "127.0.0.1" ]; then echo "Kopano WebApp is using the default: connection" else echo "Kopano WebApp is using an ip connection" - sed -e "s#define(\"DEFAULT_SERVER\",\s*\".*\"#define(\"DEFAULT_SERVER\", \"https://${KCCONF_SERVERHOSTNAME}:${KCCONF_SERVERPORT}/kopano\"#" \ - -i /etc/kopano/webapp/config.php + php_cfg_gen /etc/kopano/webapp/config.php DEFAULT_SERVER "https://${KCCONF_SERVERHOSTNAME}:${KCCONF_SERVERPORT}/kopano" fi -# TODO is enabling this really neccesary when reverse proxying webapp? echo "Configuring Kopano WebApp for use behind a reverse proxy" -sed \ - -e "s#define(\"INSECURE_COOKIES\",\s*.*)#define(\"INSECURE_COOKIES\", true)#" \ - -i /etc/kopano/webapp/config.php +php_cfg_gen /etc/kopano/webapp/config.php INSECURE_COOKIES true + +# configuring webapp from env +for setting in $(compgen -A variable KCCONF_WEBAPP_); do + setting2=${setting#KCCONF_WEBAPP_} + php_cfg_gen /etc/kopano/webapp/config.php "${setting2}" "${!setting}" +done + +# configuring webapp plugins from env +for setting in $(compgen -A variable KCCONF_WEBAPPPLUGIN_); do + setting2=${setting#KCCONF_WEBAPPPLUGIN_} + filename="${setting2%%_*}" + setting3=${setting#KCCONF_WEBAPPPLUGIN_${filename}_} + identifier="${filename,,}" + php_cfg_gen /etc/kopano/webapp/config-"$identifier".php "${setting3}" "${!setting}" +done echo "Ensure config ownership" chown -R www-data:www-data /run/sessions /tmp/webapp