iac/postgres/initdb/00-init.sh

37 lines
2.2 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
# Инициализация БД sarex-стека: базы + отдельные роли приложений с паролями.
# Запускается автоматически ТОЛЬКО при первой инициализации пустого тома postgres
# (каталог /docker-entrypoint-initdb.d). Значения берутся из окружения сервиса
# postgres (см. docker-compose.yaml). Для уже существующего тома примени вручную
# те же команды (см. README) — иначе приложения не залогинятся под новыми ролями.
#
# ВНИМАНИЕ: пароли подставляются в SQL как есть — не используй одинарные кавычки в них.
set -e
psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" <<EOSQL
-- ===== Роли приложений (LOGIN + пароль). Идемпотентно. =====
SELECT 'CREATE ROLE "${DJANGO_DB_USER}" LOGIN'
WHERE NOT EXISTS (SELECT FROM pg_roles WHERE rolname = '${DJANGO_DB_USER}')\gexec
ALTER ROLE "${DJANGO_DB_USER}" WITH LOGIN PASSWORD '${DJANGO_DB_PASSWORD}';
SELECT 'CREATE ROLE "${PROC_DB_USER}" LOGIN'
WHERE NOT EXISTS (SELECT FROM pg_roles WHERE rolname = '${PROC_DB_USER}')\gexec
ALTER ROLE "${PROC_DB_USER}" WITH LOGIN PASSWORD '${PROC_DB_PASSWORD}';
-- ===== Базы данных (идемпотентно). =====
-- sarex_db обычно уже создан через POSTGRES_DB; workflow_db создаём здесь.
SELECT 'CREATE DATABASE "${DJANGO_DB}"'
WHERE NOT EXISTS (SELECT FROM pg_database WHERE datname = '${DJANGO_DB}')\gexec
SELECT 'CREATE DATABASE "${PROC_DB}" OWNER "${PROC_DB_USER}"'
WHERE NOT EXISTS (SELECT FROM pg_database WHERE datname = '${PROC_DB}')\gexec
-- ===== Владельцы и права. =====
ALTER DATABASE "${DJANGO_DB}" OWNER TO "${DJANGO_DB_USER}";
ALTER DATABASE "${PROC_DB}" OWNER TO "${PROC_DB_USER}";
GRANT ALL PRIVILEGES ON DATABASE "${DJANGO_DB}" TO "${DJANGO_DB_USER}";
GRANT ALL PRIVILEGES ON DATABASE "${PROC_DB}" TO "${PROC_DB_USER}";
EOSQL
echo "init: roles ${DJANGO_DB_USER}/${PROC_DB_USER} + databases ${DJANGO_DB}/${PROC_DB} ready"