#!/usr/bin/env bash source /usr/local/bin/docker-entrypoint.sh server_start() { NOTIFY_SOCKET= \ PGUSER="${PGUSER:-$POSTGRES_USER}" \ pg_ctl -D "$PGDATA" \ -o "-c listen_addresses='*' -p ${PGPORT:-5432}" \ -w start } create_repmgr() { psql -c "CREATE USER repmgr WITH SUPERUSER ENCRYPTED PASSWORD '${REPMGR_PASSWORD}';" psql -c "CREATE DATABASE repmgr WITH OWNER repmgr;" psql -c 'ALTER USER repmgr SET search_path TO repmgr, "$user", public;' } create_hba() { echo "local all all trust" > /var/lib/postgresql/data/pg_hba.conf echo "local replication repmgr trust" >> /var/lib/postgresql/data/pg_hba.conf echo "host replication repmgr 127.0.0.1/32 trust" >> /var/lib/postgresql/data/pg_hba.conf echo "host replication repmgr ${POSTGRES_NETWORK-100.64.0.0/10} trust" >> /var/lib/postgresql/data/pg_hba.conf echo "local repmgr repmgr trust" >> /var/lib/postgresql/data/pg_hba.conf echo "host repmgr repmgr 127.0.0.1/32 trust" >> /var/lib/postgresql/data/pg_hba.conf echo "host repmgr repmgr ${POSTGRES_NETWORK-100.64.0.0/10} trust" >> /var/lib/postgresql/data/pg_hba.conf echo "host all all all scram-sha-256" >> /var/lib/postgresql/data/pg_hba.conf } echo "node_id = ${REPMGR_NODE_ID}" >> /etc/repmgr.conf echo "node_name = ${REPMGR_NODE_NAME}" >> /etc/repmgr.conf echo "conninfo = 'host=${REPMGR_NODE_NAME} dbname=repmgr user=repmgr connect_timeout=2'" >> /etc/repmgr.conf echo "location = '${REPMGR_NODE_LOCATION}'" >> /etc/repmgr.conf if [[ -n $REPMGR_UPSTREAM ]] && [[ -z $REPMGR_NODE_ROLE ]]; then REPMGR_NODE_ROLE="standby" fi case "$REPMGR_NODE_ROLE" in standby ) docker_temp_server_stop rm -rf /var/lib/postgresql/data/* until /usr/lib/postgresql/15/bin/repmgr -h $REPMGR_UPSTREAM -U repmgr -f /etc/repmgr.conf standby clone --dry-run &> /dev/null do echo "Upstream host not ready. Waiting for 5 minutes..." sleep 300 done echo "Upstream host found..." /usr/lib/postgresql/15/bin/repmgr -h $REPMGR_UPSTREAM -U repmgr -f /etc/repmgr.conf standby clone server_start /usr/lib/postgresql/15/bin/repmgr -f /etc/repmgr.conf standby register ;; witness ) create_repmgr docker_temp_server_stop create_hba server_start until /usr/lib/postgresql/15/bin/repmgr -h $REPMGR_UPSTREAM -f /etc/repmgr.conf witness register &> /dev/null do echo "Primary host not ready. Waiting for 5 minutes..." sleep 300 done ;; * ) create_repmgr docker_temp_server_stop echo "archive_command = '/bin/true'" >> /var/lib/postgresql/data/postgresql.conf echo "archive_mode = on" >> /var/lib/postgresql/data/postgresql.conf echo "hot_standby = on" >> /var/lib/postgresql/data/postgresql.conf echo "max_wal_senders = 10" >> /var/lib/postgresql/data/postgresql.conf echo "max_replication_slots = 10" >> /var/lib/postgresql/data/postgresql.conf if [[ -n $POSTGRES_MAX_CONNECTIONS ]]; then echo "max_connections = ${POSTGRES_MAX_CONNECTIONS}" >> /var/lib/postgresql/data/postgresql.conf fi create_hba server_start /usr/lib/postgresql/15/bin/repmgr -f /etc/repmgr.conf primary register ;; esac