142 lines
3.8 KiB
Bash
Executable File
142 lines
3.8 KiB
Bash
Executable File
#!/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!"
|