129 lines
3.5 KiB
Bash
Executable File
129 lines
3.5 KiB
Bash
Executable File
#!/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"
|