#!/usr/bin/env sh set -eu # Listmonk production setup using `docker-compose`. # See https://listmonk.app/docs/installation/ for detailed installation steps. printf '\n' RED="$(tput setaf 1 2>/dev/null || printf '')" BLUE="$(tput setaf 4 2>/dev/null || printf '')" GREEN="$(tput setaf 2 2>/dev/null || printf '')" NO_COLOR="$(tput sgr0 2>/dev/null || printf '')" info() { printf '%s\n' "${BLUE}> ${NO_COLOR} $*" } error() { printf '%s\n' "${RED}x $*${NO_COLOR}" >&2 } completed() { printf '%s\n' "${GREEN}✓ ${NO_COLOR} $*" } exists() { command -v "$1" 1>/dev/null 2>&1 } check_dependencies() { if ! exists curl; then error "curl is not installed." exit 1 fi if ! exists docker; then error "docker is not installed." exit 1 fi if ! exists docker-compose; then error "docker-compose is not installed." exit 1 fi } check_existing_db_volume() { info "checking for an existing docker db volume" if docker volume inspect listmonk_listmonk-data >/dev/null 2>&1; then error "listmonk-data volume already exists. Please use docker-compose down -v to remove old volumes for a fresh setup of PostgreSQL." exit 1 fi } download() { curl --fail --silent --location --output "$2" "$1" } is_healthy() { info "waiting for db container to be up. retrying in 3s" health_status="$(docker inspect -f "{{.State.Health.Status}}" "$1")" if [ "$health_status" = "healthy" ]; then return 0 else return 1 fi } is_running() { info "checking if "$1" is running" status="$(docker inspect -f "{{.State.Status}}" "$1")" if [ "$status" = "running" ]; then return 0 else return 1 fi } generate_password(){ echo $(LC_ALL=C tr -dc A-Za-z0-9