37 lines
2.2 KiB
Bash
37 lines
2.2 KiB
Bash
#!/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"
|