#!/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!"