272 lines
8.4 KiB
Bash
Executable File
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 "" |