Compare commits
	
		
			2 Commits
		
	
	
		
			f34b13b347
			...
			bfae98946a
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| bfae98946a | |||
| a92ec91cc5 | 
@ -1,17 +1,19 @@
 | 
				
			|||||||
---
 | 
					---
 | 
				
			||||||
version: '3.7'
 | 
					version: '3.9'
 | 
				
			||||||
services:
 | 
					services:
 | 
				
			||||||
  mail:
 | 
					  mail:
 | 
				
			||||||
    image: mailserver/docker-mailserver:11.3.1
 | 
					    image: mailserver/docker-mailserver:12.1.0
 | 
				
			||||||
    hostname: ${HOSTNAME}
 | 
					    hostname: ${HOSTNAME}
 | 
				
			||||||
    domainname: ${DOMAINNAME}
 | 
					    domainname: ${DOMAINNAME}
 | 
				
			||||||
    container_name: ${CONTAINER_NAME}
 | 
					    container_name: ${CONTAINER_NAME}
 | 
				
			||||||
    restart: always
 | 
					    restart: unless-stopped
 | 
				
			||||||
 | 
					    stop_grace_period: 2m30s # Avoid data loss
 | 
				
			||||||
    ports:
 | 
					    ports:
 | 
				
			||||||
      - "25:25"
 | 
					      - "25:25"
 | 
				
			||||||
      - "143:143"
 | 
					      - "143:143"
 | 
				
			||||||
      - "587:587"
 | 
					      - "587:587"
 | 
				
			||||||
      - "993:993"
 | 
					      - "993:993"
 | 
				
			||||||
 | 
					      # - "127.0.0.1:1134:1134" # Only useful once we enable RSPAMD
 | 
				
			||||||
    volumes:
 | 
					    volumes:
 | 
				
			||||||
      - maildata:/var/mail
 | 
					      - maildata:/var/mail
 | 
				
			||||||
      - mailstate:/var/mail-state
 | 
					      - mailstate:/var/mail-state
 | 
				
			||||||
@ -26,10 +28,15 @@ services:
 | 
				
			|||||||
      - SYS_PTRACE
 | 
					      - SYS_PTRACE
 | 
				
			||||||
    networks:
 | 
					    networks:
 | 
				
			||||||
      - internal
 | 
					      - internal
 | 
				
			||||||
 | 
					    logging:
 | 
				
			||||||
 | 
					      driver: "json-file"
 | 
				
			||||||
 | 
					      options:
 | 
				
			||||||
 | 
					        max-size: "10m"
 | 
				
			||||||
 | 
					        max-file: "3"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  roundcubedb:
 | 
					  roundcubedb:
 | 
				
			||||||
    image: postgres:9.6-alpine
 | 
					    image: postgres:9.6-alpine
 | 
				
			||||||
    restart: always
 | 
					    restart: unless-stopped
 | 
				
			||||||
    env_file:
 | 
					    env_file:
 | 
				
			||||||
      - .env
 | 
					      - .env
 | 
				
			||||||
      - env-roundcube
 | 
					      - env-roundcube
 | 
				
			||||||
@ -37,10 +44,15 @@ services:
 | 
				
			|||||||
      - rb_db:/var/lib/postgresql/data/
 | 
					      - rb_db:/var/lib/postgresql/data/
 | 
				
			||||||
    networks:
 | 
					    networks:
 | 
				
			||||||
      - internal
 | 
					      - internal
 | 
				
			||||||
 | 
					    logging:
 | 
				
			||||||
 | 
					      driver: "json-file"
 | 
				
			||||||
 | 
					      options:
 | 
				
			||||||
 | 
					        max-size: "5m"
 | 
				
			||||||
 | 
					        max-file: "3"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  roundcube:
 | 
					  roundcube:
 | 
				
			||||||
    image: roundcube/roundcubemail:1.6.x-apache
 | 
					    image: roundcube/roundcubemail:1.6.x-apache
 | 
				
			||||||
    restart: always
 | 
					    restart: unless-stopped
 | 
				
			||||||
    depends_on:
 | 
					    depends_on:
 | 
				
			||||||
      - mail
 | 
					      - mail
 | 
				
			||||||
      - roundcubedb
 | 
					      - roundcubedb
 | 
				
			||||||
@ -52,6 +64,11 @@ services:
 | 
				
			|||||||
    networks:
 | 
					    networks:
 | 
				
			||||||
      - proxy
 | 
					      - proxy
 | 
				
			||||||
      - internal
 | 
					      - internal
 | 
				
			||||||
 | 
					    logging:
 | 
				
			||||||
 | 
					      driver: "json-file"
 | 
				
			||||||
 | 
					      options:
 | 
				
			||||||
 | 
					        max-size: "10m"
 | 
				
			||||||
 | 
					        max-file: "3"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
volumes:
 | 
					volumes:
 | 
				
			||||||
  maildata:
 | 
					  maildata:
 | 
				
			||||||
 | 
				
			|||||||
@ -12,7 +12,7 @@ DESIRED_CONFIG_PATH=
 | 
				
			|||||||
DIR=$(pwd)
 | 
					DIR=$(pwd)
 | 
				
			||||||
DMS_CONFIG='/tmp/docker-mailserver'
 | 
					DMS_CONFIG='/tmp/docker-mailserver'
 | 
				
			||||||
IMAGE_NAME=
 | 
					IMAGE_NAME=
 | 
				
			||||||
DEFAULT_IMAGE_NAME='docker.io/mailserver/docker-mailserver:latest'
 | 
					DEFAULT_IMAGE_NAME='ghcr.io/docker-mailserver/docker-mailserver:latest'
 | 
				
			||||||
INFO=
 | 
					INFO=
 | 
				
			||||||
PODMAN_ROOTLESS=false
 | 
					PODMAN_ROOTLESS=false
 | 
				
			||||||
USE_SELINUX=
 | 
					USE_SELINUX=
 | 
				
			||||||
@ -71,11 +71,9 @@ function _show_local_usage
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
function _get_absolute_script_directory
 | 
					function _get_absolute_script_directory
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  if dirname "$(readlink -f "${0}")" &>/dev/null
 | 
					  if dirname "$(readlink -f "${0}")" &>/dev/null; then
 | 
				
			||||||
  then
 | 
					 | 
				
			||||||
    DIR=$(dirname "$(readlink -f "${0}")")
 | 
					    DIR=$(dirname "$(readlink -f "${0}")")
 | 
				
			||||||
  elif realpath -e -L "${0}" &>/dev/null
 | 
					  elif realpath -e -L "${0}" &>/dev/null; then
 | 
				
			||||||
  then
 | 
					 | 
				
			||||||
    DIR=$(realpath -e -L "${0}")
 | 
					    DIR=$(realpath -e -L "${0}")
 | 
				
			||||||
    DIR="${DIR%/setup.sh}"
 | 
					    DIR="${DIR%/setup.sh}"
 | 
				
			||||||
  fi
 | 
					  fi
 | 
				
			||||||
@ -83,8 +81,7 @@ function _get_absolute_script_directory
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
function _set_default_config_path
 | 
					function _set_default_config_path
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  if [[ -d "${DIR}/config" ]]
 | 
					  if [[ -d "${DIR}/config" ]]; then
 | 
				
			||||||
  then
 | 
					 | 
				
			||||||
    # legacy path (pre v10.2.0)
 | 
					    # legacy path (pre v10.2.0)
 | 
				
			||||||
    DEFAULT_CONFIG_PATH="${DIR}/config"
 | 
					    DEFAULT_CONFIG_PATH="${DIR}/config"
 | 
				
			||||||
  else
 | 
					  else
 | 
				
			||||||
@ -94,23 +91,19 @@ function _set_default_config_path
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
function _handle_config_path
 | 
					function _handle_config_path
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  if [[ -z ${DESIRED_CONFIG_PATH} ]]
 | 
					  if [[ -z ${DESIRED_CONFIG_PATH} ]]; then
 | 
				
			||||||
  then
 | 
					 | 
				
			||||||
    # no desired config path
 | 
					    # no desired config path
 | 
				
			||||||
    if [[ -n ${CONTAINER_NAME} ]]
 | 
					    if [[ -n ${CONTAINER_NAME} ]]; then
 | 
				
			||||||
    then
 | 
					 | 
				
			||||||
      VOLUME=$(${CRI} inspect "${CONTAINER_NAME}" \
 | 
					      VOLUME=$(${CRI} inspect "${CONTAINER_NAME}" \
 | 
				
			||||||
        --format="{{range .Mounts}}{{ println .Source .Destination}}{{end}}" | \
 | 
					        --format="{{range .Mounts}}{{ println .Source .Destination}}{{end}}" | \
 | 
				
			||||||
        grep "${DMS_CONFIG}$" 2>/dev/null || :)
 | 
					        grep "${DMS_CONFIG}$" 2>/dev/null || :)
 | 
				
			||||||
    fi
 | 
					    fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if [[ -n ${VOLUME} ]]
 | 
					    if [[ -n ${VOLUME} ]]; then
 | 
				
			||||||
    then
 | 
					 | 
				
			||||||
      CONFIG_PATH=$(echo "${VOLUME}" | awk '{print $1}')
 | 
					      CONFIG_PATH=$(echo "${VOLUME}" | awk '{print $1}')
 | 
				
			||||||
    fi
 | 
					    fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if [[ -z ${CONFIG_PATH} ]]
 | 
					    if [[ -z ${CONFIG_PATH} ]]; then
 | 
				
			||||||
    then
 | 
					 | 
				
			||||||
      CONFIG_PATH=${DEFAULT_CONFIG_PATH}
 | 
					      CONFIG_PATH=${DEFAULT_CONFIG_PATH}
 | 
				
			||||||
    fi
 | 
					    fi
 | 
				
			||||||
  else
 | 
					  else
 | 
				
			||||||
@ -121,8 +114,7 @@ function _handle_config_path
 | 
				
			|||||||
function _run_in_new_container
 | 
					function _run_in_new_container
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  # start temporary container with specified image
 | 
					  # start temporary container with specified image
 | 
				
			||||||
  if ! ${CRI} history -q "${IMAGE_NAME}" &>/dev/null
 | 
					  if ! ${CRI} history -q "${IMAGE_NAME}" &>/dev/null; then
 | 
				
			||||||
  then
 | 
					 | 
				
			||||||
    echo "Image '${IMAGE_NAME}' not found. Pulling ..."
 | 
					    echo "Image '${IMAGE_NAME}' not found. Pulling ..."
 | 
				
			||||||
    ${CRI} pull "${IMAGE_NAME}"
 | 
					    ${CRI} pull "${IMAGE_NAME}"
 | 
				
			||||||
  fi
 | 
					  fi
 | 
				
			||||||
@ -151,8 +143,7 @@ function _main
 | 
				
			|||||||
          ( *  ) DESIRED_CONFIG_PATH="${DIR}/${OPTARG}" ;;
 | 
					          ( *  ) DESIRED_CONFIG_PATH="${DIR}/${OPTARG}" ;;
 | 
				
			||||||
        esac
 | 
					        esac
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if [[ ! -d ${DESIRED_CONFIG_PATH} ]]
 | 
					        if [[ ! -d ${DESIRED_CONFIG_PATH} ]]; then
 | 
				
			||||||
        then
 | 
					 | 
				
			||||||
          echo "Specified directory '${DESIRED_CONFIG_PATH}' doesn't exist" >&2
 | 
					          echo "Specified directory '${DESIRED_CONFIG_PATH}' doesn't exist" >&2
 | 
				
			||||||
          exit 1
 | 
					          exit 1
 | 
				
			||||||
        fi
 | 
					        fi
 | 
				
			||||||
@ -169,14 +160,11 @@ function _main
 | 
				
			|||||||
  done
 | 
					  done
 | 
				
			||||||
  shift $(( OPTIND - 1 ))
 | 
					  shift $(( OPTIND - 1 ))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if command -v docker &>/dev/null
 | 
					  if command -v docker &>/dev/null; then
 | 
				
			||||||
  then
 | 
					 | 
				
			||||||
    CRI=docker
 | 
					    CRI=docker
 | 
				
			||||||
  elif command -v podman &>/dev/null
 | 
					  elif command -v podman &>/dev/null; then
 | 
				
			||||||
  then
 | 
					 | 
				
			||||||
    CRI=podman
 | 
					    CRI=podman
 | 
				
			||||||
    if ! ${PODMAN_ROOTLESS} && [[ ${EUID} -ne 0 ]]
 | 
					    if ! ${PODMAN_ROOTLESS} && [[ ${EUID} -ne 0 ]]; then
 | 
				
			||||||
    then
 | 
					 | 
				
			||||||
      read -r -p "You are running Podman in rootless mode. Continue? [Y/n] "
 | 
					      read -r -p "You are running Podman in rootless mode. Continue? [Y/n] "
 | 
				
			||||||
      [[ -n ${REPLY} ]] && [[ ${REPLY} =~ (n|N) ]] && exit 0
 | 
					      [[ -n ${REPLY} ]] && [[ ${REPLY} =~ (n|N) ]] && exit 0
 | 
				
			||||||
    fi
 | 
					    fi
 | 
				
			||||||
@ -190,13 +178,11 @@ function _main
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  [[ -z ${CONTAINER_NAME} ]] && CONTAINER_NAME=${INFO#*;}
 | 
					  [[ -z ${CONTAINER_NAME} ]] && CONTAINER_NAME=${INFO#*;}
 | 
				
			||||||
  [[ -z ${IMAGE_NAME} ]] && IMAGE_NAME=${INFO%;*}
 | 
					  [[ -z ${IMAGE_NAME} ]] && IMAGE_NAME=${INFO%;*}
 | 
				
			||||||
  if [[ -z ${IMAGE_NAME} ]]
 | 
					  if [[ -z ${IMAGE_NAME} ]]; then
 | 
				
			||||||
  then
 | 
					 | 
				
			||||||
    IMAGE_NAME=${NAME:-${DEFAULT_IMAGE_NAME}}
 | 
					    IMAGE_NAME=${NAME:-${DEFAULT_IMAGE_NAME}}
 | 
				
			||||||
  fi
 | 
					  fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if test -t 0
 | 
					  if test -t 0; then
 | 
				
			||||||
  then
 | 
					 | 
				
			||||||
    USE_TTY="-it"
 | 
					    USE_TTY="-it"
 | 
				
			||||||
  else
 | 
					  else
 | 
				
			||||||
    # GitHub Actions will fail (or really anything else
 | 
					    # GitHub Actions will fail (or really anything else
 | 
				
			||||||
@ -207,8 +193,7 @@ function _main
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  _handle_config_path
 | 
					  _handle_config_path
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if [[ -n ${CONTAINER_NAME} ]]
 | 
					  if [[ -n ${CONTAINER_NAME} ]]; then
 | 
				
			||||||
  then
 | 
					 | 
				
			||||||
    ${CRI} exec "${USE_TTY}" "${CONTAINER_NAME}" setup "${@}"
 | 
					    ${CRI} exec "${USE_TTY}" "${CONTAINER_NAME}" setup "${@}"
 | 
				
			||||||
  else
 | 
					  else
 | 
				
			||||||
    _run_in_new_container setup "${@}"
 | 
					    _run_in_new_container setup "${@}"
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user