#!/bin/bash # STUPA PDF API Environment Setup Script # This script helps create a .env file with all required configurations set -e # Colors for output RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' # No Color # Default values DEFAULT_MYSQL_DB="stupa" DEFAULT_MYSQL_USER="stupa" DEFAULT_MYSQL_PORT="3306" DEFAULT_RATE_IP_PER_MIN="60" DEFAULT_RATE_KEY_PER_MIN="30" echo -e "${GREEN}STUPA PDF API - Environment Configuration${NC}" echo "==========================================" echo "" # Check if .env already exists if [ -f .env ]; then echo -e "${YELLOW}Warning: .env file already exists!${NC}" read -p "Do you want to overwrite it? (y/N): " -n 1 -r echo if [[ ! $REPLY =~ ^[Yy]$ ]]; then echo "Aborted." exit 1 fi echo "" fi # Function to generate random password generate_password() { openssl rand -base64 32 | tr -d "=+/" | cut -c1-25 } # Database Configuration echo -e "${GREEN}Database Configuration${NC}" echo "----------------------" read -p "MySQL Database name [${DEFAULT_MYSQL_DB}]: " MYSQL_DB MYSQL_DB=${MYSQL_DB:-$DEFAULT_MYSQL_DB} read -p "MySQL Username [${DEFAULT_MYSQL_USER}]: " MYSQL_USER MYSQL_USER=${MYSQL_USER:-$DEFAULT_MYSQL_USER} read -p "MySQL Port [${DEFAULT_MYSQL_PORT}]: " MYSQL_PORT MYSQL_PORT=${MYSQL_PORT:-$DEFAULT_MYSQL_PORT} # Generate secure passwords echo "" echo -e "${YELLOW}Generating secure passwords...${NC}" MYSQL_PASSWORD=$(generate_password) MYSQL_ROOT_PASSWORD=$(generate_password) MASTER_KEY=$(generate_password) echo "MySQL Password: ${MYSQL_PASSWORD}" echo "MySQL Root Password: ${MYSQL_ROOT_PASSWORD}" echo "Master Key: ${MASTER_KEY}" echo "" # Rate Limiting Configuration echo -e "${GREEN}Rate Limiting Configuration${NC}" echo "---------------------------" read -p "Rate limit per IP per minute [${DEFAULT_RATE_IP_PER_MIN}]: " RATE_IP_PER_MIN RATE_IP_PER_MIN=${RATE_IP_PER_MIN:-$DEFAULT_RATE_IP_PER_MIN} read -p "Rate limit per key per minute [${DEFAULT_RATE_KEY_PER_MIN}]: " RATE_KEY_PER_MIN RATE_KEY_PER_MIN=${RATE_KEY_PER_MIN:-$DEFAULT_RATE_KEY_PER_MIN} # Application Configuration echo "" echo -e "${GREEN}Application Configuration${NC}" echo "------------------------" read -p "Timezone [Europe/Berlin]: " TZ TZ=${TZ:-"Europe/Berlin"} # Create .env file echo "" echo -e "${GREEN}Creating .env file...${NC}" cat > .env << EOF # STUPA PDF API Configuration # Generated on $(date) # Database Configuration MYSQL_HOST=db MYSQL_PORT=${MYSQL_PORT} MYSQL_DB=${MYSQL_DB} MYSQL_USER=${MYSQL_USER} MYSQL_PASSWORD=${MYSQL_PASSWORD} MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD} # Authentication MASTER_KEY=${MASTER_KEY} # Rate Limiting RATE_IP_PER_MIN=${RATE_IP_PER_MIN} RATE_KEY_PER_MIN=${RATE_KEY_PER_MIN} # Application Settings TZ=${TZ} # PDF Templates (paths inside container) QSM_TEMPLATE=/app/assets/qsm.pdf VSM_TEMPLATE=/app/assets/vsm.pdf # Frontend Configuration NODE_ENV=production EOF echo -e "${GREEN}✓ .env file created successfully!${NC}" echo "" echo -e "${YELLOW}Important Security Notes:${NC}" echo "1. Keep the .env file secure and never commit it to version control" echo "2. Save the passwords in a secure password manager" echo "3. The Master Key is used for admin access - keep it safe!" echo "" echo -e "${GREEN}Next Steps:${NC}" echo "1. Review the .env file and adjust values if needed" echo "2. Run 'docker compose up -d' to start the application" echo "3. Access the application at http://localhost:3000" echo "4. Access the API directly at http://localhost:8000" echo "5. Access Adminer (database UI) at http://localhost:8080"