schon/scripts/Unix/generate-environment-file.sh
Egor fureunoir Gorbunov 7d1bcaa8d4 Features: 1) Added validation to ensure scripts execute from project root with 'evibes' directory check; 2) Introduced color formatting and ASCII art for enhanced script output; 3) Added RAM, CPU, and disk space verification to installation scripts; 4) Ensured Docker images existence before service startup; 5) Unified spinner-based progress display in Windows and Unix scripts.
Fixes: 1) Replaced hardcoded paths with script-relative paths for better portability; 2) Corrected CPU and memory calculation logic for system checks; 3) Replaced inconsistent script formatting and error handling; 4) Resolved redundant cleanup steps post service startup.

Extra: Refactored and cleaned up script logic for maintainability; added WISELESS branding across scripts for consistency; enhanced terminal output and user messaging.
2025-06-16 15:40:44 +03:00

145 lines
5.6 KiB
Bash
Executable file

#!/usr/bin/env bash
set -euo pipefail
if [ ! -d "./evibes" ]; then
printf "\e[31m❌ Please run this script from the project's root (where the 'evibes' directory lives).\e[0m\n"
exit 1
fi
PURPLE="\e[38;2;121;101;209m"
RESET="\e[0m"
GRAY="\e[90m"
SOURCE="${BASH_SOURCE[0]:-$0}"
SCRIPT_DIR="$(cd "$(dirname "$SOURCE")" && pwd)"
ART_PATH="$SCRIPT_DIR/../ASCII_ART_EVIBES"
if [ ! -f "$ART_PATH" ]; then
printf "\e[31m❌ Could not find ASCII art at %s\e[0m\n" "$ART_PATH"
exit 1
fi
while IFS= read -r line; do
printf "%b%s%b\n" "$PURPLE" "$line" "$RESET"
done < "$ART_PATH"
printf "\n%bby WISELESS TEAM%b\n\n" "$GRAY" "$RESET"
# prompt for a value with default
prompt_default() {
local name="$1" default="$2" result
read -rp "Enter $name [$default]: " result
printf '%s\n' "${result:-$default}"
}
# prompt for a value, auto-generate hex if blank
prompt_autogen() {
local name="$1" bytes="$2" result
read -rp "Enter $name (leave blank to auto-generate): " result
if [ -z "$result" ]; then
# generate $bytes random bytes as hex
result="$(head -c "$bytes" /dev/urandom | od -An -tx1 | tr -d ' \n')"
fi
printf '%s\n' "$result"
}
if [ -f .env ]; then
printf "\e[33m.env already exists and will be overwritten.\e[0m\n"
read -rp "Press Enter to continue or Ctrl+C to abort"
fi
PROJECT_NAME=$(prompt_default 'EVIBES_PROJECT_NAME' 'eVibes')
FRONTEND_DOMAIN=$(prompt_default 'EVIBES_FRONTEND_DOMAIN' 'evibes.com')
BASE_DOMAIN=$(prompt_default 'EVIBES_BASE_DOMAIN' 'evibes.com')
SENTRY_DSN=$(prompt_default 'SENTRY_DSN' '')
DEBUG=$(prompt_default 'DEBUG' '1')
SECRET_KEY=$(prompt_autogen 'SECRET_KEY' 32)
JWT_SIGNING_KEY=$(prompt_autogen 'JWT_SIGNING_KEY' 64)
ALLOWED_HOSTS=$(prompt_default 'ALLOWED_HOSTS' 'evibes.com api.evibes.com b2b.evibes.com')
CSRF_TRUSTED_ORIGINS=$(prompt_default 'CSRF_TRUSTED_ORIGINS' 'https://evibes.com https://api.evibes.com https://www.evibes.com https://b2b.evibes.com')
CORS_ALLOWED_ORIGINS="$CSRF_TRUSTED_ORIGINS"
POSTGRES_DB=$(prompt_default 'POSTGRES_DB' 'evibes')
POSTGRES_USER=$(prompt_default 'POSTGRES_USER' 'evibes_user')
POSTGRES_PASSWORD=$(prompt_autogen 'POSTGRES_PASSWORD' 16)
DBBACKUP_SFTP_HOST=$(prompt_default 'DBBACKUP_SFTP_HOST' 'Your SFTP backup host')
DBBACKUP_SFTP_USER=$(prompt_default 'DBBACKUP_SFTP_USER' 'The username to use to log in to that host')
DBBACKUP_SFTP_PASS=$(prompt_default 'DBBACKUP_SFTP_PASS' 'The password to use to log in to that host')
ELASTIC_PASSWORD=$(prompt_autogen 'ELASTIC_PASSWORD' 16)
REDIS_PASSWORD=$(prompt_autogen 'REDIS_PASSWORD' 16)
PROMETHEUS_USER=$(prompt_default 'PROMETHEUS_USER' 'evibes')
PROMETHEUS_PASSWORD=$(prompt_autogen 'PROMETHEUS_PASSWORD' 16)
EMAIL_BACKEND=$(prompt_default 'EMAIL_BACKEND' 'django.core.mail.backends.smtp.EmailBackend')
EMAIL_HOST=$(prompt_default 'EMAIL_HOST' 'smtp.whatever.evibes.com')
EMAIL_PORT=$(prompt_default 'EMAIL_PORT' '465')
EMAIL_USE_TLS=$(prompt_default 'EMAIL_USE_TLS' '0')
EMAIL_USE_SSL=$(prompt_default 'EMAIL_USE_SSL' '1')
EMAIL_HOST_USER=$(prompt_default 'EMAIL_HOST_USER' 'your-email-user@whatever.evibes.com')
EMAIL_FROM="$EMAIL_HOST_USER"
EMAIL_HOST_PASSWORD=$(prompt_default 'EMAIL_HOST_PASSWORD' 'SUPERSECRETEMAILHOSTPASSWORD')
COMPANY_NAME=$(prompt_default 'COMPANY_NAME' 'eVibes, Inc.')
COMPANY_PHONE_NUMBER=$(prompt_default 'COMPANY_PHONE_NUMBER' '+888888888888')
COMPANY_ADDRESS=$(prompt_default 'COMPANY_ADDRESS' 'The place that does not exist')
OPENAI_API_KEY=$(prompt_default 'OPENAI_API_KEY' 'Haha, really?')
ABSTRACT_API_KEY=$(prompt_default 'ABSTRACT_API_KEY' 'Haha, really? x2')
DEEPL_AUTH_KEY=$(prompt_default 'DEEPL_AUTH_KEY' 'Haha, really? x3')
# Write to .env
{
printf 'EVIBES_PROJECT_NAME="%s"\n' "$PROJECT_NAME"
printf 'EVIBES_FRONTEND_DOMAIN="%s"\n' "$FRONTEND_DOMAIN"
printf 'EVIBES_BASE_DOMAIN="%s"\n' "$BASE_DOMAIN"
printf 'SENTRY_DSN="%s"\n' "$SENTRY_DSN"
printf 'DEBUG=%s\n\n' "$DEBUG"
printf 'SECRET_KEY="%s"\n' "$SECRET_KEY"
printf 'JWT_SIGNING_KEY="%s"\n\n' "$JWT_SIGNING_KEY"
printf 'ALLOWED_HOSTS="%s"\n' "$ALLOWED_HOSTS"
printf 'CSRF_TRUSTED_ORIGINS="%s"\n' "$CSRF_TRUSTED_ORIGINS"
printf 'CORS_ALLOWED_ORIGINS="%s"\n\n' "$CORS_ALLOWED_ORIGINS"
printf 'POSTGRES_DB="%s"\n' "$POSTGRES_DB"
printf 'POSTGRES_USER="%s"\n' "$POSTGRES_USER"
printf 'POSTGRES_PASSWORD="%s"\n\n' "$POSTGRES_PASSWORD"
printf 'DBBACKUP_SFTP_HOST="%s"\n' "$DBBACKUP_SFTP_HOST"
printf 'DBBACKUP_SFTP_USER="%s"\n' "$DBBACKUP_SFTP_USER"
printf 'DBBACKUP_SFTP_PASS="%s"\n\n' "$DBBACKUP_SFTP_PASS"
printf 'ELASTIC_PASSWORD="%s"\n\n' "$ELASTIC_PASSWORD"
printf 'REDIS_PASSWORD="%s"\n' "$REDIS_PASSWORD"
printf 'CELERY_BROKER_URL="redis://:%s@redis:6379/0"\n' "$REDIS_PASSWORD"
printf 'CELERY_RESULT_BACKEND="redis://:%s@redis:6379/0"\n\n' "$REDIS_PASSWORD"
printf 'PROMETHEUS_USER="%s"\n' "$PROMETHEUS_USER"
printf 'PROMETHEUS_PASSWORD="%s"\n\n' "$PROMETHEUS_PASSWORD"
printf 'EMAIL_BACKEND="%s"\n' "$EMAIL_BACKEND"
printf 'EMAIL_HOST="%s"\n' "$EMAIL_HOST"
printf 'EMAIL_PORT="%s"\n' "$EMAIL_PORT"
printf 'EMAIL_USE_TLS=%s\n' "$EMAIL_USE_TLS"
printf 'EMAIL_USE_SSL=%s\n' "$EMAIL_USE_SSL"
printf 'EMAIL_HOST_USER="%s"\n' "$EMAIL_HOST_USER"
printf 'EMAIL_HOST_PASSWORD="%s"\n' "$EMAIL_HOST_PASSWORD"
printf 'EMAIL_FROM="%s"\n\n' "$EMAIL_FROM"
printf 'COMPANY_NAME="%s"\n' "$COMPANY_NAME"
printf 'COMPANY_PHONE_NUMBER="%s"\n' "$COMPANY_PHONE_NUMBER"
printf 'COMPANY_ADDRESS="%s"\n\n' "$COMPANY_ADDRESS"
printf 'OPENAI_API_KEY="%s"\n\n' "$OPENAI_API_KEY"
printf 'ABSTRACT_API_KEY="%s"\n\n' "$ABSTRACT_API_KEY"
printf 'DEEPL_AUTH_KEY="%s"\n' "$DEEPL_AUTH_KEY"
} > .env
printf "\e[32m.env file generated with fresh values.\e[0m\n"