mirror of
				https://github.com/zokradonh/kopano-docker
				synced 2025-11-04 04:17:27 +00:00 
			
		
		
		
	add example to run owncloud along with Kopano (#211)
* add example to run owncloud along with Kopano * move ownloud files into dedicated folder * add readme * add script for ldap auto configuration
This commit is contained in:
		
							parent
							
								
									68c691acbd
								
							
						
					
					
						commit
						a1d1de9767
					
				
							
								
								
									
										33
									
								
								owncloud/99-ldap.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										33
									
								
								owncloud/99-ldap.sh
									
									
									
									
									
										Executable file
									
								
							@ -0,0 +1,33 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
echo "Configuring LDAP for kopano-docker"
 | 
			
		||||
 | 
			
		||||
set -x
 | 
			
		||||
 | 
			
		||||
occ app:enable user_ldap
 | 
			
		||||
occ ldap:show-config
 | 
			
		||||
 | 
			
		||||
if [[ "$(occ ldap:show-config)" == "" ]]; then
 | 
			
		||||
	su -c "php occ ldap:create-empty-config" www-data
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
ldapHost=${LDAP_SERVER%:*}
 | 
			
		||||
ldapPort=${LDAP_SERVER##*:}
 | 
			
		||||
 | 
			
		||||
occ ldap:set-config s01 ldapHost ${ldapHost}
 | 
			
		||||
occ ldap:set-config s01 ldapPort ${ldapPort}
 | 
			
		||||
occ ldap:set-config s01 ldapAgentName ${LDAP_BIND_DN}
 | 
			
		||||
occ ldap:set-config s01 ldapAgentPassword ${LDAP_BIND_PW}
 | 
			
		||||
occ ldap:set-config s01 ldapBase ${LDAP_SEARCH_BASE}
 | 
			
		||||
occ ldap:set-config s01 ldapUserFilter "(|(objectclass=kopano-user))"
 | 
			
		||||
occ ldap:set-config s01 ldapLoginFilter "(&(|(objectclass=kopano-user))(uid=%uid))"
 | 
			
		||||
occ ldap:set-config s01 ldapGroupFilter "(&(|(objectclass=kopano-group)))"
 | 
			
		||||
occ ldap:set-config s01 ldapConfigurationActive 1
 | 
			
		||||
 | 
			
		||||
/usr/bin/occ user:sync -m disable "OCA\User_LDAP\User_Proxy"
 | 
			
		||||
 | 
			
		||||
cat << EOF >| /etc/cron.d/sync
 | 
			
		||||
*/10  *  *  *  * root /usr/bin/occ user:sync -m disable 'OCA\User_LDAP\User_Proxy'
 | 
			
		||||
EOF
 | 
			
		||||
 | 
			
		||||
true
 | 
			
		||||
							
								
								
									
										14
									
								
								owncloud/README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								owncloud/README.md
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,14 @@
 | 
			
		||||
# Running kopano-docker together with Owncloud
 | 
			
		||||
 | 
			
		||||
To have a demo environment that runs both Kopano and Owncloud perform the following modifications. This setup uses the official images from https://hub.docker.com/r/owncloud/server.
 | 
			
		||||
 | 
			
		||||
1. Add the `owncloud.yml` to the `COMPOSE_FILE` variable in your `.env` file.
 | 
			
		||||
 | 
			
		||||
Example:
 | 
			
		||||
```
 | 
			
		||||
COMPOSE_FILE=docker-compose.yml:docker-compose.ports.yml:owncloud/owncloud.yml
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
2. run `owncloud.sh` to create the required runtime variables in your `.env` file.
 | 
			
		||||
 | 
			
		||||
3. run `docker-compose up -d` and you will be able to log into `https://your-fqdn/owncloud`.
 | 
			
		||||
							
								
								
									
										96
									
								
								owncloud/owncloud.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										96
									
								
								owncloud/owncloud.sh
									
									
									
									
									
										Executable file
									
								
							@ -0,0 +1,96 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
 | 
			
		||||
set -euo pipefail
 | 
			
		||||
IFS=$'\n\t'
 | 
			
		||||
 | 
			
		||||
if ! command -v reg > /dev/null; then
 | 
			
		||||
	echo "Please install reg in order to run this script."
 | 
			
		||||
	exit 1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if [ ! -e ../.env ]; then
 | 
			
		||||
	echo "please run setup.sh first"
 | 
			
		||||
	exit 1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# this is a kind of ugly hack to be able to source the env file
 | 
			
		||||
# this is sadly needed since postfix in https://github.com/tomav/docker-mailserver/ cannot deal with quoted values
 | 
			
		||||
tmpfile=$(mktemp /tmp/kopano-docker-env.XXXXXX)
 | 
			
		||||
cp ../.env "$tmpfile"
 | 
			
		||||
sed -i '/LDAP_QUERY_FILTER/s/^/#/g' "$tmpfile"
 | 
			
		||||
sed -i '/SASLAUTHD_LDAP_FILTER/s/^/#/g' "$tmpfile"
 | 
			
		||||
# shellcheck disable=SC1090
 | 
			
		||||
source "$tmpfile"
 | 
			
		||||
 | 
			
		||||
fqdn_to_dn() {
 | 
			
		||||
	printf 'dc=%s' "$1" | sed -E 's/\./,dc=/g'
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
random_string() {
 | 
			
		||||
	hexdump -n 16 -v -e '/1 "%02X"' /dev/urandom
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
docker_tag_search () {
 | 
			
		||||
	image="$1"
 | 
			
		||||
	results=$(reg tags "$image" 2> /dev/null)
 | 
			
		||||
	echo "$results" | xargs -n1 | sort --version-sort -ru
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# function from https://stackoverflow.com/a/42790579/4754613
 | 
			
		||||
selectWithDefault() {
 | 
			
		||||
 | 
			
		||||
	local item i=0 numItems=$#
 | 
			
		||||
 | 
			
		||||
	# Print numbered menu items, based on the arguments passed.
 | 
			
		||||
	for item; do         # Short for: for item in "$@"; do
 | 
			
		||||
		printf '%s\n' "$((++i))) $item"
 | 
			
		||||
	done >&2 # Print to stderr, as `select` does.
 | 
			
		||||
 | 
			
		||||
	# Prompt the user for the index of the desired item.
 | 
			
		||||
	while :; do
 | 
			
		||||
		printf %s "${PS3-#? }" >&2 # Print the prompt string to stderr, as `select` does.
 | 
			
		||||
		read -r index
 | 
			
		||||
		# Make sure that the input is either empty or that a valid index was entered.
 | 
			
		||||
		[[ -z $index ]] && break  # empty input
 | 
			
		||||
		(( index >= 1 && index <= numItems )) 2>/dev/null || { echo "Invalid selection. Please try again." >&2; continue; }
 | 
			
		||||
		break
 | 
			
		||||
	done
 | 
			
		||||
 | 
			
		||||
	# Output the selected item, if any.
 | 
			
		||||
	[[ -n $index ]] && printf %s "${@: index:1}"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
update_env_file () {
 | 
			
		||||
	varname="$1"
 | 
			
		||||
	varvalue="$2"
 | 
			
		||||
	if ! grep -q "$varname" ../.env; then
 | 
			
		||||
		echo "$varname=$varvalue" >> ../.env
 | 
			
		||||
	else
 | 
			
		||||
		sed -i "/$varname/c $varname=$varvalue" ../.env
 | 
			
		||||
	fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
tag_question () {
 | 
			
		||||
	containername="$1"
 | 
			
		||||
	value_default="$2"
 | 
			
		||||
	description="$3"
 | 
			
		||||
	echo "Which tag do you want to use for $description? [$value_default]"
 | 
			
		||||
	echo "Available tags in $containername: "
 | 
			
		||||
	set +e # do not exit when new_value is empty
 | 
			
		||||
	# shellcheck disable=SC2046
 | 
			
		||||
	new_value=$(selectWithDefault $(docker_tag_search "$containername"))
 | 
			
		||||
	set -e
 | 
			
		||||
	return_value=${new_value:-$value_default}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
tag_question owncloud/server "${OWNCLOUD_VERSION:-latest}" "Owncloud"
 | 
			
		||||
update_env_file OWNCLOUD_VERSION "$return_value"
 | 
			
		||||
update_env_file OWNCLOUD_DB_USERNAME owncloud
 | 
			
		||||
update_env_file OWNCLOUD_DB_PASSWORD "$(random_string)"
 | 
			
		||||
update_env_file OWNCLOUD_ADMIN_USERNAME admin
 | 
			
		||||
update_env_file OWNCLOUD_ADMIN_PASSWORD "$(random_string)"
 | 
			
		||||
update_env_file MARIADB_ROOT_PASSWORD "$(random_string)"
 | 
			
		||||
 | 
			
		||||
if [ -e "$tmpfile" ]; then
 | 
			
		||||
	rm "$tmpfile"
 | 
			
		||||
fi
 | 
			
		||||
							
								
								
									
										87
									
								
								owncloud/owncloud.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										87
									
								
								owncloud/owncloud.yml
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,87 @@
 | 
			
		||||
# based on https://github.com/owncloud/docs/blob/4a04cd16a10a853bfab630e8a6450f722ac6ea86/modules/admin_manual/examples/installation/docker/docker-compose.yml
 | 
			
		||||
version: "3.5"
 | 
			
		||||
 | 
			
		||||
volumes:
 | 
			
		||||
  oc_files:
 | 
			
		||||
  oc_mysql:
 | 
			
		||||
  oc_backup:
 | 
			
		||||
  oc_redis:
 | 
			
		||||
 | 
			
		||||
services:
 | 
			
		||||
  owncloud:
 | 
			
		||||
    image: owncloud/server:${OWNCLOUD_VERSION:-latest}
 | 
			
		||||
    restart: always
 | 
			
		||||
    depends_on:
 | 
			
		||||
      - oc_db
 | 
			
		||||
      - oc_redis
 | 
			
		||||
      - ldap
 | 
			
		||||
      - web
 | 
			
		||||
    environment:
 | 
			
		||||
      - OWNCLOUD_DOMAIN=${FQDN}
 | 
			
		||||
      - OWNCLOUD_DB_TYPE=mysql
 | 
			
		||||
      - OWNCLOUD_DB_NAME=owncloud
 | 
			
		||||
      - OWNCLOUD_DB_USERNAME=${OWNCLOUD_DB_USERNAME}
 | 
			
		||||
      - OWNCLOUD_DB_PASSWORD=${OWNCLOUD_DB_PASSWORD}
 | 
			
		||||
      - OWNCLOUD_DB_HOST=oc_db
 | 
			
		||||
      - OWNCLOUD_ADMIN_USERNAME=${OWNCLOUD_ADMIN_USERNAME}
 | 
			
		||||
      - OWNCLOUD_ADMIN_PASSWORD=${OWNCLOUD_ADMIN_PASSWORD}
 | 
			
		||||
      - OWNCLOUD_MYSQL_UTF8MB4=true
 | 
			
		||||
      - OWNCLOUD_REDIS_ENABLED=true
 | 
			
		||||
      - OWNCLOUD_REDIS_HOST=oc_redis
 | 
			
		||||
      - OWNCLOUD_SUB_URL=/owncloud
 | 
			
		||||
      - LDAP_SERVER=${LDAP_SERVER}
 | 
			
		||||
      - LDAP_SEARCH_BASE=${LDAP_SEARCH_BASE}
 | 
			
		||||
      - LDAP_BIND_DN=${LDAP_BIND_DN}
 | 
			
		||||
      - LDAP_BIND_PW=${LDAP_BIND_PW}
 | 
			
		||||
    healthcheck:
 | 
			
		||||
      test: ["CMD", "/usr/bin/healthcheck"]
 | 
			
		||||
      interval: 30s
 | 
			
		||||
      timeout: 10s
 | 
			
		||||
      retries: 5
 | 
			
		||||
    volumes:
 | 
			
		||||
      - oc_files:/mnt/data
 | 
			
		||||
      - ./owncloud/99-ldap.sh:/etc/owncloud.d/99-ldap.sh
 | 
			
		||||
    networks:
 | 
			
		||||
      - web-net
 | 
			
		||||
      - owncloud-net
 | 
			
		||||
      - ldap-net
 | 
			
		||||
 | 
			
		||||
  oc_db:
 | 
			
		||||
    image: webhippie/mariadb:latest
 | 
			
		||||
    restart: always
 | 
			
		||||
    environment:
 | 
			
		||||
      - MARIADB_ROOT_PASSWORD=${MARIADB_ROOT_PASSWORD}
 | 
			
		||||
      - MARIADB_USERNAME=${OWNCLOUD_DB_USERNAME}
 | 
			
		||||
      - MARIADB_PASSWORD=${OWNCLOUD_DB_PASSWORD}
 | 
			
		||||
      - MARIADB_DATABASE=owncloud
 | 
			
		||||
      - MARIADB_MAX_ALLOWED_PACKET=128M
 | 
			
		||||
      - MARIADB_INNODB_LOG_FILE_SIZE=64M
 | 
			
		||||
    healthcheck:
 | 
			
		||||
      test: ["CMD", "/usr/bin/healthcheck"]
 | 
			
		||||
      interval: 30s
 | 
			
		||||
      timeout: 10s
 | 
			
		||||
      retries: 5
 | 
			
		||||
    volumes:
 | 
			
		||||
      - oc_mysql:/var/lib/mysql
 | 
			
		||||
      - oc_backup:/var/lib/backup
 | 
			
		||||
    networks:
 | 
			
		||||
      - owncloud-net
 | 
			
		||||
 | 
			
		||||
  oc_redis:
 | 
			
		||||
    image: webhippie/redis:latest
 | 
			
		||||
    restart: always
 | 
			
		||||
    environment:
 | 
			
		||||
      - REDIS_DATABASES=1
 | 
			
		||||
    healthcheck:
 | 
			
		||||
      test: ["CMD", "/usr/bin/healthcheck"]
 | 
			
		||||
      interval: 30s
 | 
			
		||||
      timeout: 10s
 | 
			
		||||
      retries: 5
 | 
			
		||||
    volumes:
 | 
			
		||||
      - oc_redis:/var/lib/redis
 | 
			
		||||
    networks:
 | 
			
		||||
      - owncloud-net
 | 
			
		||||
 | 
			
		||||
networks:
 | 
			
		||||
  owncloud-net:
 | 
			
		||||
    driver: bridge
 | 
			
		||||
@ -205,4 +205,11 @@
 | 
			
		||||
		transparent
 | 
			
		||||
		keepalive 100
 | 
			
		||||
	}
 | 
			
		||||
	proxy /owncloud/ owncloud:8080 {
 | 
			
		||||
		transparent
 | 
			
		||||
		keepalive 0
 | 
			
		||||
		fail_timeout 10s
 | 
			
		||||
		try_duration 30s
 | 
			
		||||
	}
 | 
			
		||||
	folderish /owncloud
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user