Initial commit: MinIO WebUI - Complete implementation

- 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
This commit is contained in:
2025-07-22 16:29:53 +02:00
commit bb44b143ec
43 changed files with 6631 additions and 0 deletions
+301
View File
@@ -0,0 +1,301 @@
# 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
```bash
git clone <repository-url>
cd minio-webui
```
### 2. Run Setup Script
```bash
./scripts/setup.sh
```
The setup script will:
- Create `.env` configuration 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
```bash
# Terminal 1 - Backend
cd backend
npm run dev
# Terminal 2 - Frontend
cd frontend
npm start
```
Access at: http://localhost:3000
#### Production Mode (Docker)
```bash
./scripts/deploy.sh
# Select option 1 for quick deployment
```
Access at: http://localhost
## Configuration
All configuration is managed through the `.env` file:
### Essential Settings
```env
# 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
```env
# 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)
```env
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
1. Navigate to **Buckets** page
2. Click **Create Bucket**
3. Enter bucket name (e.g., `alice-bucket`)
4. Choose to create a user (enabled by default)
5. Enter username and password
6. Click **Create**
7. 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
1. Navigate to **Reports** page
2. View real-time storage statistics
3. See visual distribution chart
4. Click **Send Report** to email current report
5. 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
1. **Authentication**: Single admin user with bcrypt-hashed password
2. **Session Management**: JWT tokens with configurable timeout
3. **IP Restrictions**: Whitelist specific IPs or CIDR ranges
4. **HTTPS**: SSL/TLS encryption for production
5. **Audit Logging**: All operations are logged with timestamp and IP
6. **Input Validation**: Comprehensive validation on all inputs
7. **CSRF Protection**: Secure cookies and token validation
## Deployment
### Docker Deployment (Recommended)
```bash
# Quick deployment
docker-compose up -d
# Production with SSL
docker-compose --profile proxy up -d
```
### Manual Deployment
1. Build frontend: `cd frontend && npm run build`
2. Start backend: `cd backend && npm start`
3. Configure Nginx as reverse proxy
4. Set up SSL certificates
5. Configure firewall rules
### PM2 Deployment
```bash
# 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
1. **"mc: command not found"**
- Install MinIO client: https://min.io/docs/minio/linux/reference/minio-mc.html
2. **"Access Denied" error**
- Check IP restrictions in `.env`
- Verify your IP is whitelisted
3. **Cannot connect to MinIO**
- Verify MinIO credentials in `.env`
- Check MinIO server is accessible
- Test with: `mc admin info YOUR_ALIAS`
4. **Email reports not sending**
- Verify SMTP settings in `.env`
- Check firewall allows SMTP port
- Enable "less secure apps" for Gmail
### 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 login
- `GET /api/buckets` - List buckets
- `POST /api/buckets/with-user` - Create bucket with user
- `GET /api/reports/storage` - Get storage report
- `POST /api/reports/generate` - Send email report
### Adding Features
1. Create new API endpoint in `backend/src/api/`
2. Add service logic in `backend/src/services/`
3. Create React component in `frontend/src/components/`
4. 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