|
|
@@ -109,7 +109,7 @@ setup_env() {
|
|
|
generate_secret "JWT_REFRESH_SECRET"
|
|
|
generate_secret "S3_SECRET_KEY"
|
|
|
|
|
|
- # Проверка обязательных переменных
|
|
|
+ # Проверка обязательных переменных с интерактивным вводом
|
|
|
local required=("DB_PASSWORD" "REDIS_PASSWORD" "JWT_SECRET" "JWT_REFRESH_SECRET" "S3_SECRET_KEY" "YANDEX_MAPS_API_KEY")
|
|
|
local missing=()
|
|
|
for var in "${required[@]}"; do
|
|
|
@@ -119,17 +119,83 @@ setup_env() {
|
|
|
done
|
|
|
|
|
|
if [ ${#missing[@]} -gt 0 ]; then
|
|
|
- log_warn "Требуют ручного заполнения в $ENV_FILE:"
|
|
|
+ log_warn "Необходимо заполнить обязательные переменные:"
|
|
|
for var in "${missing[@]}"; do
|
|
|
- echo " - $var"
|
|
|
+ prompt_for_var "$var"
|
|
|
done
|
|
|
- log_info "Откройте $ENV_FILE и заполните недостающие значения, затем запустите скрипт снова"
|
|
|
- exit 1
|
|
|
+ # Перезагружаем env после ввода
|
|
|
+ set -a
|
|
|
+ source "$ENV_FILE"
|
|
|
+ set +a
|
|
|
fi
|
|
|
|
|
|
+ # Опциональные переменные (интерактивно, можно пропустить Enter)
|
|
|
+ prompt_optional "CLOUDPAYMENTS_PUBLIC_ID" "CloudPayments Public ID (для платежей, Enter для пропуска)"
|
|
|
+ prompt_optional "CLOUDPAYMENTS_API_SECRET" "CloudPayments API Secret (для платежей, Enter для пропуска)"
|
|
|
+
|
|
|
log_ok "Все секреты настроены"
|
|
|
}
|
|
|
|
|
|
+# Интерактивный запрос обязательной переменной
|
|
|
+prompt_for_var() {
|
|
|
+ local var="$1"
|
|
|
+ local current="${!var:-}"
|
|
|
+ while [ -z "${!var:-}" ]; do
|
|
|
+ if [ -n "$current" ]; then
|
|
|
+ echo -ne "${YELLOW}$var${NC} (текущее: $current): "
|
|
|
+ else
|
|
|
+ echo -ne "${YELLOW}$var${NC}: "
|
|
|
+ fi
|
|
|
+ read -r input
|
|
|
+ if [ -n "$input" ]; then
|
|
|
+ # Экранируем спецсимволы для sed
|
|
|
+ local escaped
|
|
|
+ escaped=$(printf '%s\n' "$input" | sed 's/[&/\]/\\&/g')
|
|
|
+ if [[ "$OSTYPE" == "darwin"* ]]; then
|
|
|
+ sed -i '' "s/^${var}=.*/${var}=${escaped}/" "$ENV_FILE"
|
|
|
+ else
|
|
|
+ sed -i "s/^${var}=.*/${var}=${escaped}/" "$ENV_FILE"
|
|
|
+ fi
|
|
|
+ export "$var=$input"
|
|
|
+ log_ok "$var сохранено"
|
|
|
+ elif [ -n "$current" ]; then
|
|
|
+ export "$var=$current"
|
|
|
+ log_ok "$var оставлено как есть"
|
|
|
+ else
|
|
|
+ log_err "Значение не может быть пустым!"
|
|
|
+ fi
|
|
|
+ done
|
|
|
+}
|
|
|
+
|
|
|
+# Интерактивный запрос опциональной переменной
|
|
|
+prompt_optional() {
|
|
|
+ local var="$1"
|
|
|
+ local prompt="$2"
|
|
|
+ local current="${!var:-}"
|
|
|
+ echo -ne "${BLUE}$prompt${NC} "
|
|
|
+ if [ -n "$current" ]; then
|
|
|
+ echo -ne "[$current]: "
|
|
|
+ else
|
|
|
+ echo -n ": "
|
|
|
+ fi
|
|
|
+ read -r input
|
|
|
+ if [ -n "$input" ]; then
|
|
|
+ local escaped
|
|
|
+ escaped=$(printf '%s\n' "$input" | sed 's/[&/\]/\\&/g')
|
|
|
+ if [[ "$OSTYPE" == "darwin"* ]]; then
|
|
|
+ sed -i '' "s/^${var}=.*/${var}=${escaped}/" "$ENV_FILE"
|
|
|
+ else
|
|
|
+ sed -i "s/^${var}=.*/${var}=${escaped}/" "$ENV_FILE"
|
|
|
+ fi
|
|
|
+ export "$var=$input"
|
|
|
+ log_ok "$var сохранено"
|
|
|
+ elif [ -n "$current" ]; then
|
|
|
+ log_ok "$var оставлено как есть"
|
|
|
+ else
|
|
|
+ log_info "$var пропущено"
|
|
|
+ fi
|
|
|
+}
|
|
|
+
|
|
|
# 4. Создание Docker secrets (если Swarm)
|
|
|
create_docker_secrets() {
|
|
|
if docker info --format '{{.Swarm.LocalNodeState}}' 2>/dev/null | grep -q "active"; then
|