#!/bin/bash # Quick deployment script for SolarBank without domain (using IP only) # This creates all necessary configuration for deployment using IP address echo "Creating deployment configuration for IP-based access..." # Create a modified environment file for IP-based deployment cat > .env.prod.ip << 'EOF' # SolarBank IoT Dashboard - Production Environment Configuration (IP-based) # ============================================================================= # PROJECT CONFIGURATION # ============================================================================= PROJECT_NAME=SolarBank IoT Dashboard API_PREFIX=/api DEBUG=false ENV=production # ============================================================================= # SECURITY CONFIGURATION # ============================================================================= SECRET_KEY=WILL_BE_GENERATED JWT_SECRET_KEY=WILL_BE_GENERATED JWT_ALGORITHM=HS256 ACCESS_TOKEN_EXPIRE_MINUTES=11520 # ============================================================================= # CORS CONFIGURATION # ============================================================================= BACKEND_CORS_ORIGINS=["http://172.104.237.108", "https://172.104.237.108"] # ============================================================================= # DATABASE CONFIGURATION (PostgreSQL) # ============================================================================= POSTGRES_SERVER=db POSTGRES_USER=solarbank POSTGRES_PASSWORD=WILL_BE_GENERATED POSTGRES_DB=solarbank_iot POSTGRES_INITDB_ROOT_PASSWORD=WILL_BE_GENERATED # ============================================================================= # REDIS CONFIGURATION # ============================================================================= REDIS_HOST=redis REDIS_PORT=6379 # ============================================================================= # FRONTEND CONFIGURATION # ============================================================================= REACT_APP_API_URL=http://172.104.237.108/api REACT_APP_MAPBOX_TOKEN= # ============================================================================= # NGINX/SSL CONFIGURATION # ============================================================================= DOMAIN_NAME=172.104.237.108 EMAIL=admin@solarbank.local # ============================================================================= # IOT DEVICE CONFIGURATION # ============================================================================= DEFAULT_IOT_SERVER_PORT=80 DEFAULT_IOT_ENDPOINT=/api/data/iot # Battery voltage conversion settings (for LILYGO T-A7670G) BATTERY_MIN_VOLTAGE=3.0 BATTERY_MAX_VOLTAGE=4.2 # GPS settings DEFAULT_GPS_TIMEOUT=30 GPS_ACCURACY_THRESHOLD=10 # ============================================================================= # LOGGING CONFIGURATION # ============================================================================= LOG_LEVEL=INFO LOG_FORMAT=json # ============================================================================= # MONITORING CONFIGURATION # ============================================================================= ENABLE_METRICS=true METRICS_PORT=9090 # ============================================================================= # PRODUCTION SETTINGS # ============================================================================= DEV_MODE=false HOT_RELOAD=false # ============================================================================= # BACKUP CONFIGURATION # ============================================================================= BACKUP_ENABLED=true BACKUP_SCHEDULE=0 2 * * * BACKUP_RETENTION_DAYS=30 # ============================================================================= # EMAIL CONFIGURATION (for notifications) # ============================================================================= SMTP_TLS=true SMTP_PORT=587 SMTP_HOST=smtp.gmail.com SMTP_USER= SMTP_PASSWORD= # ============================================================================= # MONITORING AND ALERTING # ============================================================================= SENTRY_DSN= ENABLE_ERROR_TRACKING=false EOF # Create server deployment script cat > server-deploy-ip.sh << 'EOF' #!/bin/bash echo "Starting SolarBank deployment with IP-based access..." # Update system and install dependencies echo "Updating system packages..." apt update && apt upgrade -y # Install Docker if not already installed if ! command -v docker &> /dev/null; then echo "Installing Docker..." curl -fsSL https://get.docker.com -o get-docker.sh sh get-docker.sh rm get-docker.sh fi # Install Docker Compose if not already installed if ! command -v docker-compose &> /dev/null; then echo "Installing Docker Compose..." curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-compose fi # Install other required packages echo "Installing additional packages..." apt install -y git curl wget htop ufw fail2ban python3 python3-pip # Configure firewall echo "Configuring firewall..." ufw --force reset ufw default deny incoming ufw default allow outgoing ufw allow ssh ufw allow 80/tcp ufw allow 443/tcp ufw --force enable # Create application directory echo "Setting up application directory..." mkdir -p /opt/solarbank cd /opt/solarbank # Extract application files echo "Extracting application files..." tar -xzf /tmp/solarbank-deployment.tar.gz rm /tmp/solarbank-deployment.tar.gz # Copy the IP-based environment file if [ -f .env.prod.ip ]; then cp .env.prod.ip .env.prod else echo "Error: .env.prod.ip not found!" exit 1 fi # Generate secure keys echo "Generating secure keys..." SECRET_KEY=$(python3 -c "import secrets; print(secrets.token_urlsafe(32))") JWT_SECRET_KEY=$(python3 -c "import secrets; print(secrets.token_urlsafe(32))") DB_PASSWORD=$(python3 -c "import secrets; print(secrets.token_urlsafe(16))") DB_ROOT_PASSWORD=$(python3 -c "import secrets; print(secrets.token_urlsafe(16))") # Update .env.prod with generated values sed -i "s/SECRET_KEY=.*/SECRET_KEY=$SECRET_KEY/" .env.prod sed -i "s/JWT_SECRET_KEY=.*/JWT_SECRET_KEY=$JWT_SECRET_KEY/" .env.prod sed -i "s/POSTGRES_PASSWORD=.*/POSTGRES_PASSWORD=$DB_PASSWORD/" .env.prod sed -i "s/POSTGRES_INITDB_ROOT_PASSWORD=.*/POSTGRES_INITDB_ROOT_PASSWORD=$DB_ROOT_PASSWORD/" .env.prod # Make scripts executable chmod +x scripts/*.sh # Create modified deployment script that skips SSL cat > deploy-no-ssl.sh << 'DEPLOY_EOF' #!/bin/bash set -e # Colors for output RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' print_status() { echo -e "${GREEN}[INFO]${NC} $1" } print_warning() { echo -e "${YELLOW}[WARNING]${NC} $1" } print_error() { echo -e "${RED}[ERROR]${NC} $1" } print_status "Starting SolarBank deployment (IP-based, no SSL)..." # Create logs directory mkdir -p logs # Build and start services print_status "Building Docker images..." docker-compose -f docker-compose.prod.yml build --no-cache print_status "Starting services..." docker-compose -f docker-compose.prod.yml up -d # Wait for services to start print_status "Waiting for services to initialize..." sleep 30 # Check service status print_status "Checking service status..." docker-compose -f docker-compose.prod.yml ps print_status "Deployment completed!" print_status "Access your application at: http://172.104.237.108" print_status "API documentation at: http://172.104.237.108/api/docs" DEPLOY_EOF chmod +x deploy-no-ssl.sh # Run the deployment echo "Starting deployment..." ./deploy-no-ssl.sh echo "" echo "========================================" echo "Deployment completed!" echo "========================================" echo "" echo "Your SolarBank IoT Dashboard is now accessible at:" echo "Frontend: http://172.104.237.108" echo "API: http://172.104.237.108/api" echo "API Docs: http://172.104.237.108/api/docs" echo "" echo "Default login credentials:" echo "Username: admin@solarbank.com" echo "Password: admin123" echo "" echo "IMPORTANT: Change the default password after first login!" EOF chmod +x server-deploy-ip.sh echo "" echo "Quick deployment files created!" echo "" echo "To deploy:" echo "1. Upload files to server:" echo " scp solarbank-deployment.tar.gz .env.prod.ip server-deploy-ip.sh root@172.104.237.108:/tmp/" echo "" echo "2. Connect to server and run deployment:" echo " ssh root@172.104.237.108" echo " cd /tmp && chmod +x server-deploy-ip.sh && ./server-deploy-ip.sh" echo ""