UploadHub is a lightweight, Dockerized Django REST API that enables secure file uploads using presigned URLs via MinIO (S3-compatible object storage). It demonstrates multi-container orchestration, environment-based configuration, and practical DevOps deployment workflows.
This project is perfect for building your DevOps portfolio — showing skills in Docker Compose, microservice integration, logging, and infrastructure automation.
- Django REST Framework – API backend
- PostgreSQL – Relational database
- MinIO – Object storage (S3-compatible)
- Gunicorn – WSGI production server
- Docker & Docker Compose – Container orchestration
📦 UploadHub
├── app/
│ ├── uploadhub/ # Django project configuration
│ ├── files/ # File upload logic, views & models
│ └── manage.py
├── docker-compose.yml # Multi-service orchestration
├── Dockerfile # Django container image build
├── .env # Environment configuration (excluded from repo)
└── README.md # Project documentation
✅ Django REST API with presigned upload URLs
✅ MinIO for object storage and access management
✅ PostgreSQL for metadata persistence
✅ Gunicorn for production-ready deployment
✅ Docker Compose orchestration with isolated services
✅ Environment-driven configuration for flexible setups
docker compose up --build -ddocker psExpected containers:
uploadhub_web→ Django appuploadhub_db→ PostgreSQL databaseuploadhub_minio→ Object storage
curl -X POST http://localhost:8000/api/presign/ \
-H "Content-Type: application/json" \
-d '{"filename":"test.txt"}'Response:
{
"upload_url": "http://localhost:9000/uploads/20251105170806_test.txt?...",
"storage_key": "20251105170806_test.txt",
"curl_command": "curl -X PUT -T \"test.txt\" \"http://localhost:9000/uploads/...\""
}curl -X PUT -T test.txt "<upload_url_from_response>"- Multi-container orchestration using Docker Compose
- Environment variable configuration for portability
- Secure presigned URL file uploads
- Service networking between Django, MinIO, and PostgreSQL
- Logging and debugging workflow with
docker compose logs
- Add Nginx reverse proxy + HTTPS support 🔒
- Implement download presigned URLs 📥
- Add monitoring (Prometheus + Grafana) 📊
- Automate CI/CD with GitHub Actions ⚙️
- Deploy on AWS ECS / GCP Cloud Run ☁️
Gaurav Chile DevOps & Security Enthusiast 🚀 Automating, Orchestrating, and Optimizing Cloud-Native Systems
Licensed under the MIT License – feel free to use and modify.