MinIO WebUI
A secure, user-friendly web interface for managing MinIO storage infrastructure. Designed specifically for non-Linux administrators to easily manage buckets, users, and monitor storage usage.
Features
-
🪣 Bucket Management
- Create buckets with automatic user creation
- List and monitor bucket sizes
- Delete empty buckets
- Real-time storage statistics
-
👥 User Management
- Create users with bucket access
- Automatic policy generation
- User credential management
- Enable/disable user accounts
-
📊 Storage Monitoring
- Real-time storage dashboard
- Visual storage distribution charts
- Weekly automated reports via email
- Export reports in CSV/JSON formats
-
🔒 Security
- Encrypted password storage
- JWT-based authentication
- IP-based access restrictions
- Audit logging for all operations
- HTTPS support with SSL
-
🎯 Simple Interface
- Wizard-based workflows
- Clear error messages
- Mobile-responsive design
- No Linux knowledge required
Prerequisites
- Node.js 18+ and npm
- Docker and Docker Compose (for containerized deployment)
- MinIO Client (
mc) installed - Access to a MinIO server
Quick Start
1. Clone the Repository
git clone <repository-url>
cd minio-webui
2. Run Setup Script
./scripts/setup.sh
The setup script will:
- Create
.envconfiguration file - Generate secure admin password
- Configure MinIO connection
- Install dependencies
- Build the frontend
- Optionally generate SSL certificates
Important: Save the generated admin password securely!
3. Start the Application
Development Mode
# Terminal 1 - Backend
cd backend
npm run dev
# Terminal 2 - Frontend
cd frontend
npm start
Access at: http://localhost:3000
Production Mode (Docker)
./scripts/deploy.sh
# Select option 1 for quick deployment
Access at: http://localhost
Configuration
All configuration is managed through the .env file:
Essential Settings
# Admin password (bcrypt hash)
ADMIN_PASSWORD_HASH=$2b$12$...
# JWT secret for sessions
JWT_SECRET=your-secret-key
# MinIO connection
DEFAULT_MINIO_ALIAS=kopiaminio
MINIO_ENDPOINT=https://minio.example.com
MINIO_ACCESS_KEY=minioadmin
MINIO_SECRET_KEY=minioadmin
Security Settings
# IP restrictions
ENABLE_IP_RESTRICTION=true
ALLOWED_IPS=192.168.1.0/24,10.0.0.5
# Session timeout (seconds)
SESSION_TIMEOUT=1800
Email Settings (for reports)
SMTP_HOST=smtp.gmail.com
SMTP_PORT=587
SMTP_USER=your-email@gmail.com
SMTP_PASS=your-app-password
REPORT_RECIPIENT=info@example.com
Usage Guide
Creating a Bucket with User
- Navigate to Buckets page
- Click Create Bucket
- Enter bucket name (e.g.,
alice-bucket) - Choose to create a user (enabled by default)
- Enter username and password
- Click Create
- Save the displayed credentials securely
This creates:
- A new bucket
- A new MinIO user
- A policy granting full access to the bucket
- Automatic policy attachment
Monitoring Storage
- Navigate to Reports page
- View real-time storage statistics
- See visual distribution chart
- Click Send Report to email current report
- Click CSV or JSON to export data
Weekly Automated Reports
Reports are automatically sent every Monday at midnight (configurable via REPORT_SCHEDULE in .env).
Architecture
┌─────────────┐ ┌──────────────┐ ┌─────────────┐
│ Browser │────▶│ Nginx │────▶│ Express │
│ (React) │ │ (SSL/Proxy) │ │ (API) │
└─────────────┘ └──────────────┘ └──────┬──────┘
│
▼
┌─────────────┐
│ MinIO CLI │
│ (mc) │
└──────┬──────┘
│
▼
┌─────────────┐
│ MinIO │
│ Server │
└─────────────┘
Security Considerations
- Authentication: Single admin user with bcrypt-hashed password
- Session Management: JWT tokens with configurable timeout
- IP Restrictions: Whitelist specific IPs or CIDR ranges
- HTTPS: SSL/TLS encryption for production
- Audit Logging: All operations are logged with timestamp and IP
- Input Validation: Comprehensive validation on all inputs
- CSRF Protection: Secure cookies and token validation
Deployment
Docker Deployment (Recommended)
# Quick deployment
docker-compose up -d
# Production with SSL
docker-compose --profile proxy up -d
Manual Deployment
- Build frontend:
cd frontend && npm run build - Start backend:
cd backend && npm start - Configure Nginx as reverse proxy
- Set up SSL certificates
- Configure firewall rules
PM2 Deployment
# Install PM2
npm install -g pm2
# Start backend
cd backend
pm2 start src/app.js --name minio-webui
# Save PM2 configuration
pm2 save
pm2 startup
Troubleshooting
Common Issues
-
"mc: command not found"
- Install MinIO client: https://min.io/docs/minio/linux/reference/minio-mc.html
-
"Access Denied" error
- Check IP restrictions in
.env - Verify your IP is whitelisted
- Check IP restrictions in
-
Cannot connect to MinIO
- Verify MinIO credentials in
.env - Check MinIO server is accessible
- Test with:
mc admin info YOUR_ALIAS
- Verify MinIO credentials in
-
Email reports not sending
- Verify SMTP settings in
.env - Check firewall allows SMTP port
- Enable "less secure apps" for Gmail
- Verify SMTP settings in
Logs
- Application logs:
logs/directory - Docker logs:
docker-compose logs -f - Audit logs:
logs/audit-*.log
Development
Project Structure
minio-webui/
├── backend/ # Express.js API
├── frontend/ # React application
├── docker/ # Docker configurations
├── nginx/ # Nginx configurations
├── scripts/ # Setup and deployment scripts
├── logs/ # Application logs
└── ssl/ # SSL certificates
API Endpoints
POST /api/auth/login- Admin loginGET /api/buckets- List bucketsPOST /api/buckets/with-user- Create bucket with userGET /api/reports/storage- Get storage reportPOST /api/reports/generate- Send email report
Adding Features
- Create new API endpoint in
backend/src/api/ - Add service logic in
backend/src/services/ - Create React component in
frontend/src/components/ - Update routing in
frontend/src/App.tsx
License
MIT License - see LICENSE file for details
Support
For issues and feature requests, please create an issue in the repository.
Acknowledgments
- Built with React, Node.js, and Material-UI
- Uses MinIO Client (mc) for storage operations
- Inspired by the need for simple MinIO management