#!/bin/bash # Ver: 1.3 by Endial Fang (endial@126.com) # # 应用环境变量定义及初始化 export ENV_DEBUG=${ENV_DEBUG:-false} export ALLOW_ANONYMOUS="${ALLOW_ANONYMOUS:-no}" # 通过读取变量名对应的`*_FILE`文件,获取变量值 # 变量优先级: *_FILE > 传入变量 > 默认值 app_env_file_lists=( PG_POSTGRES_PASSWORD PG_PASSWORD PG_REPLICATION_PASSWORD ) for env_var in "${app_env_file_lists[@]}"; do file_env_var="${env_var}_FILE" if [[ -n "${!file_env_var:-}" ]]; then export "${env_var}=$(< "${!file_env_var}")" unset "${file_env_var}" fi done unset app_env_file_lists # 应用路径参数(Dockerfile 已定义:APP_NAME、APP_VER,可能定义 APP_USER、APP_EXEC) export APP_EXEC="${APP_EXEC:-${APP_NAME}}" export APP_USER="${APP_USER:-${APP_NAME}}" export APP_GROUP="${APP_GROUP:-${APP_USER}}" export APP_HOME="${APP_HOME:-/srv/${APP_NAME}}" export APP_BASE="${APP_BASE:-/usr/local/${APP_NAME}}" export APP_DEF_DIR="${APP_BASE}/etc/${APP_NAME}" export APP_CONF_DIR="/srv/${APP_NAME}/conf" export APP_DATA_DIR="/srv/${APP_NAME}/data" export APP_CERT_DIR="/srv/${APP_NAME}/cert" export APP_LOG_DIR="/srv/${APP_NAME}/log" export APP_CACHE_DIR="/var/cache/${APP_NAME}" export APP_RUN_DIR="/var/run/${APP_NAME}" export PGDATA="${PGDATA:-${APP_DATA_DIR}}" export TZ=${TZ:-"Asia/Shanghai"} export PG_CONF_FILE="${PG_CONF_FILE:-${PGDATA}/postgresql.conf}" export PG_PID_FILE="${PG_PID_FILE:-${PGDATA}/postmaster.pid}" export PG_INIT_MAX_TIMEOUT=${PG_INIT_MAX_TIMEOUT:-60} export PG_REPLICATION_MODE="${PG_REPLICATION_MODE:-primary}" if [[ "${PG_REPLICATION_MODE}" == "primary" ]]; then export PG_SYNCHRONOUS_REPLICAS_NUM="${PG_SYNCHRONOUS_REPLICAS_NUM:-0}" export PG_SYNCHRONOUS_REPLICAS_METHOD="${PG_SYNCHRONOUS_REPLICAS_METHOD:-}" export PG_SYNCHRONOUS_REPLICAS_NAMES="${PG_SYNCHRONOUS_REPLICAS_NAMES:-\*}" export PG_CFG_MAX_WAL_SENDERS="${PG_CFG_MAX_WAL_SENDERS:-10}" export PG_CFG_WAL_LEVEL="${PG_CFG_WAL_LEVEL:-logical}" export PG_CFG_WAL_LOG_HINTS="${PG_CFG_WAL_LOG_HINTS:-on}" elif [[ "${PG_REPLICATION_MODE}" == "standby" ]]; then export PG_REPLICATION_APP_NAME=${PG_REPLICATION_APP_NAME:-cvcluster} export PG_REPLICATION_HOST="${PG_REPLICATION_HOST:-}" export PG_REPLICATION_PORT="${PG_REPLICATION_PORT:-5432}" export PG_REPLICATION_USER="${PG_REPLICATION_USER:-}" export PG_REPLICATION_PASSWORD="${PG_REPLICATION_PASSWORD:-}" export PG_REPLICATION_CONNECT_TIMEOUT="${PG_REPLICATION_CONNECT_TIMEOUT:-10}" # 配置允许从备机备份,参考:http://www.postgres.cn/docs/9.4/app-pgbasebackup.html export PG_CFG_FULL_PAGE_WRITES="${PG_CFG_FULL_PAGE_WRITES:-on}" export PG_CFG_HOT_STANDBY="${PG_CFG_HOT_STANDBY:-on}" export PG_CFG_MAX_WAL_SENDERS="${PG_CFG_MAX_WAL_SENDERS:-16}" fi # 应用配置参数 export PG_ENABLE_LDAP="${PG_ENABLE_LDAP:-no}" if [[ ${PG_ENABLE_LDAP} == yes ]]; then export PG_LDAP_URL="${PG_LDAP_URL:-}" export PG_LDAP_PREFIX="${PG_LDAP_PREFIX:-}" export PG_LDAP_SUFFIX="${PG_LDAP_SUFFIX:-}" export PG_LDAP_SERVER="${PG_LDAP_SERVER:-}" export PG_LDAP_PORT="${PG_LDAP_PORT:-}" export PG_LDAP_SCHEME="${PG_LDAP_SCHEME:-}" export PG_LDAP_TLS="${PG_LDAP_TLS:-}" export PG_LDAP_BASE_DN="${PG_LDAP_BASE_DN:-}" export PG_LDAP_BIND_DN="${PG_LDAP_BIND_DN:-}" export PG_LDAP_BIND_PASSWORD="${PG_LDAP_BIND_PASSWORD:-}" export PG_LDAP_SEARCH_ATTR="${PG_LDAP_SEARCH_ATTR:-}" export PG_LDAP_SEARCH_FILTER="${PG_LDAP_SEARCH_FILTER:-}" fi export PG_INITDB_ARGS="${PG_INITDB_ARGS:-}" export PG_INITDB_WAL_DIR="${PG_INITDB_WAL_DIR:-${PGDATA}/pg_wal}" export PG_USER_CONNECTION_LIMIT="${PG_USER_CONNECTION_LIMIT:-}" export PG_DB_CONNECTION_LIMIT="${PG_DB_CONNECTION_LIMIT:-}" export PG_USER_IP4_RANGE="${PG_IP4_RANGE:-0.0.0.0/0}" export PG_USER_IP6_RANGE="${PG_IP6_RANGE:-::0/0}" export PG_REPLICATION_IP4_RANGE="${PG_REPLICATION_IP4_RANGE:-${PG_USER_IP4_RANGE}}" export PG_REPLICATION_IP6_RANGE="${PG_REPLICATION_IP6_RANGE:-${PG_USER_IP6_RANGE}}" export PG_USERNAME="${PG_USERNAME:-postgres}" export PG_PASSWORD="${PG_PASSWORD:-}" export PG_DATABASE="${PG_DATABASE:-postgres}" export PG_POSTGRES_PASSWORD="${PG_POSTGRES_PASSWORD:-}" # 使用自定义用户名(非"postgres")时的管理员密码 [[ "${PG_USERNAME}" == "postgres" ]] && export PG_POSTGRES_PASSWORD="${PG_PASSWORD}" # 用来执行初始化数据库命令的用户名及密码 export PG_INITSCRIPTS_USERNAME="${PG_INITSCRIPTS_USERNAME:-${PG_USERNAME}}" export PG_INITSCRIPTS_PASSWORD="${PG_INITSCRIPTS_PASSWORD:-${PG_PASSWORD}}" # 内部变量 # 个性化变量 export PG_CFG_DATA_DIRECTORY="${PGDATA}" export PG_CFG_HBA_FILE="${PGDATA}/pg_hba.conf" export PG_CFG_IDENT_FILE="${PGDATA}/pg_ident.conf" export PG_CFG_EXTERNAL_PID_FILE="${APP_RUN_DIR}/postgresql.pid" export PG_CFG_LOG_DIRECTORY="${APP_LOG_DIR}"