fix(makefile): improve generate-env command and script
Some checks failed
continuous-integration/drone/push Build is failing

- Fix bash error in generate_env.sh with proper environment variable handling
- Add docker-compose command detection for better compatibility
- Add generate-env-prod command with production warnings
- Make generate-env non-interactive by default for easier automation
- Add generate-env-interactive for when user input is needed
- Expand .env.example with more configuration options
- Add helpful production deployment warnings

Resolves: 'make generate-env generates nonsense' issue
This commit is contained in:
2025-11-02 08:41:11 +09:00
parent e6776015fc
commit 368ee30396
3 changed files with 45 additions and 7 deletions

View File

@@ -17,4 +17,18 @@ POSTGRES_USER=links_user
POSTGRES_PASSWORD=links_password POSTGRES_PASSWORD=links_password
# Frontend настройки # Frontend настройки
NEXT_PUBLIC_API_URL=http://localhost:8000 NEXT_PUBLIC_API_URL=http://localhost:8000
# Опциональные настройки
# DJANGO_EMAIL_BACKEND=django.core.mail.backends.console.EmailBackend
# DJANGO_EMAIL_HOST=
# DJANGO_EMAIL_PORT=587
# DJANGO_EMAIL_HOST_USER=
# DJANGO_EMAIL_HOST_PASSWORD=
# DJANGO_EMAIL_USE_TLS=True
# Для продакшена
# DJANGO_SECURE_SSL_REDIRECT=True
# DJANGO_SECURE_HSTS_SECONDS=31536000
# DJANGO_SECURE_HSTS_INCLUDE_SUBDOMAINS=True
# DJANGO_SECURE_HSTS_PRELOAD=True

View File

@@ -248,10 +248,23 @@ drone-sign: ## Подпись .drone.yml (требует настройки)
@echo "✅ Конфигурация подписана" @echo "✅ Конфигурация подписана"
# === Helper scripts and automation === # === Helper scripts and automation ===
generate-env: ## Сгенерировать .env (интерактивно) generate-env: ## Сгенерировать .env (автоматически из .env.example)
@echo "🧭 Генерация .env файла (использует scripts/generate_env.sh)" @echo "🧭 Генерация .env файла из .env.example"
@bash ./scripts/generate_env.sh --yes
generate-env-interactive: ## Сгенерировать .env (интерактивно)
@echo "🧭 Генерация .env файла (интерактивно)"
@bash ./scripts/generate_env.sh @bash ./scripts/generate_env.sh
generate-env-prod: ## Сгенерировать .env для продакшена
@echo "🚀 Генерация .env для продакшена"
@bash ./scripts/generate_env.sh --yes
@echo "⚠️ ВНИМАНИЕ: Измените значения в .env для продакшена!"
@echo " - DJANGO_SECRET_KEY (сгенерируйте новый)"
@echo " - DJANGO_DEBUG=False"
@echo " - DATABASE_PASSWORD (установите надежный пароль)"
@echo " - DJANGO_ALLOWED_HOSTS (добавьте ваш домен)"
create-superuser-noninteractive: ## Создать/обновить суперпользователя из .env (неинтерактивно) create-superuser-noninteractive: ## Создать/обновить суперпользователя из .env (неинтерактивно)
@echo "👤 Создание/обновление суперпользователя из .env" @echo "👤 Создание/обновление суперпользователя из .env"
@bash ./scripts/create_superuser.sh @bash ./scripts/create_superuser.sh

View File

@@ -51,14 +51,25 @@ while IFS= read -r line; do
if [[ "$confirm" = true ]]; then if [[ "$confirm" = true ]]; then
# non-interactive: keep example defaults or environment overrides # non-interactive: keep example defaults or environment overrides
if [[ -n "${!key-}" ]]; then env_val=""
new_val="${!key}" if [[ -n "${!key:-}" ]]; then
sed -i "s|^$key=.*|$key=$new_val|" "$TARGET" env_val="${!key}"
fi
if [[ -n "$env_val" ]]; then
sed -i "s|^$key=.*|$key=$env_val|" "$TARGET"
fi fi
continue continue
fi fi
read -p "$key [$current_val]: " new_val # Interactive mode: prompt user for each variable
if read -t 1 -n 0 2>/dev/null; then
# stdin is available for reading
read -p "$key [$current_val]: " new_val || true
else
# no stdin available, skip prompting
new_val=""
fi
if [[ -n "$new_val" ]]; then if [[ -n "$new_val" ]]; then
sed -i "s|^$key=.*|$key=$new_val|" "$TARGET" sed -i "s|^$key=.*|$key=$new_val|" "$TARGET"
fi fi