Setup Ambiente di Sviluppo
Guida completa per configurare l'ambiente di sviluppo di Emblema su sistemi Linux, macOS e Windows.
π οΈ Prerequisiti di Sistemaβ
Sistema Operativoβ
- Linux: Ubuntu 20.04+, Debian 11+, o distribuzioni equivalenti
- macOS: 12.0+ (Monterey) con Xcode Command Line Tools
- Windows: Windows 10/11 con WSL2 (Ubuntu 22.04 raccomandato)
Strumenti Base Richiestiβ
1. Docker e Docker Composeβ
# Ubuntu/Debian
sudo apt update
sudo apt install docker.io docker-compose-plugin
sudo usermod -aG docker $USER
# macOS (usando Homebrew)
brew install --cask docker
# Windows: installa Docker Desktop con WSL2
# https://docs.docker.com/desktop/windows/install/
# Verifica versioni (richiesto Docker Compose v2.20+)
docker --version
docker compose version
Requisiti Docker Compose
Emblema richiede Docker Compose v2.20+ per il supporto delle configurazioni multi-file con la sintassi include.
2. Node.js (tramite nvm)β
# Installa nvm
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash
# Ricarica shell
source ~/.bashrc # o ~/.zshrc
# Installa Node.js 20
nvm install 20
nvm use 20
nvm alias default 20
3. pnpm (Package Manager)β
# Installa pnpm globalmente
npm i -g pnpm@8.15.6
# Verifica installazione
pnpm --version
4. Python e uv (raccomandato)β
# Installa Python 3.10+
sudo apt install python3.10 python3.10-venv python3-pip # Ubuntu/Debian
# Installa uv (moderno package manager Python)
curl -LsSf https://astral.sh/uv/install.sh | sh
# Ricarica shell per aggiornare PATH
source ~/.bashrc
5. Git e Strumenti Sviluppoβ
# Git
sudo apt install git curl wget build-essential
# Configura Git
git config --global user.name "Il Tuo Nome"
git config --global user.email "tua.email@dominio.com"
π¦ Clone e Setup Progettoβ
1. Clone Repositoryβ
# Clone del repository
git clone https://github.com/emblema-ai/emblema.git
cd emblema
# Verifica struttura
ls -la
# Copia file di configurazione esempio
cp .env.example .env
2. Installazione Dipendenzeβ
Frontend (pnpm workspace)β
# Installa tutte le dipendenze del monorepo
pnpm install
# Verifica installazione
pnpm list --depth=0
Backend Python (per ogni servizio)β
# Background Task Service
cd apps/background-task
uv sync
cd ../..
# Document Render Service
cd apps/document-render
uv sync
cd ../..
# MCP Demo Server (opzionale)
cd apps/mcp-demo
uv sync
cd ../..
3. Configurazione Ambienteβ
File .envβ
# Copia template ambiente
cp .env.example .env
# Modifica configurazioni base
nano .env
Configurazioni essenziali in .env:
# Domini base
EMBLEMA_WEB_HOSTNAME=localhost
EMBLEMA_WEB_PORT=3000
# Database
POSTGRES_PASSWORD=your_secure_password
HASURA_ADMIN_SECRET=your_hasura_secret
# MinIO Storage
MINIO_ACCESS_KEY_ID=minioadmin
MINIO_SECRET_ACCESS_KEY=your_minio_password
# Auth Keycloak
EMBLEMA_WEB_AUTH_SECRET=your_auth_secret
AUTH_KEYCLOAK_SECRET=your_keycloak_secret
# AI Services
OPENAI_API_KEY=your_openai_key # opzionale per testing
LITELLM_MASTER_KEY=your_litellm_key
π³ Setup Dockerβ
1. Inizializzazione Infrastrutturaβ
Installazione Automaticaβ
Lo script install.sh gestisce l'intera configurazione dell'infrastruttura:
# Setup completo con volumi Docker standard (raccomandato)
./install.sh
# Premi Enter quando chiede il percorso per usare volumi Docker standard
# OPPURE con percorso personalizzato per volumi
EMBLEMA_VOLUME_PATH=/data/emblema ./install.sh
Lo script esegue automaticamente:
- Import delle immagini Docker (se presenti in
docker-images/) - Creazione volumi Docker per persistenza dati
- Creazione reti Docker (
emblemaeredis-net) - Configurazione domini e certificati
- Setup servizi base:
- Keycloak (autenticazione)
- MinIO (object storage)
- Hasura (GraphQL API)
- Milvus (vector database)
- Novu (notifiche)
Volumi Docker
Lasciare vuoto il percorso volumi utilizza volumi Docker standard gestiti internamente. Questo Γ¨ piΓΉ pulito e raccomandato per lo sviluppo.
2. Creazione Rete Dockerβ
# Crea rete dedicata
docker network create emblema
# Verifica creazione
docker network ls | grep emblema
3. Avvio Servizi Baseβ
Stack Completoβ
Emblema utilizza Docker Compose con configurazioni modulari:
# Avvia tutti i servizi base
docker compose up -d
# Il docker-compose.yaml principale include:
# - docker-compose-base.yaml (PostgreSQL, Redis, MinIO, Milvus)
# - docker-compose-data-source.yaml (Hasura GraphQL)
# - docker-compose-auth.yaml (Keycloak)
# - docker-compose-llm.yaml (LiteLLM Gateway)
# - docker-compose-monitoring.yaml (Grafana, Prometheus)
# - docker-compose-notification.yaml (Novu)
# - docker-compose-background-task.yaml (Celery workers)
# Verifica status
docker compose ps
# Monitora logs di servizi specifici
docker compose logs -f keycloak
docker compose logs -f hasura
docker compose logs -f background-task
Avvio Selettivoβ
# Solo database e storage
docker compose -f docker-compose-base.yaml up -d
# Aggiungere autenticazione
docker compose -f docker-compose-base.yaml -f docker-compose-auth.yaml up -d
4. Verifica Serviziβ
Porte e Servizi Disponibiliβ
| Servizio | Porta | URL | Descrizione |
|---|---|---|---|
| www-emblema | 3000 | http://localhost:3000 | App principale (dev) |
| doc-emblema | 3002 | http://localhost:3002 | Documentazione (dev) |
| Hasura GraphQL | 8080 | http://localhost:8080/console | GraphQL Console |
| Keycloak | 8888 | http://localhost:8888 | Auth Admin Console |
| MinIO Console | 9001 | http://localhost:9001 | Object Storage UI |
| MinIO API | 9000 | http://localhost:9000 | S3-compatible API |
| PostgreSQL | 5432 | - | Database principale |
| Redis | 6379 | - | Cache e message broker |
| Milvus | 19530 | - | Vector database API |
| Attu | 8085 | http://localhost:8085 | Milvus Admin UI |
| Prometheus | 9090 | http://localhost:9090 | Metrics |
| Grafana | 5050 | http://localhost:5050 | Monitoring Dashboard |
| LiteLLM | 4000 | http://localhost:4000 | AI Gateway |
| Document Render | 8094 | http://localhost:8094 | Rendering service |
| Traefik | 80/443 | - | Reverse proxy |
| Novu API | 3003-3004 | http://localhost:3003 | Notification service |
Verifica Healthβ
# Verifica servizi principali
curl http://localhost:8080/healthz # Hasura GraphQL
curl http://localhost:19530/health # Milvus
curl http://localhost:4000/health # LiteLLM
# Se app Γ¨ in esecuzione
curl http://localhost:3000/api/health # www-emblema
π Sviluppoβ
1. Sviluppo Frontendβ
Applicazione Principaleβ
# Avvia www-emblema in sviluppo
pnpm --filter=www-emblema dev
# L'app sarΓ disponibile su http://localhost:3000
Libreria UI Componentiβ
# Avvia UI library in sviluppo
pnpm --filter=ui dev
# Componenti disponibili su http://localhost:6006
Documentazioneβ
# Avvia Docusaurus in sviluppo
pnpm docs:dev
# Docs disponibili su http://localhost:3001
2. Sviluppo Backend Pythonβ
Background Task Serviceβ
cd apps/background-task
# Avvia worker Celery in sviluppo
uv run celery -A app.celery_app worker --loglevel=info
# In un altro terminale, avvia API FastAPI
uv run fastapi dev app/main.py --port 8001
Document Render Serviceβ
cd apps/document-render
# Avvia servizio rendering documenti
uv run fastapi dev app/main.py --port 8094
3. Hot Reload e Watch Modeβ
Frontend con Turboβ
# Avvia tutti i servizi frontend con hot reload
pnpm dev
# Solo servizi specifici
pnpm --filter=www-emblema --filter=ui dev
Backend con Auto-reloadβ
# FastAPI con auto-reload
uv run fastapi dev app/main.py --reload
# Celery con auto-reload (watchdog)
uv run celery -A app.celery_app worker --loglevel=info --pool=solo
π§ Strumenti Sviluppo Raccomandatiβ
Editor / IDEβ
- VS Code con estensioni:
- Python
- TypeScript and JavaScript Language Features
- Tailwind CSS IntelliSense
- Docker
- GitLens
- Prettier - Code formatter
- ESLint
Browser Extensionsβ
- React Developer Tools
- Redux DevTools (se utilizzato)
- Apollo Client DevTools (per GraphQL)
Terminaleβ
# Installa oh-my-zsh (opzionale ma raccomandato)
sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
# Plugin utili: git, docker, node, python
π Monitoraggio Sviluppoβ
Logs in Tempo Realeβ
# Logs di tutti i servizi Docker
docker compose logs -f
# Logs servizio specifico
docker compose logs -f www-emblema
docker compose logs -f background-task
# Logs con filtro
docker compose logs -f | grep ERROR
Health Checksβ
# Script di health check personalizzato
./scripts/health-check.sh
# Verifica singoli servizi
curl http://localhost:8080/healthz # Hasura
curl http://localhost:19530/health # Milvus
curl http://localhost:6379/ping # Redis
Monitoring Resourcesβ
# Monitor risorse Docker
docker stats
# Monitor specifico
docker stats $(docker compose ps -q)
π Troubleshooting Comuneβ
Port GiΓ in Usoβ
# Trova processo su porta specifica
lsof -i :3000
sudo netstat -tulpn | grep :3000
# Termina processo
kill -9 <PID>
Problemi Dockerβ
Servizi che non si avvianoβ
# Verifica logs specifici
docker compose logs keycloak # Spesso problemi di init
docker compose logs hasura # Dipende da postgres
docker compose logs milvus # Richiede molta RAM
# Riavvia servizio singolo
docker compose restart keycloak
# Ricrea servizio con nuovo build
docker compose up -d --force-recreate --build www-emblema
Pulizia Volumi (ATTENZIONE: cancella dati!)β
# Pulizia sicura (mantiene volumi)
docker compose down
docker system prune -f
# Pulizia completa con script dedicato
./install/clean-docker-volumes.sh
# Pulizia manuale volumi Emblema
docker volume ls | grep emblema | awk '{print $2}' | xargs docker volume rm
Problemi di Reteβ
# Ricrea reti Docker
docker network rm emblema redis-net
./install/create-docker-networks.sh
# Verifica connettivitΓ
docker run --rm --network emblema alpine ping -c 3 postgres
Problemi Node/pnpmβ
# Pulizia cache pnpm
pnpm store prune
# Reinstallazione dipendenze
rm -rf node_modules
rm pnpm-lock.yaml
pnpm install
Problemi Python/uvβ
# Reinstalla ambiente virtuale
rm -rf .venv
uv sync --reinstall
# Problemi con dipendenze GPU (MinerU, WhisperX)
uv sync --extra gpu # Se hai GPU NVIDIA
# Cache corrotta
uv cache clean
uv sync
Problemi Specifici Serviziβ
Keycloak non si avviaβ
# Verifica se il database Γ¨ pronto
docker compose exec postgres pg_isready
# Reset Keycloak (perde configurazioni!)
docker compose stop keycloak
docker volume rm emblema-keycloak-data
./install/setup-keycloak.sh
Milvus errori di memoriaβ
# Milvus richiede almeno 8GB RAM liberi
# Modifica in docker-compose-base.yaml:
# deploy:
# resources:
# limits:
# memory: 4g # Riduci se necessario
MinIO permission deniedβ
# Fix permessi volume MinIO
docker compose exec -u root minio chown -R 1001:1001 /data
Permissions Linuxβ
# Fix permissions Docker
sudo chown -R $USER:$USER ~/.docker
# Fix permissions progetto
sudo chown -R $USER:$USER .
π Next Stepsβ
Dopo aver completato il setup:
- Architettura Codice - Comprendi la struttura del progetto
- Sviluppo Frontend - Inizia con lo sviluppo frontend
- Sviluppo Backend - Lavora sui servizi backend
- Testing e Debugging - Setup testing e debugging
π‘ Suggerimenti Proβ
Alias Utiliβ
Aggiungi al tuo ~/.bashrc o ~/.zshrc:
# Emblema aliases
alias e-dev="pnpm --filter=www-emblema dev"
alias e-build="pnpm build"
alias e-logs="docker compose logs -f"
alias e-restart="docker compose restart"
alias e-clean="docker compose down && docker system prune -f"
Git Hooksβ
# Setup pre-commit hooks (opzionale)
pnpm dlx husky install
echo "pnpm lint" > .husky/pre-commit
chmod +x .husky/pre-commit
Il tuo ambiente di sviluppo Γ¨ ora pronto! π