From a92ec91cc53587d7ff475fc9a68a7525aae2b52c Mon Sep 17 00:00:00 2001 From: Davide Polonio Date: Sat, 27 May 2023 13:09:23 +0200 Subject: [PATCH] chore: upgrade docker-mailserver to latest version (#23) * Set proper log rotation * Set proper restart policy * Upgrade to latest mail server version Co-authored-by: Davide Polonio Reviewed-on: https://git.poldebra.me/polpetta/server-dotfiles/pulls/23 --- mail/docker-compose.yml | 27 ++++++++++++++++++----- mail/setup.sh | 47 ++++++++++++++--------------------------- 2 files changed, 38 insertions(+), 36 deletions(-) diff --git a/mail/docker-compose.yml b/mail/docker-compose.yml index 904825e..5e7577e 100644 --- a/mail/docker-compose.yml +++ b/mail/docker-compose.yml @@ -1,17 +1,19 @@ --- -version: '3.7' +version: '3.9' services: mail: - image: mailserver/docker-mailserver:11.3.1 + image: mailserver/docker-mailserver:12.1.0 hostname: ${HOSTNAME} domainname: ${DOMAINNAME} container_name: ${CONTAINER_NAME} - restart: always + restart: unless-stopped + stop_grace_period: 2m30s # Avoid data loss ports: - "25:25" - "143:143" - "587:587" - "993:993" + # - "127.0.0.1:1134:1134" # Only useful once we enable RSPAMD volumes: - maildata:/var/mail - mailstate:/var/mail-state @@ -26,10 +28,15 @@ services: - SYS_PTRACE networks: - internal + logging: + driver: "json-file" + options: + max-size: "10m" + max-file: "3" roundcubedb: image: postgres:9.6-alpine - restart: always + restart: unless-stopped env_file: - .env - env-roundcube @@ -37,10 +44,15 @@ services: - rb_db:/var/lib/postgresql/data/ networks: - internal + logging: + driver: "json-file" + options: + max-size: "5m" + max-file: "3" roundcube: image: roundcube/roundcubemail:1.6.x-apache - restart: always + restart: unless-stopped depends_on: - mail - roundcubedb @@ -52,6 +64,11 @@ services: networks: - proxy - internal + logging: + driver: "json-file" + options: + max-size: "10m" + max-file: "3" volumes: maildata: diff --git a/mail/setup.sh b/mail/setup.sh index 7c6fbfd..b517d8b 100755 --- a/mail/setup.sh +++ b/mail/setup.sh @@ -12,7 +12,7 @@ DESIRED_CONFIG_PATH= DIR=$(pwd) DMS_CONFIG='/tmp/docker-mailserver' IMAGE_NAME= -DEFAULT_IMAGE_NAME='docker.io/mailserver/docker-mailserver:latest' +DEFAULT_IMAGE_NAME='ghcr.io/docker-mailserver/docker-mailserver:latest' INFO= PODMAN_ROOTLESS=false USE_SELINUX= @@ -71,11 +71,9 @@ function _show_local_usage function _get_absolute_script_directory { - if dirname "$(readlink -f "${0}")" &>/dev/null - then + if dirname "$(readlink -f "${0}")" &>/dev/null; then DIR=$(dirname "$(readlink -f "${0}")") - elif realpath -e -L "${0}" &>/dev/null - then + elif realpath -e -L "${0}" &>/dev/null; then DIR=$(realpath -e -L "${0}") DIR="${DIR%/setup.sh}" fi @@ -83,8 +81,7 @@ function _get_absolute_script_directory function _set_default_config_path { - if [[ -d "${DIR}/config" ]] - then + if [[ -d "${DIR}/config" ]]; then # legacy path (pre v10.2.0) DEFAULT_CONFIG_PATH="${DIR}/config" else @@ -94,23 +91,19 @@ function _set_default_config_path function _handle_config_path { - if [[ -z ${DESIRED_CONFIG_PATH} ]] - then + if [[ -z ${DESIRED_CONFIG_PATH} ]]; then # no desired config path - if [[ -n ${CONTAINER_NAME} ]] - then + if [[ -n ${CONTAINER_NAME} ]]; then VOLUME=$(${CRI} inspect "${CONTAINER_NAME}" \ --format="{{range .Mounts}}{{ println .Source .Destination}}{{end}}" | \ grep "${DMS_CONFIG}$" 2>/dev/null || :) fi - if [[ -n ${VOLUME} ]] - then + if [[ -n ${VOLUME} ]]; then CONFIG_PATH=$(echo "${VOLUME}" | awk '{print $1}') fi - if [[ -z ${CONFIG_PATH} ]] - then + if [[ -z ${CONFIG_PATH} ]]; then CONFIG_PATH=${DEFAULT_CONFIG_PATH} fi else @@ -121,8 +114,7 @@ function _handle_config_path function _run_in_new_container { # start temporary container with specified image - if ! ${CRI} history -q "${IMAGE_NAME}" &>/dev/null - then + if ! ${CRI} history -q "${IMAGE_NAME}" &>/dev/null; then echo "Image '${IMAGE_NAME}' not found. Pulling ..." ${CRI} pull "${IMAGE_NAME}" fi @@ -151,8 +143,7 @@ function _main ( * ) DESIRED_CONFIG_PATH="${DIR}/${OPTARG}" ;; esac - if [[ ! -d ${DESIRED_CONFIG_PATH} ]] - then + if [[ ! -d ${DESIRED_CONFIG_PATH} ]]; then echo "Specified directory '${DESIRED_CONFIG_PATH}' doesn't exist" >&2 exit 1 fi @@ -169,14 +160,11 @@ function _main done shift $(( OPTIND - 1 )) - if command -v docker &>/dev/null - then + if command -v docker &>/dev/null; then CRI=docker - elif command -v podman &>/dev/null - then + elif command -v podman &>/dev/null; then CRI=podman - if ! ${PODMAN_ROOTLESS} && [[ ${EUID} -ne 0 ]] - then + if ! ${PODMAN_ROOTLESS} && [[ ${EUID} -ne 0 ]]; then read -r -p "You are running Podman in rootless mode. Continue? [Y/n] " [[ -n ${REPLY} ]] && [[ ${REPLY} =~ (n|N) ]] && exit 0 fi @@ -190,13 +178,11 @@ function _main [[ -z ${CONTAINER_NAME} ]] && CONTAINER_NAME=${INFO#*;} [[ -z ${IMAGE_NAME} ]] && IMAGE_NAME=${INFO%;*} - if [[ -z ${IMAGE_NAME} ]] - then + if [[ -z ${IMAGE_NAME} ]]; then IMAGE_NAME=${NAME:-${DEFAULT_IMAGE_NAME}} fi - if test -t 0 - then + if test -t 0; then USE_TTY="-it" else # GitHub Actions will fail (or really anything else @@ -207,8 +193,7 @@ function _main _handle_config_path - if [[ -n ${CONTAINER_NAME} ]] - then + if [[ -n ${CONTAINER_NAME} ]]; then ${CRI} exec "${USE_TTY}" "${CONTAINER_NAME}" setup "${@}" else _run_in_new_container setup "${@}"