Files
pulse/start.sh
T

324 lines
14 KiB
Bash
Executable File

#!/bin/bash
# Make script executable if it isn't already
chmod +x "$0"
# Define colors for better readability
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# Display header
echo -e "${BLUE}=======================================${NC}"
echo -e "${BLUE} Pulse Application Launcher ${NC}"
echo -e "${BLUE}=======================================${NC}"
# Function to display options with improved clarity for new users
show_options() {
echo -e "\n${GREEN}Welcome to Pulse!${NC} For beginners, try option ${YELLOW}2${NC} (Mock Data)."
echo -e "\n${GREEN}DEVELOPMENT:${NC}"
echo -e "${YELLOW}1)${NC} Dev - Real Proxmox ${BLUE}(Uses your Proxmox servers, port 3000)${NC}"
echo -e "${YELLOW}2)${NC} Dev - Mock Data ${GREEN}★ RECOMMENDED FOR BEGINNERS ★${NC} ${BLUE}(No real servers needed, port 3000)${NC}"
echo -e "\n${GREEN}PRODUCTION:${NC}"
echo -e "${YELLOW}3)${NC} Production ${BLUE}(Real Proxmox, optimized build, port 7654)${NC}"
echo -e "\n${GREEN}DOCKER:${NC}"
echo -e "${YELLOW}4)${NC} Docker Dev ${BLUE}(Mock data, hot-reloading, ports 7654/3000)${NC}"
echo -e "${YELLOW}5)${NC} Docker Prod ${BLUE}(Real Proxmox, optimized build, port 7654)${NC}"
echo -e "\n${YELLOW}q)${NC} Quit"
echo -e "\n${GREEN}Choice (1-5 or q):${NC} "
}
# Main menu loop
while true; do
show_options
read -r choice
case $choice in
1)
echo -e "\n${BLUE}Starting development environment with real Proxmox data...${NC}"
# Ensure .env file exists
[ -f .env ] || cp .env.example .env
# Configure environment for dev but explicitly set USE_MOCK_DATA=false
node scripts/configure-env.js dev
# Override the mock data settings to use real data
if [[ "$OSTYPE" == "darwin"* ]]; then
# macOS requires an empty string with sed
sed -i '' 's/USE_MOCK_DATA=true/USE_MOCK_DATA=false/' .env
sed -i '' 's/MOCK_DATA_ENABLED=true/MOCK_DATA_ENABLED=false/' .env
else
# Linux version
sed -i 's/USE_MOCK_DATA=true/USE_MOCK_DATA=false/' .env
sed -i 's/MOCK_DATA_ENABLED=true/MOCK_DATA_ENABLED=false/' .env
fi
echo -e "${GREEN}Configured environment to use real Proxmox data${NC}"
# Set environment variables directly in the current shell and for any child processes
export USE_MOCK_DATA=false
export MOCK_DATA_ENABLED=false
export NODE_ENV=development
# Now run with real data - run the start-dev.sh script directly instead of through start.js
# This ensures our environment variables are passed through properly
chmod +x ./scripts/start-dev.sh
./scripts/start-dev.sh
break
;;
2)
echo -e "\n${BLUE}Starting development environment with mock data...${NC}"
# Ensure .env file exists
[ -f .env ] || cp .env.example .env
# Configure environment for dev and explicitly set USE_MOCK_DATA=true
node scripts/configure-env.js dev
# Ensure mock data settings are set to true (should already be, but just to be safe)
if [[ "$OSTYPE" == "darwin"* ]]; then
# macOS requires an empty string with sed
sed -i '' 's/USE_MOCK_DATA=false/USE_MOCK_DATA=true/' .env
sed -i '' 's/MOCK_DATA_ENABLED=false/MOCK_DATA_ENABLED=true/' .env
else
# Linux version
sed -i 's/USE_MOCK_DATA=false/USE_MOCK_DATA=true/' .env
sed -i 's/MOCK_DATA_ENABLED=false/MOCK_DATA_ENABLED=true/' .env
fi
echo -e "${GREEN}Configured environment to use mock data${NC}"
# Set environment variables directly in the current shell and for any child processes
export USE_MOCK_DATA=true
export MOCK_DATA_ENABLED=true
export NODE_ENV=development
# Now run with mock data - run the start-dev.sh script directly
chmod +x ./scripts/start-dev.sh
./scripts/start-dev.sh
break
;;
3)
echo -e "\n${BLUE}Starting production environment...${NC}"
# Ensure .env file exists
[ -f .env ] || cp .env.example .env
# Configure environment for production
node scripts/configure-env.js prod
# Ensure mock data settings are set to false for production
if [[ "$OSTYPE" == "darwin"* ]]; then
# macOS requires an empty string with sed
sed -i '' 's/USE_MOCK_DATA=true/USE_MOCK_DATA=false/' .env
sed -i '' 's/MOCK_DATA_ENABLED=true/MOCK_DATA_ENABLED=false/' .env
else
# Linux version
sed -i 's/USE_MOCK_DATA=true/USE_MOCK_DATA=false/' .env
sed -i 's/MOCK_DATA_ENABLED=false/MOCK_DATA_ENABLED=false/' .env
fi
echo -e "${GREEN}Configured environment for production mode${NC}"
# Set environment variables directly in the current shell and for any child processes
export USE_MOCK_DATA=false
export MOCK_DATA_ENABLED=false
export NODE_ENV=production
# Run production script directly
chmod +x ./scripts/start-prod.sh
./scripts/start-prod.sh
break
;;
4)
echo -e "\n${BLUE}Starting Docker development environment...${NC}"
# Ensure .env file exists but don't overwrite an existing one
if [ ! -f .env ]; then
echo -e "${YELLOW}Creating .env file from .env.example${NC}"
cp .env.example .env
else
echo -e "${GREEN}Using existing .env file${NC}"
fi
# Configure for Docker development
if [[ "$OSTYPE" == "darwin"* ]]; then
# macOS requires an empty string with sed
# Set development environment
sed -i '' 's/NODE_ENV=production/NODE_ENV=development/' .env
# First ensure there are no duplicated .dev extensions
sed -i '' 's|DOCKERFILE=docker/Dockerfile.dev.dev|DOCKERFILE=docker/Dockerfile.dev|' .env
# Use the development Dockerfile (only if not already set to .dev)
sed -i '' 's|DOCKERFILE=docker/Dockerfile$|DOCKERFILE=docker/Dockerfile.dev|' .env
# Enable mock data for Docker development
sed -i '' 's/USE_MOCK_DATA=false/USE_MOCK_DATA=true/' .env
sed -i '' 's/MOCK_DATA_ENABLED=false/MOCK_DATA_ENABLED=true/' .env
# Configure Docker development mounts
sed -i '' 's/# DEV_SRC_MOUNT/DEV_SRC_MOUNT/' .env
sed -i '' 's/# DEV_FRONTEND_SRC_MOUNT/DEV_FRONTEND_SRC_MOUNT/' .env
sed -i '' 's/# DEV_FRONTEND_PUBLIC_MOUNT/DEV_FRONTEND_PUBLIC_MOUNT/' .env
sed -i '' 's/# DEV_FRONTEND_INDEX_MOUNT/DEV_FRONTEND_INDEX_MOUNT/' .env
sed -i '' 's/# DEV_FRONTEND_CONFIG_MOUNT/DEV_FRONTEND_CONFIG_MOUNT/' .env
sed -i '' 's/# DEV_SCRIPTS_MOUNT/DEV_SCRIPTS_MOUNT/' .env
sed -i '' 's/# DEV_ENV_MOUNT/DEV_ENV_MOUNT/' .env
else
# Linux version
# Set development environment
sed -i 's/NODE_ENV=production/NODE_ENV=development/' .env
# First ensure there are no duplicated .dev extensions
sed -i 's|DOCKERFILE=docker/Dockerfile.dev.dev|DOCKERFILE=docker/Dockerfile.dev|' .env
# Use the development Dockerfile (only if not already set to .dev)
sed -i 's|DOCKERFILE=docker/Dockerfile$|DOCKERFILE=docker/Dockerfile.dev|' .env
# Enable mock data for Docker development
sed -i 's/USE_MOCK_DATA=false/USE_MOCK_DATA=true/' .env
sed -i 's/MOCK_DATA_ENABLED=false/MOCK_DATA_ENABLED=true/' .env
# Configure Docker development mounts
sed -i 's/# DEV_SRC_MOUNT/DEV_SRC_MOUNT/' .env
sed -i 's/# DEV_FRONTEND_SRC_MOUNT/DEV_FRONTEND_SRC_MOUNT/' .env
sed -i 's/# DEV_FRONTEND_PUBLIC_MOUNT/DEV_FRONTEND_PUBLIC_MOUNT/' .env
sed -i 's/# DEV_FRONTEND_INDEX_MOUNT/DEV_FRONTEND_INDEX_MOUNT/' .env
sed -i 's/# DEV_FRONTEND_CONFIG_MOUNT/DEV_FRONTEND_CONFIG_MOUNT/' .env
sed -i 's/# DEV_SCRIPTS_MOUNT/DEV_SCRIPTS_MOUNT/' .env
sed -i 's/# DEV_ENV_MOUNT/DEV_ENV_MOUNT/' .env
fi
echo -e "${GREEN}Configured Docker environment for development with mock data${NC}"
docker compose up --build
break
;;
5)
echo -e "\n${BLUE}Starting Docker production environment...${NC}"
# Ensure .env file exists but don't overwrite an existing one
if [ ! -f .env ]; then
echo -e "${YELLOW}Creating .env file from .env.example${NC}"
cp .env.example .env
else
echo -e "${GREEN}Using existing .env file${NC}"
fi
# Define a function to check if Proxmox credentials are valid
check_proxmox_credentials() {
# Check if the default placeholder is still in the config
if grep -q "PROXMOX_NODE_1_TOKEN_SECRET=your-token-secret" .env; then
return 1 # Invalid credentials
else
return 0 # Valid credentials
fi
}
# Ask the user if they want to enter Proxmox credentials or use mock data
if ! check_proxmox_credentials; then
echo -e "${YELLOW}No valid Proxmox credentials found in configuration.${NC}"
echo -e "${GREEN}Do you want to:${NC}"
echo -e "${YELLOW}1)${NC} Enter valid Proxmox credentials"
echo -e "${YELLOW}2)${NC} Use mock data instead"
echo -e "\n${GREEN}Enter your choice (1 or 2):${NC} "
read -r cred_choice
case $cred_choice in
1)
echo -e "\n${GREEN}Please enter your Proxmox credentials:${NC}"
echo -e "${YELLOW}Node name (e.g., pve-1):${NC} "
read -r proxmox_name
echo -e "${YELLOW}Host URL (e.g., https://your-proxmox-server:8006):${NC} "
read -r proxmox_host
echo -e "${YELLOW}Token ID (e.g., root@pam!token-name):${NC} "
read -r proxmox_token_id
echo -e "${YELLOW}Token Secret:${NC} "
read -r proxmox_token_secret
# Update the .env file with the provided credentials
if [[ "$OSTYPE" == "darwin"* ]]; then
# macOS requires an empty string with sed
sed -i '' "s|PROXMOX_NODE_1_NAME=.*|PROXMOX_NODE_1_NAME=$proxmox_name|" .env
sed -i '' "s|PROXMOX_NODE_1_HOST=.*|PROXMOX_NODE_1_HOST=$proxmox_host|" .env
sed -i '' "s|PROXMOX_NODE_1_TOKEN_ID=.*|PROXMOX_NODE_1_TOKEN_ID=$proxmox_token_id|" .env
sed -i '' "s|PROXMOX_NODE_1_TOKEN_SECRET=.*|PROXMOX_NODE_1_TOKEN_SECRET=$proxmox_token_secret|" .env
sed -i '' 's/USE_MOCK_DATA=true/USE_MOCK_DATA=false/' .env
sed -i '' 's/MOCK_DATA_ENABLED=true/MOCK_DATA_ENABLED=false/' .env
else
# Linux version
sed -i "s|PROXMOX_NODE_1_NAME=.*|PROXMOX_NODE_1_NAME=$proxmox_name|" .env
sed -i "s|PROXMOX_NODE_1_HOST=.*|PROXMOX_NODE_1_HOST=$proxmox_host|" .env
sed -i "s|PROXMOX_NODE_1_TOKEN_ID=.*|PROXMOX_NODE_1_TOKEN_ID=$proxmox_token_id|" .env
sed -i "s|PROXMOX_NODE_1_TOKEN_SECRET=.*|PROXMOX_NODE_1_TOKEN_SECRET=$proxmox_token_secret|" .env
sed -i 's/USE_MOCK_DATA=true/USE_MOCK_DATA=false/' .env
sed -i 's/MOCK_DATA_ENABLED=true/MOCK_DATA_ENABLED=false/' .env
fi
echo -e "${GREEN}Configured Docker environment for production with real Proxmox data${NC}"
;;
2)
# Configure for Docker production with mock data
if [[ "$OSTYPE" == "darwin"* ]]; then
# macOS requires an empty string with sed
# Keep NODE_ENV=production (already set in .env.example)
# Keep DOCKERFILE=docker/Dockerfile (already set in .env.example)
# Enable mock data for Docker production
sed -i '' 's/USE_MOCK_DATA=false/USE_MOCK_DATA=true/' .env
sed -i '' 's/MOCK_DATA_ENABLED=false/MOCK_DATA_ENABLED=true/' .env
else
# Linux version
# Keep NODE_ENV=production (already set in .env.example)
# Keep DOCKERFILE=docker/Dockerfile (already set in .env.example)
# Enable mock data for Docker production
sed -i 's/USE_MOCK_DATA=false/USE_MOCK_DATA=true/' .env
sed -i 's/MOCK_DATA_ENABLED=false/MOCK_DATA_ENABLED=true/' .env
fi
echo -e "${GREEN}Configured Docker environment for production with mock data${NC}"
;;
*)
echo -e "${YELLOW}Invalid choice. Using mock data as a fallback.${NC}"
# Configure for Docker production with mock data
if [[ "$OSTYPE" == "darwin"* ]]; then
sed -i '' 's/USE_MOCK_DATA=false/USE_MOCK_DATA=true/' .env
sed -i '' 's/MOCK_DATA_ENABLED=false/MOCK_DATA_ENABLED=true/' .env
else
sed -i 's/USE_MOCK_DATA=false/USE_MOCK_DATA=true/' .env
sed -i 's/MOCK_DATA_ENABLED=false/MOCK_DATA_ENABLED=true/' .env
fi
echo -e "${GREEN}Configured Docker environment for production with mock data${NC}"
;;
esac
else
# Valid credentials already exist
# Set production environment
if [[ "$OSTYPE" == "darwin"* ]]; then
# macOS requires an empty string with sed
# Ensure NODE_ENV is set to production
sed -i '' 's/NODE_ENV=development/NODE_ENV=production/' .env
# Ensure DOCKERFILE is set to production
sed -i '' 's|DOCKERFILE=docker/Dockerfile.dev|DOCKERFILE=docker/Dockerfile|' .env
# Disable mock data for Docker production to match regular production
sed -i '' 's/USE_MOCK_DATA=true/USE_MOCK_DATA=false/' .env
sed -i '' 's/MOCK_DATA_ENABLED=true/MOCK_DATA_ENABLED=false/' .env
else
# Linux version
# Ensure NODE_ENV is set to production
sed -i 's/NODE_ENV=development/NODE_ENV=production/' .env
# Ensure DOCKERFILE is set to production
sed -i 's|DOCKERFILE=docker/Dockerfile.dev|DOCKERFILE=docker/Dockerfile|' .env
# Disable mock data for Docker production to match regular production
sed -i 's/USE_MOCK_DATA=true/USE_MOCK_DATA=false/' .env
sed -i 's/MOCK_DATA_ENABLED=true/MOCK_DATA_ENABLED=false/' .env
fi
echo -e "${GREEN}Configured Docker environment for production with real Proxmox data${NC}"
fi
docker compose up --build
break
;;
q|Q)
echo -e "\n${BLUE}Exiting...${NC}"
exit 0
;;
*)
echo -e "\n${YELLOW}Invalid option. Please try again.${NC}"
;;
esac
done