BankliPlus/temparea/solarbank/server-deploy-ip.sh
2025-08-13 18:05:26 +02:00

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