bb44b143ec
- Backend: Express.js API with MinIO CLI integration - Frontend: React with Material-UI for non-technical users - Features: Bucket management, user creation, storage monitoring - Security: JWT auth, IP filtering, encrypted passwords - Docker support for easy deployment - Automated weekly storage reports - Setup and deployment scripts included
214 lines
6.2 KiB
Bash
Executable File
214 lines
6.2 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
set -e
|
|
|
|
echo "======================================"
|
|
echo "MinIO WebUI Deployment Script"
|
|
echo "======================================"
|
|
echo ""
|
|
|
|
# Colors for output
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
BLUE='\033[0;34m'
|
|
NC='\033[0m' # No Color
|
|
|
|
# Check if running as root (not recommended)
|
|
if [ "$EUID" -eq 0 ]; then
|
|
echo -e "${YELLOW}Warning: Running as root is not recommended${NC}"
|
|
read -p "Continue anyway? (y/N): " CONTINUE_ROOT
|
|
if [[ ! "$CONTINUE_ROOT" =~ ^[Yy]$ ]]; then
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
# Check prerequisites
|
|
check_command() {
|
|
if ! command -v $1 &> /dev/null; then
|
|
echo -e "${RED}Error: $1 is required but not installed.${NC}"
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
echo "Checking prerequisites..."
|
|
check_command docker
|
|
check_command docker-compose
|
|
check_command mc
|
|
|
|
echo -e "${GREEN}✓ All prerequisites installed${NC}"
|
|
|
|
# Check .env file
|
|
if [ ! -f .env ]; then
|
|
echo -e "${RED}Error: .env file not found. Please run setup.sh first.${NC}"
|
|
exit 1
|
|
fi
|
|
|
|
# Deployment options
|
|
echo ""
|
|
echo "Deployment Options"
|
|
echo "=================="
|
|
echo "1. Quick deployment (docker-compose)"
|
|
echo "2. Production deployment with SSL"
|
|
echo "3. Update existing deployment"
|
|
echo "4. Stop deployment"
|
|
echo ""
|
|
read -p "Select option (1-4): " DEPLOY_OPTION
|
|
|
|
case $DEPLOY_OPTION in
|
|
1)
|
|
echo ""
|
|
echo "Starting quick deployment..."
|
|
echo "============================"
|
|
|
|
# Build and start containers
|
|
docker-compose build
|
|
docker-compose up -d
|
|
|
|
echo ""
|
|
echo -e "${GREEN}✓ Deployment completed!${NC}"
|
|
echo ""
|
|
echo "Services:"
|
|
echo "- Frontend: http://localhost"
|
|
echo "- Backend API: http://localhost:3000"
|
|
echo ""
|
|
docker-compose ps
|
|
;;
|
|
|
|
2)
|
|
echo ""
|
|
echo "Production Deployment with SSL"
|
|
echo "=============================="
|
|
|
|
# Check for SSL certificates
|
|
if [ ! -f ssl/cert.pem ] || [ ! -f ssl/key.pem ]; then
|
|
echo -e "${YELLOW}SSL certificates not found.${NC}"
|
|
echo "Options:"
|
|
echo "1. Use Let's Encrypt (recommended for production)"
|
|
echo "2. Use existing certificates"
|
|
echo "3. Generate self-signed certificate (development only)"
|
|
read -p "Select option (1-3): " SSL_OPTION
|
|
|
|
case $SSL_OPTION in
|
|
1)
|
|
read -p "Enter your domain name: " DOMAIN
|
|
read -p "Enter your email: " EMAIL
|
|
|
|
# Install certbot if not present
|
|
if ! command -v certbot &> /dev/null; then
|
|
echo "Installing certbot..."
|
|
if [[ "$OSTYPE" == "darwin"* ]]; then
|
|
brew install certbot
|
|
else
|
|
sudo apt-get update
|
|
sudo apt-get install -y certbot
|
|
fi
|
|
fi
|
|
|
|
# Generate Let's Encrypt certificate
|
|
sudo certbot certonly --standalone \
|
|
-d $DOMAIN \
|
|
--non-interactive \
|
|
--agree-tos \
|
|
--email $EMAIL
|
|
|
|
# Copy certificates
|
|
sudo cp /etc/letsencrypt/live/$DOMAIN/fullchain.pem ssl/cert.pem
|
|
sudo cp /etc/letsencrypt/live/$DOMAIN/privkey.pem ssl/key.pem
|
|
sudo chown $(whoami):$(whoami) ssl/*.pem
|
|
;;
|
|
|
|
2)
|
|
read -p "Path to certificate file: " CERT_PATH
|
|
read -p "Path to private key file: " KEY_PATH
|
|
cp $CERT_PATH ssl/cert.pem
|
|
cp $KEY_PATH ssl/key.pem
|
|
;;
|
|
|
|
3)
|
|
openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
|
|
-keyout ssl/key.pem \
|
|
-out ssl/cert.pem \
|
|
-subj "/C=US/ST=State/L=City/O=Organization/CN=localhost"
|
|
;;
|
|
esac
|
|
fi
|
|
|
|
# Build and start with proxy profile
|
|
echo "Building containers..."
|
|
docker-compose build
|
|
|
|
echo "Starting services..."
|
|
docker-compose --profile proxy up -d
|
|
|
|
echo ""
|
|
echo -e "${GREEN}✓ Production deployment completed!${NC}"
|
|
echo ""
|
|
echo "Services:"
|
|
echo "- HTTPS: https://localhost"
|
|
echo "- HTTP (redirects to HTTPS): http://localhost"
|
|
echo ""
|
|
docker-compose ps
|
|
;;
|
|
|
|
3)
|
|
echo ""
|
|
echo "Updating deployment..."
|
|
echo "====================="
|
|
|
|
# Pull latest changes
|
|
read -p "Pull latest changes from git? (y/N): " PULL_GIT
|
|
if [[ "$PULL_GIT" =~ ^[Yy]$ ]]; then
|
|
git pull
|
|
fi
|
|
|
|
# Rebuild containers
|
|
echo "Rebuilding containers..."
|
|
docker-compose build
|
|
|
|
# Restart services
|
|
echo "Restarting services..."
|
|
docker-compose down
|
|
docker-compose up -d
|
|
|
|
echo ""
|
|
echo -e "${GREEN}✓ Update completed!${NC}"
|
|
docker-compose ps
|
|
;;
|
|
|
|
4)
|
|
echo ""
|
|
echo "Stopping deployment..."
|
|
echo "===================="
|
|
|
|
docker-compose down
|
|
|
|
echo ""
|
|
echo -e "${GREEN}✓ Services stopped${NC}"
|
|
;;
|
|
|
|
*)
|
|
echo -e "${RED}Invalid option${NC}"
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
# Show logs option
|
|
echo ""
|
|
read -p "View logs? (y/N): " VIEW_LOGS
|
|
if [[ "$VIEW_LOGS" =~ ^[Yy]$ ]]; then
|
|
echo ""
|
|
echo "Showing logs (Ctrl+C to exit)..."
|
|
echo "================================"
|
|
docker-compose logs -f
|
|
fi
|
|
|
|
echo ""
|
|
echo "Deployment script completed!"
|
|
echo ""
|
|
echo "Useful commands:"
|
|
echo "- View logs: docker-compose logs -f"
|
|
echo "- View specific service: docker-compose logs -f backend"
|
|
echo "- Restart services: docker-compose restart"
|
|
echo "- Stop services: docker-compose down"
|
|
echo "- Remove everything: docker-compose down -v" |