1
0
Fork 0
medicine-config/dashboard/config/medicine-install.sh

136 lines
4.0 KiB
Bash
Executable File
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
set -e
set -o pipefail
SECRET_KEY=$(head -c 32 /dev/urandom | base64)
NETWORK_NAME=medicine-network
GLOBAL_ENV_FILE="/medicine-config/.env"
ENV_FILE="/medicine-config/medicine/.env"
POSTGRES_CONTAINER=service-postgres
POSTGRES_USER=postgres
DB_NAME=medicine
ORGANIZATION_NAME="$1"
ORGANIZATION_ID="$2"
HTTP_PORT="$3"
HTTPS_PORT="$4"
set_global_env_var () {
local key="$1"
local value="$2"
if grep -qE "^${key}=" "$GLOBAL_ENV_FILE"; then
sed -i "s|^${key}=.*|${key}=${value}|" "$GLOBAL_ENV_FILE"
else
echo "${key}=${value}" >> "$GLOBAL_ENV_FILE"
fi
}
set_env_var () {
local key="$1"
local value="$2"
if grep -qE "^${key}=" "$ENV_FILE"; then
sed -i "s|^${key}=.*|${key}=${value}|" "$ENV_FILE"
else
echo "${key}=${value}" >> "$ENV_FILE"
fi
}
unset_env_var () {
local key="$1"
if grep -qE "^${key}=" "$ENV_FILE"; then
sed -i "/^${key}=/d" "$ENV_FILE"
fi
}
if [[ -z "$ORGANIZATION_NAME" || -z "$ORGANIZATION_ID" ]]; then
echo "❌ Ошибка: оба параметра обязательны"
exit 1
fi
echo "Название организации: $ORGANIZATION_NAME"
echo "Идентификатор организации: $ORGANIZATION_ID"
echo "HTTP порт: $HTTP_PORT"
echo "HTTPS порт: $HTTPS_PORT"
echo ""
if [ -z $(docker network ls --filter name=^${NETWORK_NAME}$ --format="{{ .Name }}") ] ; then
docker network create ${NETWORK_NAME} ;
echo "🌐 Сеть $NETWORK_NAME создана"
else
echo "🌐 Сеть $NETWORK_NAME уже существует"
fi
echo ""
echo "📁 Создаем файлы окружения"
touch "$ENV_FILE"
touch "$GLOBAL_ENV_FILE"
set_global_env_var "ORGANIZATION_ID" "$ORGANIZATION_ID"
set_global_env_var "ORGANIZATION_NAME" "$ORGANIZATION_NAME"
set_global_env_var "POSTGRES_USER" "$POSTGRES_USER"
set_global_env_var "POSTGRES_HOST" "$POSTGRES_CONTAINER"
set_global_env_var "REDIS_HOST" "service-redis"
set_env_var "SECRET_KEY" "$SECRET_KEY"
if [ -n "$HTTP_PORT" ] && [ "$HTTP_PORT" != "80" ]; then
set_env_var "NGINX_HTTP_PORT" "$HTTP_PORT"
else
unset_env_var "NGINX_HTTP_PORT"
fi
if [ -n "$HTTPS_PORT" ] && [ "$HTTPS_PORT" != "443" ]; then
set_env_var "NGINX_HTTPS_PORT" "$HTTPS_PORT"
else
unset_env_var "NGINX_HTTPS_PORT"
fi
echo ""
echo "📦 Запускаем контейнер postgres"
(cd /medicine-config/service-postgres && docker compose pull -q && docker compose up -d)
echo ""
echo "📦 Запускаем контейнер redis"
(cd /medicine-config/service-redis && docker compose pull -q && docker compose up -d)
echo ""
if docker exec "$POSTGRES_CONTAINER" psql -U "$POSTGRES_USER" -tAc \
"SELECT 1 FROM pg_database WHERE datname='$DB_NAME'" | grep -q 1; then
echo "✅ База данных уже существует: $DB_NAME"
else
echo " База данных не найдена, создаём: $DB_NAME"
docker exec "$POSTGRES_CONTAINER" createdb -U "$POSTGRES_USER" "$DB_NAME"
echo "✅ База данных создана: $DB_NAME"
fi
TABLES_COUNT=$(docker exec "$POSTGRES_CONTAINER" psql -U "$POSTGRES_USER" -d "$DB_NAME" -tAc \
"SELECT COUNT(*) FROM information_schema.tables WHERE table_schema = 'public';")
echo ""
if [ "$TABLES_COUNT" -gt 0 ]; then
echo "⚠️ Восстановление БД пропущено - в базе уже есть таблицы ($TABLES_COUNT)"
else
echo "📥 Восстанавливаем БД из бэкапа"
unzip -o /medicine-config/backups/medicine.sql.zip -d /tmp
docker cp /tmp/medicine.sql "$POSTGRES_CONTAINER:/tmp/medicine.sql"
docker exec -i "$POSTGRES_CONTAINER" psql -U "$POSTGRES_USER" -d "$DB_NAME" -q --set ON_ERROR_STOP=on -f /tmp/medicine.sql
echo "✅ Восстановление завершено"
fi
echo ""
echo "Скачиваем образ"
docker pull docker.med-logic.ru/medicine:latest -q
docker tag docker.med-logic.ru/medicine:latest medicine:latest
echo ""
echo "Запускаем систему"
(cd /medicine-config/medicine && docker compose up -d)
echo ""
echo "🎉 МИС \"Медицина\" успешно установлена"