BankliPlus/temparea/solarbank/quick-deploy-no-domain.sh
2025-08-13 18:05:26 +02:00

272 lines
8.4 KiB
Bash
Executable File

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