Questo file docker-compose.yml contiene lo stack completo di InsightLearn con tutti i servizi necessari per lo sviluppo locale.
- SQL Server 2022 - Database relazionale principale
- Redis 7 - Cache e session management
- Elasticsearch 8.11 - Search engine
- MongoDB 7.0 - NoSQL database per video storage
- API - .NET 8 REST API backend
- Web - Blazor Server frontend
- Nginx - Reverse proxy HTTPS
- Grafana 10.2 - Dashboard di monitoraggio
- Prometheus 2.48 - Metrics collection
- Jenkins LTS - CI/CD automation
- Ollama - Local LLM server (AI features)
| Servizio | Porta | Descrizione |
|---|---|---|
| Nginx | 80 | HTTP (redirect to HTTPS) |
| Nginx | 443 | HTTPS (main entry point) |
| SQL Server | 1433 | Database connections |
| Redis | 6379 | Cache connections |
| Elasticsearch | 9200 | Search API |
| MongoDB | 27017 | NoSQL database |
| API | 7001 | API HTTP |
| API | 7002 | API HTTPS |
| Web | 7003 | Web HTTP |
| Grafana | 3000 | Monitoring dashboards |
| Prometheus | 9090 | Metrics API |
| Jenkins | 8080 | CI/CD web interface |
| Jenkins | 50000 | Jenkins agent port |
| Ollama | 11434 | LLM API |
Prima di avviare i container, configurare i seguenti segreti:
Creare un file .env nella root del progetto:
# Database Passwords
DB_PASSWORD=YourSecureDBPassword123!
MONGO_PASSWORD=YourSecureMongoPassword123!
REDIS_PASSWORD=YourSecureRedisPassword123!
# JWT Authentication
JWT_SECRET_KEY=YourJwtSigningKeyMinimum32CharactersLong!
# Admin Credentials
ADMIN_PASSWORD=YourAdminPassword123!
# Encryption Keys
ENCRYPTION_MASTER_KEY=YourEncryptionMasterKeyMin32Chars!
VIDEO_ENCRYPTION_KEY=YourVideoEncryptionKey123!
# Google OAuth (optional)
GOOGLE_CLIENT_ID=your-client-id.apps.googleusercontent.com
GOOGLE_CLIENT_SECRET=GOCSPX-YourClientSecretSostituire i placeholder con variabili d'ambiente:
# Esempio per SQL Server
MSSQL_SA_PASSWORD: "${DB_PASSWORD}"
# Esempio per MongoDB
MONGO_INITDB_ROOT_PASSWORD: "${MONGO_PASSWORD}"
# Esempio per API
- ConnectionStrings__DefaultConnection=Server=sqlserver;Database=InsightLearnDb;User=sa;Password=${DB_PASSWORD};...
- JwtSettings__SecretKey=${JWT_SECRET_KEY}# Build di tutte le immagini
docker-compose build
# Avvio di tutti i servizi
docker-compose up -d
# Visualizza i log
docker-compose logs -f# Solo database
docker-compose up -d sqlserver redis mongodb elasticsearch
# Solo applicazione
docker-compose up -d api web nginx
# Solo monitoring
docker-compose up -d prometheus grafana
# Solo CI/CD
docker-compose up -d jenkins# Stato di tutti i container
docker-compose ps
# Health check
docker-compose ps | grep healthy
# Log di un servizio specifico
docker-compose logs -f api
docker-compose logs -f webI servizi si avviano automaticamente nell'ordine corretto grazie a depends_on:
- SQL Server (foundational database)
- Redis (cache)
- Elasticsearch (search)
- MongoDB (NoSQL)
- Ollama (LLM)
- Prometheus (metrics collection)
- API (backend, depends on databases)
- Web (frontend, depends on API)
- Nginx (reverse proxy, depends on API + Web)
- Grafana (monitoring, depends on Prometheus)
- Jenkins (CI/CD, independent)
# Accesso al container SQL Server
docker exec -it insightlearn-sqlserver /bin/bash
# Connessione SQL
/opt/mssql-tools18/bin/sqlcmd -S localhost -U sa -P 'YOUR_DB_PASSWORD' -C
# Verifica database
SELECT name FROM sys.databases;
GO# Accesso al container MongoDB
docker exec -it insightlearn-mongodb mongosh -u admin -p YOUR_MONGO_PASSWORD
# Creazione database e collection
use insightlearn
db.createCollection("videos")
db.createCollection("chatbot_messages")
show collections# Accesso al container Ollama
docker exec -it insightlearn-ollama ollama pull llama2
# Verifica modelli installati
docker exec -it insightlearn-ollama ollama list
# Test LLM
docker exec -it insightlearn-ollama ollama run llama2 "Hello, how are you?"- Aprire browser: http://localhost:3000
- Login:
admin/admin - Le dashboard sono auto-configurate in
/etc/grafana/provisioning/dashboards/ - Datasource Prometheus già configurato
- Aprire browser: http://localhost:8080
- Ottenere password iniziale:
docker exec insightlearn-jenkins cat /var/jenkins_home/secrets/initialAdminPassword - Installare plugin suggeriti
- Creare admin user
Tutti i dati sono persistiti in volumi Docker:
# Lista volumi
docker volume ls | grep insightlearn
# Backup di un volume
docker run --rm -v insightlearn-wasm_sqlserver-data:/data -v $(pwd):/backup ubuntu tar czf /backup/sqlserver-backup.tar.gz /data
# Restore di un volume
docker run --rm -v insightlearn-wasm_sqlserver-data:/data -v $(pwd):/backup ubuntu tar xzf /backup/sqlserver-backup.tar.gz -C /sqlserver-data- SQL Server databasemongodb-data- MongoDB databasemongodb-config- MongoDB configredis-data- Redis cacheelasticsearch-data- Elasticsearch indicesgrafana-data- Grafana dashboards e configprometheus-data- Prometheus metricsjenkins-data- Jenkins jobs e configollama-data- Ollama modelsapi-files,api-logs,api-temp,api-sessionsweb-logs,web-temp,web-sessionsnginx-logsdataprotection-keys- .NET Data Protection
# Verifica targets
curl http://localhost:9090/api/v1/targets
# Query metrics
curl 'http://localhost:9090/api/v1/query?query=up'Le seguenti dashboard sono pre-configurate:
- insightlearn-dashboard.json - Dashboard principale
- insightlearn-app-metrics.json - Metriche applicazione
- grafana-dashboard-fixed.json - Dashboard fissa
# API health
curl http://localhost:7001/health
# Web health
curl http://localhost:7003/
# Nginx health
curl http://localhost/health
# Grafana health
curl http://localhost:3000/api/health
# Prometheus health
curl http://localhost:9090/-/healthy# Verifica log
docker-compose logs [service-name]
# Rebuild forzato
docker-compose build --no-cache [service-name]
docker-compose up -d [service-name]# Verifica network
docker network inspect insightlearn-wasm_insightlearn-network
# Test connettività tra container
docker exec insightlearn-api ping mongodb
docker exec insightlearn-web ping api# Stop tutti i container
docker-compose down
# Rimozione volumi (ATTENZIONE: cancella tutti i dati!)
docker-compose down -v
# Rimozione immagini
docker-compose down --rmi all
# Pulizia completa
docker system prune -a --volumes- CPU: 4 cores
- RAM: 16 GB
- Disk: 50 GB free space
- Docker: 24.0+
- Docker Compose: 2.20+
- CPU: 8+ cores
- RAM: 32 GB
- Disk: 100 GB SSD
- Docker: latest
- Docker Compose: latest
Per deployment in produzione:
- Cambiare tutti i segreti con valori sicuri
- Usare certificati SSL validi (non self-signed)
- Abilitare autenticazione su tutti i servizi
- Configurare backup automatici dei volumi
- Usare Docker secrets invece di variabili d'ambiente
- Limitare resource limits appropriatamente
- Configurare logging centralizzato
- Abilitare monitoring alerts
- Implementare rate limiting su Nginx
- Usare private Docker registry
- Application: https://localhost (Nginx HTTPS)
- API Docs: http://localhost:7001/swagger
- Grafana: http://localhost:3000 (admin/admin)
- Prometheus: http://localhost:9090
- Jenkins: http://localhost:8080
- Ollama: http://localhost:11434
Per problemi o domande:
- GitHub Issues: https://github.com/marypas74/InsightLearn_WASM/issues
- Documentation: README.md, CLAUDE.md
- Kubernetes Guide: k8s/README.md