Dashboard professionnel pour suivre les statistiques du mod Create Nuclear sur Modrinth et CurseForge avec base de données PostgreSQL et collecte automatique.
- Modrinth: Téléchargements totaux, followers, statistiques par version
- CurseForge: Stats API + 600+ modpacks utilisant Create Nuclear
- Historique: Graphiques d'évolution avec PostgreSQL
- Collecteur de données planifié (toutes les 6h par défaut)
- Scraping intelligent des modpacks CurseForge
- Enrichissement via API CurseForge
- Sauvegarde automatique en base de données
- Dashboard interactif avec Streamlit
- Graphiques dynamiques avec Plotly
- Vue détaillée et vue simplifiée (one-page)
- Export de données
- Code modulaire et maintenable
- Base de données PostgreSQL avec migrations
- Déploiement Docker complet
- Tests et CI/CD ready
- Docker >= 20.10
- Docker Compose >= 2.0
- Git
# 1. Cloner le projet
git clone <votre-repo>
cd Create-nuke--data
# 2. Configuration
cp .env.example .env
# Éditer .env avec vos valeurs (POSTGRES_PASSWORD et CURSEFORGE_API_KEY)
# 3. Démarrer
docker-compose up -d
# 4. Vérifier
docker-compose ps- Dashboard principal: http://localhost:8501
- Vue simplifiée: http://localhost:8502
- PostgreSQL: localhost:5432
- ✅ Statistiques globales (downloads, followers)
- ✅ Stats par version avec dates de publication
- ✅ Versions Minecraft supportées
- ✅ Statistiques via API officielle
- ✅ Stats par fichier/version
- ✅ Scraping des modpacks (600+)
- ✅ Enrichissement automatique
- ✅ PostgreSQL 15 avec Alpine Linux
- ✅ 3 tables principales (daily_stats, version_stats, modpack_stats)
- ✅ Index optimisés pour les performances
- ✅ Contraintes d'intégrité
- ✅ Triggers pour updated_at automatique
- Statistiques globales avec KPIs
- Graphiques d'évolution temporelle
- Comparaison Modrinth vs CurseForge
- Liste détaillée des versions
- Top modpacks utilisant Create Nuclear
- Export de données (CSV, JSON)
- Vue condensée sur une page
- Métriques essentielles
- Graphiques compacts
- Idéal pour affichage permanent
- Image:
postgres:15-alpine - Port: 5432
- Volume:
pgdata(persistant) - Healthcheck:
pg_isready - Configuration optimisée pour les performances
- Application principale Streamlit
- Port: 8501
- Dépend de: postgres (healthy)
- Auto-restart
- Vue simplifiée
- Port: 8502
- Dépend de: postgres (healthy)
- Auto-restart
- Collecteur de statistiques
- Exécution planifiée (6h par défaut)
- Dépend de: postgres (healthy)
- Auto-restart
| Variable | Description | Défaut | Requis |
|---|---|---|---|
POSTGRES_PASSWORD |
Mot de passe PostgreSQL | - | ✅ |
POSTGRES_USER |
Utilisateur PostgreSQL | createnuclear |
❌ |
POSTGRES_DB |
Nom de la base | createnuclear_stats |
❌ |
CURSEFORGE_API_KEY |
Clé API CurseForge | - | ✅ |
DATABASE_URL |
URL de connexion | Auto-généré | ❌ |
COLLECTION_INTERVAL |
Intervalle collecte (sec) | 21600 (6h) |
❌ |
- Créer un compte sur CurseForge Console
- Créer une nouvelle API Key
- Copier la clé dans
.env
# Démarrer tous les services
docker-compose up -d
# Arrêter
docker-compose down
# Redémarrer un service
docker-compose restart streamlit-app
# Voir les logs
docker-compose logs -f
# Logs d'un service spécifique
docker-compose logs -f postgres
docker-compose logs -f stats-collector
# Reconstruire après modification
docker-compose up -d --build# Accéder à PostgreSQL
docker-compose exec postgres psql -U createnuclear -d createnuclear_stats
# Initialiser/Vérifier
python scripts/init_db.py
# Sauvegarder
python scripts/backup.py
# Restaurer
cat backup.sql | docker-compose exec -T postgres psql -U createnuclear createnuclear_stats# Collecter immédiatement
docker-compose exec stats-collector python collect_stats.py
# Voir le statut
docker-compose logs stats-collectorStatistiques quotidiennes globales par plateforme
| Colonne | Type | Description |
|---|---|---|
| id | SERIAL | Clé primaire |
| date | DATE | Date de collecte |
| platform | VARCHAR(20) | modrinth / curseforge |
| total_downloads | INTEGER | Total téléchargements |
| followers | INTEGER | Nombre de followers |
| versions_count | INTEGER | Nombre de versions |
Statistiques par version du mod
| Colonne | Type | Description |
|---|---|---|
| id | SERIAL | Clé primaire |
| date | DATE | Date de collecte |
| platform | VARCHAR(20) | modrinth / curseforge |
| version_name | VARCHAR(255) | Nom de la version |
| downloads | INTEGER | Téléchargements |
| date_published | TIMESTAMP | Date de publication |
Statistiques des modpacks utilisant Create Nuclear
| Colonne | Type | Description |
|---|---|---|
| id | SERIAL | Clé primaire |
| date | DATE | Date de collecte |
| platform | VARCHAR(20) | curseforge |
| modpack_name | VARCHAR(255) | Nom du modpack |
| modpack_slug | VARCHAR(255) | Slug unique |
| downloads | INTEGER | Téléchargements |
| followers | INTEGER | Followers |
Le script scripts/backup.py crée des sauvegardes compressées et garde les 7 dernières.
# Sauvegarde manuelle
python scripts/backup.py
# Planifier avec cron (Linux/Mac)
0 2 * * * cd /chemin/vers/projet && python scripts/backup.py-- Supprimer les données de plus de 90 jours
DELETE FROM daily_stats WHERE date < CURRENT_DATE - INTERVAL '90 days';
DELETE FROM version_stats WHERE date < CURRENT_DATE - INTERVAL '90 days';
DELETE FROM modpack_stats WHERE date < CURRENT_DATE - INTERVAL '90 days';
-- Récupérer l'espace
VACUUM FULL;- Guide de Démarrage Rapide - Installation en 5 minutes
- Guide PostgreSQL - Déploiement et maintenance de la base de données
- Architecture - Architecture détaillée du projet
docker-compose logs postgres
docker-compose down -v
docker-compose up -ddocker-compose exec postgres pg_isready -U createnuclear
docker-compose exec streamlit-app env | grep DATABASEdocker-compose logs stats-collector
docker-compose restart stats-collector📖 Guide de troubleshooting complet
- Tests unitaires complets
- CI/CD avec GitHub Actions
- Monitoring avec Prometheus/Grafana
- Alertes email sur erreurs
- API REST pour accès externe
- Authentification utilisateurs
- Export automatique S3
- Rapports PDF automatiques
- Machine Learning pour prédictions
- Dashboard temps réel WebSockets
- Multi-tenancy
- Clustering PostgreSQL
MIT License - Voir LICENSE pour plus de détails
Les contributions sont les bienvenues ! N'hésitez pas à :
- Ouvrir une issue pour signaler un bug
- Proposer une nouvelle fonctionnalité
- Soumettre une pull request
Pour toute question ou problème :
- Consulter la documentation
- Vérifier les issues existantes
- Créer une nouvelle issue avec les détails
Fait avec ❤️ pour la communauté Create Nuclear