mirror of
				https://github.com/zokradonh/kopano-docker
				synced 2025-10-31 18:37:15 +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 | 		transparent | ||||||
| 		keepalive 100 | 		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