Скрипт для автоматизации создания базы данных в Docker контейнере с PostgreSQL

Этот Bash скрипт создает новую пустую базу данных в СУБД PostgreSQL, которая находится в Docker контейнере. В качестве параметров указываются имя базы данных и пароль. Данный скрипт является частью системы для автоматической конфигурации сервера.

Основные этапы:

  1. Проверяем права суперпользователя и наличие обязательных аргументов.
  2. Определяем переменные, а так же проверяем наличие необходимых переменных окружения.
  3. Проверяем готовность контейнера PostgreSQL.
  4. Когда контейнер готов, скрипт выполняет команду внутри контейнера PostgreSQL для создания пользователя и базы данных, используя переданные аргументы.

Полный код скрипта приведен ниже:

Bash
#!/bin/bash

if [ "$(id -u)" != "0" ]; then
    echo -e "\033[31mThis script requires superuser rights\033[0m"
    exit 0
fi

if [ -z "$1" ] || [ -z "$2" ]; then
  echo "Please provide all arguments: CREATE_DB_NAME, CREATE_DB_PASSWORD"
  exit 1
fi

trap 'echo -e "\033[31minit-db.sh: An error has occurred\033[0m"; exit 1' ERR
set -e

export DEBIAN_FRONTEND=noninteractive

PG_CONTAINER=postgres
CREATE_DB_NAME=$1
CREATE_DB_PASSWORD=$2

: "${POSTGRES_USER:?}"
: "${POSTGRES_DB:?}"

# Function to check container status:
check_container_state() {
  state=$(sudo docker inspect -f '{{.State.Health.Status}}' "$PG_CONTAINER" 2>/dev/null)
  
  if [ "$state" = "healthy" ]; then
    return 0
  fi
  
  state=$(sudo docker inspect -f '{{.State.Status}}' "$PG_CONTAINER" 2>/dev/null)
  
  if [ "$state" = "running" ]; then
    return 0
  fi
  
  return 1
}

echo "Waiting for PostgreSQL container to start..."
while ! check_container_state; do
  echo "Waiting for PostgreSQL container to be ready..."
  sleep 5
done

echo "PostgreSQL container is ready. Init DB..."

sudo docker exec -i $PG_CONTAINER psql -v ON_ERROR_STOP=1 -U "$POSTGRES_USER" -d "$POSTGRES_DB" <<-EOSQL
  CREATE USER "$CREATE_DB_NAME" WITH ENCRYPTED PASSWORD '$CREATE_DB_PASSWORD';
  CREATE DATABASE "$CREATE_DB_NAME";
  GRANT ALL PRIVILEGES ON DATABASE "$CREATE_DB_NAME" TO "$CREATE_DB_NAME";
  ALTER DATABASE "$CREATE_DB_NAME" OWNER TO "$CREATE_DB_NAME";
EOSQL


trap - ERR
echo -e "\033[32mDatabase $CREATE_DB_NAME created successfully\033[0m"


Данный скрипт является частью нашего репозитория utils.



Если вам интересен наш проект, есть вопросы, замечания, или предложения — оставляйте комментарии или пишите на почту: checkerwars@mail.ru

Кроме того, автор проекта ищет работу. Мое резюме.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *