Aggiorna e riorganizza la documentazione del progetto
- Sostituito README.md con versione avanzata e strutturata (indice, badge, quick start, deployment, troubleshooting, roadmap, credits) - Aggiunto .gitignore completo per .NET, Docker, VSCode, log, dati locali e secrets - Creato .env.example con tutte le variabili d’ambiente documentate per Docker/Unraid - Aggiunti script organize-docs.ps1/.sh per strutturare e spostare la documentazione in docs/ - Aggiornate e migliorate tutte le guide tecniche (Docker, Unraid, Git workflow, troubleshooting, verifica finale) - Documentazione ora pronta per ambienti di produzione, collaborazione e manutenzione
This commit is contained in:
839
README.md
839
README.md
@@ -1,3 +1,838 @@
|
||||
# Encelado
|
||||
# ?? Encelado - TradingBot
|
||||
|
||||
Semplice e piccolo robot di trading automatizzato
|
||||
**Sistema automatizzato di trading su criptovalute con interfaccia web moderna**
|
||||
|
||||
[](https://dotnet.microsoft.com/)
|
||||
[](https://blazor.net/)
|
||||
[](https://www.docker.com/)
|
||||
[](LICENSE)
|
||||
|
||||
> ?? **Robot di trading automatizzato** con strategie personalizzabili, analisi tecnica in tempo reale e interfaccia web intuitiva.
|
||||
|
||||
---
|
||||
|
||||
## ?? Indice
|
||||
|
||||
- [Panoramica](#-panoramica)
|
||||
- [Caratteristiche](#-caratteristiche-principali)
|
||||
- [Come Funziona](#-come-funziona)
|
||||
- [Quick Start](#-quick-start)
|
||||
- [Installazione](#-installazione)
|
||||
- [Deployment](#-deployment)
|
||||
- [Configurazione](#-configurazione)
|
||||
- [Utilizzo](#-utilizzo)
|
||||
- [Architettura](#-architettura)
|
||||
- [Manutenzione](#-manutenzione)
|
||||
- [Troubleshooting](#-troubleshooting)
|
||||
- [Documentazione](#-documentazione-completa)
|
||||
- [Roadmap](#-roadmap)
|
||||
- [Licenza](#-licenza)
|
||||
|
||||
---
|
||||
|
||||
## ?? Panoramica
|
||||
|
||||
**Encelado TradingBot** è un'applicazione **Blazor Server** che implementa un sistema di trading automatizzato su criptovalute. Il bot analizza il mercato in tempo reale, applica strategie di trading configurabili e gestisce automaticamente l'esecuzione delle operazioni.
|
||||
|
||||
### ?? Demo
|
||||
|
||||
```
|
||||
http://localhost:8080 # Locale
|
||||
http://[UNRAID-IP]:8080 # Produzione
|
||||
```
|
||||
|
||||
### ? Highlights
|
||||
|
||||
- ?? **Trading Automatico** - 15 asset supportati con strategie personalizzabili
|
||||
- ?? **Dashboard Real-time** - Aggiornamenti live ogni 3 secondi
|
||||
- ?? **Analisi Tecnica** - RSI, MACD, EMA integrate
|
||||
- ?? **UI Moderna** - Dark theme, responsive, glassmorphism
|
||||
- ?? **Docker Ready** - Deploy semplificato con containerizzazione
|
||||
- ?? **Persistenza Dati** - Settings e configurazioni salvate
|
||||
- ?? **Sicuro** - Modalità simulazione per testing
|
||||
|
||||
---
|
||||
|
||||
## ?? Caratteristiche Principali
|
||||
|
||||
### ?? Dashboard Completo
|
||||
- **Portfolio Overview**: Valore totale, profitto, asset attivi
|
||||
- **Top Performers**: Asset più redditizi
|
||||
- **Attività Recente**: Ultime 8 operazioni
|
||||
- **Aggiornamenti Real-time**: Via SignalR
|
||||
|
||||
### ?? Gestione Strategie
|
||||
- **6 Strategie Predefinite**: RSI+MACD, SMA, Scalping, Trend Following, Mean Reversion, Conservative
|
||||
- **Parametri Configurabili**: Stop Loss, Take Profit, condizioni entry/exit
|
||||
- **Backtesting Ready**: Template per test storici
|
||||
|
||||
### ?? Asset Management
|
||||
- **15 Criptovalute**: BTC, ETH, BNB, SOL, ADA, XRP, DOT, AVAX, MATIC, LINK, UNI, ATOM, LTC, ALGO, VET
|
||||
- **Grid/List View**: Visualizzazioni multiple
|
||||
- **Assegnazione Strategie**: Per singolo asset
|
||||
- **Toggle On/Off**: Controllo granulare
|
||||
|
||||
### ?? Analisi Tecnica
|
||||
- **Indicatori**: RSI (14), MACD (12,26,9), EMA (12,26)
|
||||
- **Grafici SVG**: Rendering performante client-side
|
||||
- **Time Series**: Storico prezzi e variazioni
|
||||
|
||||
### ?? Analisi Mercato
|
||||
- **Grafici Interattivi**: Visualizzazione prezzi
|
||||
- **Selector Asset**: Cambio asset dinamico
|
||||
- **States Colorati**: Overbought/Oversold/Neutral
|
||||
|
||||
### ?? Statistiche Dettagliate
|
||||
- **Performance Portfolio**: Metriche aggregate
|
||||
- **Breakdown per Asset**: ROI, win rate, trades
|
||||
- **Best/Worst Performers**: Identificazione automatica
|
||||
- **Drilldown**: Analisi approfondita singolo asset
|
||||
|
||||
### ?? Impostazioni
|
||||
- **Persistenza Automatica**: Salvataggio su file JSON
|
||||
- **Configurazioni**: Intervallo aggiornamento, log level, auto-start
|
||||
- **Notifiche**: Feedback visivo
|
||||
|
||||
---
|
||||
|
||||
## ?? Come Funziona
|
||||
|
||||
### ?? Architettura del Sistema
|
||||
|
||||
```
|
||||
???????????????????????????????????????????????????????????
|
||||
? BLAZOR SERVER UI ?
|
||||
? (Dashboard, Strategie, Trading, Market, Stats) ?
|
||||
???????????????????????????????????????????????????????????
|
||||
? SignalR Real-time
|
||||
?
|
||||
???????????????????????????????????????????????????????????
|
||||
? TRADING BOT SERVICE (Core) ?
|
||||
? - Gestione Asset ?
|
||||
? - Esecuzione Strategie ?
|
||||
? - Risk Management ?
|
||||
? - Event System ?
|
||||
???????????????????????????????????????????????????????????
|
||||
? ? ?
|
||||
? ? ?
|
||||
??????????? ???????????????? ????????????????????
|
||||
? Market ? ? Technical ? ? Settings ?
|
||||
? Data ? ? Analysis ? ? Service ?
|
||||
? Service ? ? Service ? ? ?
|
||||
??????????? ???????????????? ????????????????????
|
||||
?
|
||||
?
|
||||
???????????????????????????????????????????????????????????
|
||||
? SIMULATED / REAL MARKET DATA ?
|
||||
? (CoinGecko API / Simulazione) ?
|
||||
???????????????????????????????????????????????????????????
|
||||
```
|
||||
|
||||
### ?? Ciclo di Trading
|
||||
|
||||
1. **?? Acquisizione Dati**
|
||||
- Market Data Service recupera prezzi ogni 3 secondi
|
||||
- Aggiorna cache interna per tutti gli asset
|
||||
|
||||
2. **?? Analisi Tecnica**
|
||||
- Calcolo indicatori (RSI, MACD, EMA)
|
||||
- Valutazione trend e momentum
|
||||
- Identificazione pattern
|
||||
|
||||
3. **?? Valutazione Strategia**
|
||||
- Verifica condizioni BUY/SELL
|
||||
- Controllo risk management
|
||||
- Validazione budget disponibile
|
||||
|
||||
4. **? Esecuzione Trade**
|
||||
- Calcolo dimensione posizione
|
||||
- Esecuzione ordine (simulato/reale)
|
||||
- Aggiornamento portfolio
|
||||
|
||||
5. **?? Logging & Notifica**
|
||||
- Salvataggio operazione
|
||||
- Aggiornamento statistiche
|
||||
- Notifica UI via SignalR
|
||||
|
||||
### ?? Strategia di Default: RSI + MACD
|
||||
|
||||
```csharp
|
||||
BUY quando:
|
||||
- RSI < 40 (asset ipervenduto)
|
||||
- MACD Histogram > 0 (momentum positivo)
|
||||
- Budget disponibile >= MinTradeAmount
|
||||
|
||||
SELL quando:
|
||||
- RSI > 60 (asset ipercomprato)
|
||||
- MACD Histogram < 0 (momentum negativo)
|
||||
- Holdings > 0
|
||||
OPPURE
|
||||
- Profitto >= Take Profit (10%)
|
||||
- Perdita >= Stop Loss (5%)
|
||||
```
|
||||
|
||||
### ?? Gestione Rischio
|
||||
|
||||
```
|
||||
? Max Daily Trades: 50 per asset
|
||||
? Max Position Size: $5000 per asset
|
||||
? Min Trade Amount: $10
|
||||
? Trade Size: 30% del balance disponibile (max)
|
||||
? Min Interval: 10 secondi tra trades
|
||||
? Stop Loss: 5% configurabile
|
||||
? Take Profit: 10% configurabile
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ?? Quick Start
|
||||
|
||||
### Locale (Windows)
|
||||
|
||||
```powershell
|
||||
# Clone repository
|
||||
git clone https://192.168.30.23/Alby96/Encelado
|
||||
cd Encelado\TradingBot
|
||||
|
||||
# Restore e Build
|
||||
dotnet restore
|
||||
dotnet build
|
||||
|
||||
# Run
|
||||
dotnet run
|
||||
|
||||
# Accesso
|
||||
# http://localhost:5001
|
||||
```
|
||||
|
||||
### Docker (Cross-platform)
|
||||
|
||||
```bash
|
||||
# Build
|
||||
docker-compose build
|
||||
|
||||
# Run
|
||||
docker-compose up -d
|
||||
|
||||
# Accesso
|
||||
# http://localhost:8080
|
||||
```
|
||||
|
||||
### Unraid (Production)
|
||||
|
||||
Vedi [Deployment su Unraid](#deployment-su-unraid)
|
||||
|
||||
---
|
||||
|
||||
## ?? Installazione
|
||||
|
||||
### Prerequisiti
|
||||
|
||||
**Per Sviluppo Locale**:
|
||||
- ? [.NET 10 SDK](https://dotnet.microsoft.com/download/dotnet/10.0)
|
||||
- ? Visual Studio 2022+ o VS Code
|
||||
- ? Git
|
||||
|
||||
**Per Docker**:
|
||||
- ? [Docker Desktop](https://www.docker.com/products/docker-desktop) (Windows/Mac)
|
||||
- ? Docker Engine (Linux)
|
||||
- ? Docker Compose
|
||||
|
||||
**Per Unraid**:
|
||||
- ? Unraid 6.10+
|
||||
- ? Docker installato
|
||||
- ? Portainer (opzionale ma consigliato)
|
||||
|
||||
### Installazione Passo-Passo
|
||||
|
||||
#### 1. Clone Repository
|
||||
|
||||
```bash
|
||||
git clone https://192.168.30.23/Alby96/Encelado
|
||||
cd Encelado/TradingBot
|
||||
```
|
||||
|
||||
#### 2. Restore Dipendenze
|
||||
|
||||
```bash
|
||||
dotnet restore
|
||||
```
|
||||
|
||||
#### 3. Configurazione (Opzionale)
|
||||
|
||||
Crea `appsettings.Development.json`:
|
||||
|
||||
```json
|
||||
{
|
||||
"Logging": {
|
||||
"LogLevel": {
|
||||
"Default": "Information"
|
||||
}
|
||||
},
|
||||
"TradingBot": {
|
||||
"SimulationMode": true,
|
||||
"UpdateIntervalSeconds": 3
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
#### 4. Build
|
||||
|
||||
```bash
|
||||
dotnet build -c Release
|
||||
```
|
||||
|
||||
#### 5. Run
|
||||
|
||||
```bash
|
||||
dotnet run
|
||||
```
|
||||
|
||||
#### 6. Verifica
|
||||
|
||||
Apri browser su: `https://localhost:5001` o `http://localhost:5000`
|
||||
|
||||
---
|
||||
|
||||
## ?? Deployment
|
||||
|
||||
### Deployment Locale
|
||||
|
||||
```bash
|
||||
# Development
|
||||
dotnet run
|
||||
|
||||
# Production build
|
||||
dotnet publish -c Release -o ./publish
|
||||
cd publish
|
||||
dotnet TradingBot.dll
|
||||
```
|
||||
|
||||
### Deployment Docker
|
||||
|
||||
#### Build Immagine
|
||||
|
||||
```bash
|
||||
# Windows
|
||||
.\build-docker.bat
|
||||
|
||||
# Linux/Mac
|
||||
chmod +x build-docker.sh
|
||||
./build-docker.sh
|
||||
```
|
||||
|
||||
#### Run Container
|
||||
|
||||
```bash
|
||||
docker-compose up -d
|
||||
```
|
||||
|
||||
#### Verifica
|
||||
|
||||
```bash
|
||||
# Status
|
||||
docker ps | grep tradingbot
|
||||
|
||||
# Logs
|
||||
docker logs tradingbot -f
|
||||
|
||||
# Health
|
||||
curl http://localhost:8080/health
|
||||
```
|
||||
|
||||
### Deployment su Unraid
|
||||
|
||||
#### Metodo 1: Portainer Stack (Consigliato)
|
||||
|
||||
1. **Portainer** ? Stacks ? Add stack
|
||||
2. **Name**: `tradingbot`
|
||||
3. **Git Repository**: `https://192.168.30.23/Alby96/Encelado`
|
||||
4. **Compose path**: `TradingBot/docker-compose.yml`
|
||||
5. **Deploy**
|
||||
|
||||
**Setup Webhook Auto-deploy**:
|
||||
- Portainer ? Webhooks ? Create
|
||||
- Gitea ? Settings ? Webhooks ? Add
|
||||
- Ogni push ? Auto-deploy!
|
||||
|
||||
#### Metodo 2: SSH Manuale
|
||||
|
||||
```bash
|
||||
# SSH su Unraid
|
||||
ssh root@[UNRAID-IP]
|
||||
|
||||
# Clone
|
||||
cd /mnt/user/appdata
|
||||
git clone https://192.168.30.23/Alby96/Encelado.git tradingbot
|
||||
cd tradingbot/TradingBot
|
||||
|
||||
# Deploy
|
||||
docker-compose up -d
|
||||
```
|
||||
|
||||
**Guida Completa**: [docs/deployment/UNRAID_DEPLOYMENT.md](TradingBot/docs/deployment/UNRAID_DEPLOYMENT.md)
|
||||
|
||||
---
|
||||
|
||||
## ?? Configurazione
|
||||
|
||||
### File Configurazione
|
||||
|
||||
**Locale**: `%LocalAppData%/TradingBot/appsettings.json`
|
||||
**Docker**: Volume `tradingbot-data`
|
||||
|
||||
### Parametri Principali
|
||||
|
||||
```json
|
||||
{
|
||||
"SimulationMode": true, // true = simulazione, false = reale
|
||||
"AutoStartBot": true, // Avvio automatico
|
||||
"UpdateIntervalSeconds": 3, // Intervallo aggiornamento (2-10)
|
||||
"DesktopNotifications": false, // Notifiche desktop
|
||||
"ConfirmManualTrades": false, // Conferma trades manuali
|
||||
"LogLevel": "Info", // Error, Warning, Info, Debug
|
||||
"SidebarCollapsed": false // Stato sidebar UI
|
||||
}
|
||||
```
|
||||
|
||||
### Environment Variables (Docker)
|
||||
|
||||
```bash
|
||||
# .env file
|
||||
TZ=Europe/Rome
|
||||
ASPNETCORE_ENVIRONMENT=Production
|
||||
TRADINGBOT__SimulationMode=true
|
||||
TRADINGBOT__AutoStartBot=true
|
||||
TRADINGBOT__UpdateIntervalSeconds=3
|
||||
```
|
||||
|
||||
### Configurazione Asset
|
||||
|
||||
Modifica in UI: **Asset** ? Seleziona asset ? **Configura**
|
||||
|
||||
O nel codice: `Services/TradingBotService.cs` ? `InitializeAssets()`
|
||||
|
||||
---
|
||||
|
||||
## ?? Utilizzo
|
||||
|
||||
### Navigazione UI
|
||||
|
||||
#### ?? Dashboard
|
||||
- Overview portfolio e performance
|
||||
- Top 6 asset attivi
|
||||
- Ultimi 8 trades
|
||||
|
||||
#### ?? Strategie
|
||||
- Visualizza strategie disponibili
|
||||
- Strategia attiva: RSI + MACD Cross
|
||||
- Template predefiniti
|
||||
|
||||
#### ?? Asset
|
||||
- **Grid View**: Card dettagliate
|
||||
- **List View**: Tabella compatta
|
||||
- **Assegna Strategie**: Dropdown per asset
|
||||
- **Toggle**: Attiva/disattiva trading
|
||||
|
||||
#### ?? Trading
|
||||
- Grid tutti asset
|
||||
- Toggle on/off
|
||||
- Storico operazioni con filtri
|
||||
|
||||
#### ?? Analisi Mercato
|
||||
- Grafici interattivi
|
||||
- Indicatori tecnici live
|
||||
- Selector asset
|
||||
|
||||
#### ?? Statistiche
|
||||
- Metriche aggregate
|
||||
- Performance per asset
|
||||
- Best/Worst performers
|
||||
- Drilldown dettagliato
|
||||
|
||||
#### ?? Impostazioni
|
||||
- Configurazioni globali
|
||||
- Salvataggio automatico
|
||||
- Reset a defaults
|
||||
|
||||
### Operazioni Comuni
|
||||
|
||||
#### Avviare/Fermare Bot
|
||||
|
||||
```
|
||||
Top Bar ? Button "Avvia" / "Stop"
|
||||
```
|
||||
|
||||
#### Cambiare Strategia per Asset
|
||||
|
||||
```
|
||||
Asset ? Grid/List ? Dropdown "Strategia Assegnata" ? Seleziona
|
||||
```
|
||||
|
||||
#### Attivare/Disattivare Asset
|
||||
|
||||
```
|
||||
Asset ? Toggle switch per ogni asset
|
||||
```
|
||||
|
||||
#### Monitorare Performance
|
||||
|
||||
```
|
||||
Dashboard ? Vedi summary
|
||||
Statistics ? Dettagli completi
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ??? Architettura
|
||||
|
||||
### Stack Tecnologico
|
||||
|
||||
```
|
||||
Frontend: Blazor Server (.NET 10)
|
||||
SignalR (Real-time)
|
||||
CSS Custom (Dark theme)
|
||||
SVG Charts
|
||||
|
||||
Backend: ASP.NET Core
|
||||
Services (Singleton)
|
||||
Event-driven architecture
|
||||
|
||||
Data: In-memory (runtime)
|
||||
JSON files (settings)
|
||||
|
||||
Deploy: Docker
|
||||
Docker Compose
|
||||
Unraid compatible
|
||||
```
|
||||
|
||||
### Componenti Principali
|
||||
|
||||
```
|
||||
TradingBot/
|
||||
??? Components/
|
||||
? ??? Layout/
|
||||
? ? ??? MainLayout.razor # Sidebar + Layout
|
||||
? ??? Pages/
|
||||
? ? ??? Dashboard.razor # Homepage
|
||||
? ? ??? Strategies.razor # Strategie
|
||||
? ? ??? Assets.razor # Asset management
|
||||
? ? ??? Trading.razor # Trading view
|
||||
? ? ??? Market.razor # Analisi mercato
|
||||
? ? ??? Statistics.razor # Statistiche
|
||||
? ? ??? Settings.razor # Impostazioni
|
||||
? ??? Shared/
|
||||
? ??? AdvancedChart.razor # Grafico SVG
|
||||
? ??? AssetSettings.razor # Config asset
|
||||
?
|
||||
??? Services/
|
||||
? ??? TradingBotService.cs # Core trading logic
|
||||
? ??? SimulatedMarketDataService.cs # Dati simulati
|
||||
? ??? SettingsService.cs # Persistenza settings
|
||||
? ??? ITradingStrategy.cs # Strategy interface
|
||||
? ??? SimpleMovingAverageStrategy.cs
|
||||
? ??? TechnicalAnalysis.cs # Calcolo indicatori
|
||||
?
|
||||
??? Models/
|
||||
? ??? AssetConfiguration.cs # Config asset
|
||||
? ??? AssetStatistics.cs # Statistiche
|
||||
? ??? MarketPrice.cs # Dati mercato
|
||||
? ??? Trade.cs # Operazione
|
||||
? ??? TechnicalIndicators.cs # RSI, MACD, EMA
|
||||
? ??? AppSettings.cs # Settings app
|
||||
?
|
||||
??? wwwroot/
|
||||
??? app.css # Stili globali
|
||||
```
|
||||
|
||||
### Pattern & Practices
|
||||
|
||||
- ? **Singleton Services**: Per state management
|
||||
- ? **Event-driven**: OnStatusChanged, OnPriceUpdated, OnTradeExecuted
|
||||
- ? **Dependency Injection**: ASP.NET Core DI
|
||||
- ? **Component Isolation**: Scoped CSS
|
||||
- ? **Real-time Updates**: SignalR
|
||||
- ? **Responsive Design**: Mobile-first
|
||||
|
||||
---
|
||||
|
||||
## ?? Manutenzione
|
||||
|
||||
### Backup
|
||||
|
||||
#### Backup Automatico (Unraid)
|
||||
|
||||
Script: `/root/scripts/backup-tradingbot.sh`
|
||||
|
||||
```bash
|
||||
#!/bin/bash
|
||||
BACKUP_DIR="/mnt/user/backups/tradingbot"
|
||||
DATE=$(date +%Y%m%d_%H%M%S)
|
||||
|
||||
mkdir -p $BACKUP_DIR
|
||||
|
||||
docker run --rm \
|
||||
-v tradingbot_tradingbot-data:/data \
|
||||
-v $BACKUP_DIR:/backup \
|
||||
alpine tar czf /backup/tradingbot-data-$DATE.tar.gz -C /data .
|
||||
|
||||
# Mantieni 7 giorni
|
||||
find $BACKUP_DIR -name "*.tar.gz" -mtime +7 -delete
|
||||
```
|
||||
|
||||
Crontab:
|
||||
```
|
||||
0 3 * * * /root/scripts/backup-tradingbot.sh
|
||||
```
|
||||
|
||||
#### Backup Manuale
|
||||
|
||||
```bash
|
||||
# Locale
|
||||
cp -r %LocalAppData%/TradingBot backup/
|
||||
|
||||
# Docker
|
||||
docker run --rm -v tradingbot_tradingbot-data:/data -v $(pwd):/backup alpine tar czf /backup/backup.tar.gz -C /data .
|
||||
```
|
||||
|
||||
### Aggiornamenti
|
||||
|
||||
#### Via Git (Locale)
|
||||
|
||||
```bash
|
||||
cd Encelado/TradingBot
|
||||
git pull origin main
|
||||
dotnet build
|
||||
dotnet run
|
||||
```
|
||||
|
||||
#### Via Docker
|
||||
|
||||
```bash
|
||||
git pull origin main
|
||||
docker-compose build
|
||||
docker-compose up -d
|
||||
```
|
||||
|
||||
#### Via Unraid (SSH)
|
||||
|
||||
```bash
|
||||
cd /mnt/user/appdata/tradingbot/TradingBot
|
||||
git pull
|
||||
docker-compose up -d --build
|
||||
```
|
||||
|
||||
#### Via Webhook (Automatico)
|
||||
|
||||
Ogni push su Gitea ? Auto-deploy se webhook configurato!
|
||||
|
||||
### Monitoring
|
||||
|
||||
#### Health Check
|
||||
|
||||
```bash
|
||||
curl http://localhost:8080/health
|
||||
```
|
||||
|
||||
Output atteso: `Healthy`
|
||||
|
||||
#### Logs
|
||||
|
||||
```bash
|
||||
# Docker
|
||||
docker logs tradingbot -f
|
||||
|
||||
# Locale
|
||||
# Vedi console di Visual Studio
|
||||
```
|
||||
|
||||
#### Resource Usage
|
||||
|
||||
```bash
|
||||
docker stats tradingbot
|
||||
```
|
||||
|
||||
### Pulizia
|
||||
|
||||
```bash
|
||||
# Stop container
|
||||
docker-compose down
|
||||
|
||||
# Remove volumes (ATTENZIONE: dati persi!)
|
||||
docker-compose down -v
|
||||
|
||||
# Clean images
|
||||
docker system prune -a
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ?? Troubleshooting
|
||||
|
||||
### Problemi Comuni
|
||||
|
||||
#### Bot non si avvia
|
||||
|
||||
**Sintomo**: Container esce immediatamente
|
||||
|
||||
**Soluzione**:
|
||||
```bash
|
||||
docker logs tradingbot
|
||||
# Verifica errori
|
||||
# Controlla porta 8080 libera
|
||||
```
|
||||
|
||||
#### Cache Browser
|
||||
|
||||
**Sintomo**: UI non si aggiorna
|
||||
|
||||
**Soluzione**:
|
||||
```
|
||||
Ctrl + Shift + R (hard refresh)
|
||||
O vedi: docs/troubleshooting/BROWSER_CACHE_GUIDE.md
|
||||
```
|
||||
|
||||
#### Sidebar non collassa
|
||||
|
||||
**Sintomo**: Toggle non funziona
|
||||
|
||||
**Soluzione**:
|
||||
```
|
||||
1. Hard refresh: Ctrl + Shift + R
|
||||
2. Vedi: docs/troubleshooting/SIDEBAR_TOGGLE_DEBUG.md
|
||||
3. Check console: F12 ? Console
|
||||
```
|
||||
|
||||
#### Porta in uso
|
||||
|
||||
**Sintomo**: `Address already in use`
|
||||
|
||||
**Soluzione**:
|
||||
```yaml
|
||||
# docker-compose.yml
|
||||
ports:
|
||||
- "8081:8080" # Cambia porta esterna
|
||||
```
|
||||
|
||||
#### Out of Memory
|
||||
|
||||
**Sintomo**: Container crashato
|
||||
|
||||
**Soluzione**:
|
||||
```yaml
|
||||
# docker-compose.yml
|
||||
deploy:
|
||||
resources:
|
||||
limits:
|
||||
memory: 2G # Aumenta da 1G
|
||||
```
|
||||
|
||||
### Log Debug
|
||||
|
||||
```bash
|
||||
# Aumenta log level
|
||||
# Settings ? Log Level ? Debug
|
||||
|
||||
# O via environment
|
||||
TRADINGBOT__LogLevel=Debug
|
||||
```
|
||||
|
||||
### Support
|
||||
|
||||
1. ?? Leggi [docs/troubleshooting/COMMON_ISSUES.md](TradingBot/docs/troubleshooting/COMMON_ISSUES.md)
|
||||
2. ?? Cerca issue simili su Gitea
|
||||
3. ?? Apri issue con:
|
||||
- Descrizione problema
|
||||
- Logs rilevanti
|
||||
- Environment (OS, Docker version, etc.)
|
||||
- Steps to reproduce
|
||||
|
||||
---
|
||||
|
||||
## ?? Documentazione Completa
|
||||
|
||||
Tutta la documentazione è organizzata in `TradingBot/docs/`:
|
||||
|
||||
- ?? **[docs/README.md](TradingBot/docs/README.md)** - Indice completo
|
||||
- ?? **[docs/installation/](TradingBot/docs/installation/)** - Guide installazione
|
||||
- ??? **[docs/architecture/](TradingBot/docs/architecture/)** - Architettura sistema
|
||||
- ?? **[docs/deployment/](TradingBot/docs/deployment/)** - Guide deployment
|
||||
- ?? **[docs/configuration/](TradingBot/docs/configuration/)** - Configurazione
|
||||
- ?? **[docs/trading/](TradingBot/docs/trading/)** - Strategie e indicatori
|
||||
- ?? **[docs/development/](TradingBot/docs/development/)** - Workflow sviluppo
|
||||
- ?? **[docs/troubleshooting/](TradingBot/docs/troubleshooting/)** - Risoluzione problemi
|
||||
- ?? **[docs/verification/](TradingBot/docs/verification/)** - Testing e QA
|
||||
- ?? **[docs/api/](TradingBot/docs/api/)** - API Reference
|
||||
|
||||
---
|
||||
|
||||
## ??? Roadmap
|
||||
|
||||
### v1.0 (Current) ?
|
||||
- [x] Core trading engine
|
||||
- [x] 15 asset supportati
|
||||
- [x] Strategie base
|
||||
- [x] UI completa
|
||||
- [x] Docker deployment
|
||||
- [x] Unraid support
|
||||
|
||||
### v1.1 (Planned)
|
||||
- [ ] Dati reali (CoinGecko API integration completa)
|
||||
- [ ] Multi-strategy per asset
|
||||
- [ ] Alert system con notifiche
|
||||
- [ ] Export/Import configurazioni
|
||||
- [ ] Paper trading mode
|
||||
|
||||
### v1.2 (Future)
|
||||
- [ ] Backtesting su dati storici
|
||||
- [ ] Machine Learning per ottimizzazione
|
||||
- [ ] Mobile app (MAUI)
|
||||
- [ ] Multi-user support
|
||||
- [ ] API REST pubblica
|
||||
|
||||
### v2.0 (Vision)
|
||||
- [ ] Exchange integration (Binance, Coinbase)
|
||||
- [ ] Real money trading
|
||||
- [ ] Advanced risk management
|
||||
- [ ] Portfolio rebalancing
|
||||
- [ ] Tax reporting
|
||||
|
||||
---
|
||||
|
||||
## ?? Contributing
|
||||
|
||||
Progetto privato. Contributi benvenuti previo contatto con il maintainer.
|
||||
|
||||
Vedi: [docs/development/CONTRIBUTING.md](TradingBot/docs/development/CONTRIBUTING.md)
|
||||
|
||||
---
|
||||
|
||||
## ?? Licenza
|
||||
|
||||
Progetto privato - Tutti i diritti riservati
|
||||
© 2024 Alberto - Encelado Project
|
||||
|
||||
**DISCLAIMER**: Questa è un'applicazione di simulazione a scopo educativo. Non utilizzare con denaro reale senza test approfonditi e comprensione completa dei rischi del trading.
|
||||
|
||||
---
|
||||
|
||||
## ?? Contatti
|
||||
|
||||
- **Maintainer**: Alberto (Alby96)
|
||||
- **Repository**: https://192.168.30.23/Alby96/Encelado
|
||||
- **Gitea**: https://192.168.30.23
|
||||
|
||||
---
|
||||
|
||||
## ?? Ringraziamenti
|
||||
|
||||
Grazie a:
|
||||
- Microsoft per .NET e Blazor
|
||||
- CoinGecko per API dati mercato
|
||||
- Community open source per librerie e tools
|
||||
|
||||
---
|
||||
|
||||
**Ultima modifica**: 2024-12-12
|
||||
**Versione**: 1.0.0
|
||||
**Status**: ? Production Ready
|
||||
107
TradingBot/.env.example
Normal file
107
TradingBot/.env.example
Normal file
@@ -0,0 +1,107 @@
|
||||
# TradingBot - Environment Variables Example
|
||||
# Copia questo file come .env e personalizza i valori
|
||||
|
||||
# ==============================================
|
||||
# DOCKER CONFIGURATION
|
||||
# ==============================================
|
||||
|
||||
# Timezone (importante per trading!)
|
||||
TZ=Europe/Rome
|
||||
|
||||
# ASP.NET Core Environment
|
||||
ASPNETCORE_ENVIRONMENT=Production
|
||||
|
||||
# Logging Level
|
||||
# Options: Trace, Debug, Information, Warning, Error, Critical
|
||||
Logging__LogLevel__Default=Information
|
||||
|
||||
# ==============================================
|
||||
# APPLICATION SETTINGS
|
||||
# ==============================================
|
||||
|
||||
# Modalità Simulazione (true = dati simulati, false = dati reali)
|
||||
TRADINGBOT__SimulationMode=true
|
||||
|
||||
# Auto-start bot all'avvio
|
||||
TRADINGBOT__AutoStartBot=true
|
||||
|
||||
# Intervallo aggiornamento dati (secondi)
|
||||
# Min: 2, Max: 10, Consigliato: 3
|
||||
TRADINGBOT__UpdateIntervalSeconds=3
|
||||
|
||||
# Notifiche Desktop (true/false)
|
||||
TRADINGBOT__DesktopNotifications=false
|
||||
|
||||
# Conferma operazioni manuali (true/false)
|
||||
TRADINGBOT__ConfirmManualTrades=false
|
||||
|
||||
# Log Level applicazione
|
||||
# Options: Error, Warning, Info, Debug
|
||||
TRADINGBOT__LogLevel=Info
|
||||
|
||||
# ==============================================
|
||||
# DOCKER COMPOSE OVERRIDES
|
||||
# ==============================================
|
||||
|
||||
# Porta esterna (modifica se 8080 è già in uso)
|
||||
EXTERNAL_PORT=8080
|
||||
|
||||
# Resource Limits
|
||||
MEMORY_LIMIT=1G
|
||||
MEMORY_RESERVATION=256M
|
||||
CPU_LIMIT=2.0
|
||||
CPU_RESERVATION=0.5
|
||||
|
||||
# ==============================================
|
||||
# REGISTRY (opzionale - per push immagini)
|
||||
# ==============================================
|
||||
|
||||
# Docker Registry URL (lascia vuoto se non usi registry privato)
|
||||
DOCKER_REGISTRY=
|
||||
|
||||
# Registry username
|
||||
REGISTRY_USER=
|
||||
|
||||
# Registry password (usa Docker secrets in produzione!)
|
||||
REGISTRY_PASSWORD=
|
||||
|
||||
# ==============================================
|
||||
# BACKUP (opzionale)
|
||||
# ==============================================
|
||||
|
||||
# Directory backup su host
|
||||
BACKUP_DIR=/mnt/user/backups/tradingbot
|
||||
|
||||
# Retention giorni backup
|
||||
BACKUP_RETENTION_DAYS=7
|
||||
|
||||
# ==============================================
|
||||
# MONITORING (opzionale)
|
||||
# ==============================================
|
||||
|
||||
# Prometheus metrics endpoint (true/false)
|
||||
ENABLE_METRICS=false
|
||||
|
||||
# Health check interval (seconds)
|
||||
HEALTHCHECK_INTERVAL=30
|
||||
|
||||
# ==============================================
|
||||
# ADVANCED
|
||||
# ==============================================
|
||||
|
||||
# HTTPS Redirection (true/false)
|
||||
# Disabilita se usi reverse proxy
|
||||
ASPNETCORE_HTTPS_PORT=
|
||||
|
||||
# Kestrel limits
|
||||
KESTREL_LIMITS_MAXREQUESTBODYSIZE=10485760
|
||||
|
||||
# ==============================================
|
||||
# NOTES
|
||||
# ==============================================
|
||||
#
|
||||
# 1. Non committare questo file con credenziali reali!
|
||||
# 2. Aggiungi .env al .gitignore
|
||||
# 3. Usa Docker secrets per password in produzione
|
||||
# 4. Restart container dopo modifiche: docker-compose restart
|
||||
#
|
||||
153
TradingBot/.gitignore
vendored
Normal file
153
TradingBot/.gitignore
vendored
Normal file
@@ -0,0 +1,153 @@
|
||||
## Ignore Visual Studio temporary files, build results, and
|
||||
## files generated by popular Visual Studio add-ons.
|
||||
|
||||
# User-specific files
|
||||
*.rsuser
|
||||
*.suo
|
||||
*.user
|
||||
*.userosscache
|
||||
*.sln.docstates
|
||||
|
||||
# User-specific files (MonoDevelop/Xamarin Studio)
|
||||
*.userprefs
|
||||
|
||||
# Build results
|
||||
[Dd]ebug/
|
||||
[Dd]ebugPublic/
|
||||
[Rr]elease/
|
||||
[Rr]eleases/
|
||||
x64/
|
||||
x86/
|
||||
[Ww][Ii][Nn]32/
|
||||
[Aa][Rr][Mm]/
|
||||
[Aa][Rr][Mm]64/
|
||||
bld/
|
||||
[Bb]in/
|
||||
[Oo]bj/
|
||||
[Ll]og/
|
||||
[Ll]ogs/
|
||||
|
||||
# Visual Studio cache/options directory
|
||||
.vs/
|
||||
|
||||
# Visual Studio Code
|
||||
.vscode/
|
||||
!.vscode/settings.json
|
||||
!.vscode/tasks.json
|
||||
!.vscode/launch.json
|
||||
!.vscode/extensions.json
|
||||
*.code-workspace
|
||||
|
||||
# ReSharper
|
||||
_ReSharper*/
|
||||
*.[Rr]e[Ss]harper
|
||||
*.DotSettings.user
|
||||
|
||||
# JetBrains Rider
|
||||
.idea/
|
||||
*.sln.iml
|
||||
|
||||
# NuGet Packages
|
||||
*.nupkg
|
||||
*.snupkg
|
||||
**/packages/*
|
||||
!**/packages/build/
|
||||
*.nuget.props
|
||||
*.nuget.targets
|
||||
project.lock.json
|
||||
project.fragment.lock.json
|
||||
artifacts/
|
||||
|
||||
# .NET Core
|
||||
project.lock.json
|
||||
project.fragment.lock.json
|
||||
artifacts/
|
||||
|
||||
# ASP.NET Scaffolding
|
||||
ScaffoldingReadMe.txt
|
||||
|
||||
# StyleCop
|
||||
StyleCopReport.xml
|
||||
|
||||
# Files built by Visual Studio
|
||||
*_i.c
|
||||
*_p.c
|
||||
*_h.h
|
||||
*.ilk
|
||||
*.meta
|
||||
*.obj
|
||||
*.iobj
|
||||
*.pch
|
||||
*.pdb
|
||||
*.ipdb
|
||||
*.pgc
|
||||
*.pgd
|
||||
*.rsp
|
||||
*.sbr
|
||||
*.tlb
|
||||
*.tli
|
||||
*.tlh
|
||||
*.tmp
|
||||
*.tmp_proj
|
||||
*_wpftmp.csproj
|
||||
*.log
|
||||
*.tlog
|
||||
*.vspscc
|
||||
*.vssscc
|
||||
.builds
|
||||
*.pidb
|
||||
*.svclog
|
||||
*.scc
|
||||
|
||||
# Test Results
|
||||
[Tt]est[Rr]esult*/
|
||||
[Bb]uild[Ll]og.*
|
||||
*.trx
|
||||
*.coverage
|
||||
*.coveragexml
|
||||
|
||||
# Node (if used)
|
||||
node_modules/
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
|
||||
# OS
|
||||
.DS_Store
|
||||
Thumbs.db
|
||||
Desktop.ini
|
||||
|
||||
# Application specific
|
||||
appsettings.Development.json
|
||||
appsettings.local.json
|
||||
*.db
|
||||
*.sqlite
|
||||
*.sqlite3
|
||||
|
||||
# Docker
|
||||
.env
|
||||
.env.local
|
||||
docker-compose.override.yml
|
||||
|
||||
# Logs
|
||||
logs/
|
||||
*.log
|
||||
|
||||
# Temporary files
|
||||
*.tmp
|
||||
*.temp
|
||||
*.bak
|
||||
*.swp
|
||||
*~
|
||||
|
||||
# Data directories
|
||||
data/
|
||||
Data/
|
||||
|
||||
# Local settings
|
||||
%LocalAppData%/
|
||||
|
||||
# Secrets (NEVER COMMIT!)
|
||||
*.key
|
||||
*.pem
|
||||
secrets.json
|
||||
@@ -1,230 +0,0 @@
|
||||
# ?? ISTRUZIONI PER FORZARE IL REFRESH DEL BROWSER
|
||||
|
||||
## ?? Il Problema
|
||||
L'applicazione è stata completamente aggiornata con una nuova sidebar verticale moderna, ma il browser potrebbe mostrare ancora la versione vecchia a causa della **cache**.
|
||||
|
||||
## ? Build Status
|
||||
- ? **Compilazione riuscita**
|
||||
- ? **0 errori**
|
||||
- ? **0 warning**
|
||||
- ? **Tutti i CSS aggiornati**
|
||||
- ? **Bootstrap Icons caricato**
|
||||
|
||||
---
|
||||
|
||||
## ?? METODO 1: Hard Refresh (CONSIGLIATO)
|
||||
|
||||
### Windows - Chrome/Edge
|
||||
```
|
||||
1. Apri DevTools: F12
|
||||
2. Click DESTRO sul pulsante Refresh (?)
|
||||
3. Seleziona "Svuota cache e ricaricamento forzato"
|
||||
```
|
||||
|
||||
**OPPURE**
|
||||
```
|
||||
Premi: Ctrl + Shift + R
|
||||
```
|
||||
|
||||
### Windows - Firefox
|
||||
```
|
||||
Premi: Ctrl + Shift + R
|
||||
```
|
||||
|
||||
### Windows - Tutti i Browser
|
||||
```
|
||||
Premi: Ctrl + F5
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ?? METODO 2: Cancella Cache Manualmente
|
||||
|
||||
### Chrome/Edge
|
||||
```
|
||||
1. Premi Ctrl + Shift + Delete
|
||||
2. Seleziona "Immagini e file memorizzati nella cache"
|
||||
3. Intervallo: "Tutto"
|
||||
4. Click "Cancella dati"
|
||||
5. Ricarica la pagina (F5)
|
||||
```
|
||||
|
||||
### Firefox
|
||||
```
|
||||
1. Premi Ctrl + Shift + Delete
|
||||
2. Seleziona "Cache"
|
||||
3. Click "Cancella adesso"
|
||||
4. Ricarica la pagina (F5)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ?? METODO 3: Modalità Incognito (TEST VELOCE)
|
||||
|
||||
### Chrome/Edge
|
||||
```
|
||||
Premi: Ctrl + Shift + N
|
||||
```
|
||||
|
||||
### Firefox
|
||||
```
|
||||
Premi: Ctrl + Shift + P
|
||||
```
|
||||
|
||||
Poi naviga su `https://localhost:[PORT]` nella finestra incognito.
|
||||
|
||||
---
|
||||
|
||||
## ??? METODO 4: Disabilita Cache (Durante Sviluppo)
|
||||
|
||||
### Per Tutti i Browser
|
||||
```
|
||||
1. Apri DevTools: F12
|
||||
2. Vai su tab "Network"
|
||||
3. Spunta "Disable cache"
|
||||
4. MANTIENI DevTools APERTO
|
||||
5. Ricarica (F5)
|
||||
```
|
||||
|
||||
Questo è perfetto durante lo sviluppo!
|
||||
|
||||
---
|
||||
|
||||
## ?? METODO 5: Restart Server + Clean Build
|
||||
|
||||
Se proprio non funziona, fai un clean restart:
|
||||
|
||||
```powershell
|
||||
# Stop server
|
||||
Ctrl + C
|
||||
|
||||
# Clean
|
||||
dotnet clean
|
||||
|
||||
# Remove bin/obj
|
||||
Remove-Item -Recurse -Force bin,obj
|
||||
|
||||
# Restore
|
||||
dotnet restore
|
||||
|
||||
# Rebuild
|
||||
dotnet build
|
||||
|
||||
# Run
|
||||
dotnet run
|
||||
```
|
||||
|
||||
Poi fai Hard Refresh nel browser.
|
||||
|
||||
---
|
||||
|
||||
## ?? COSA DOVRESTI VEDERE
|
||||
|
||||
Dopo il refresh corretto, dovresti vedere:
|
||||
|
||||
```
|
||||
??????????????????????????????????????
|
||||
? Sidebar Verticale Sinistra ?
|
||||
? ?
|
||||
? [??] TradingBot [?] ? ? Brand + Toggle
|
||||
? ? ATTIVO ?
|
||||
? ?????????????????????????????????? ?
|
||||
? ?? Dashboard ? ? Menu Items
|
||||
? ?? Strategie ? Verticali
|
||||
? ?? Asset ?
|
||||
? ?? Trading ?
|
||||
? ?? Analisi Mercato ?
|
||||
? ?? Statistiche ?
|
||||
? ?? Impostazioni ?
|
||||
? ?????????????????????????????????? ?
|
||||
? Portfolio $15,000 ? ? Summary
|
||||
? Profitto $0.00 ?
|
||||
??????????????????????????????????????
|
||||
```
|
||||
|
||||
**NON** dovresti vedere più i link testuali sotto il logo!
|
||||
|
||||
---
|
||||
|
||||
## ?? TROUBLESHOOTING
|
||||
|
||||
### Problema: "Vedo ancora i link sotto il logo"
|
||||
**Soluzione**: Cache non pulita correttamente
|
||||
```
|
||||
1. Chiudi TUTTE le tab del browser
|
||||
2. Chiudi il browser completamente
|
||||
3. Riapri e vai direttamente a localhost
|
||||
4. Premi Ctrl + Shift + R
|
||||
```
|
||||
|
||||
### Problema: "Le icone non si vedono"
|
||||
**Soluzione**: Bootstrap Icons non caricato
|
||||
```
|
||||
1. Apri DevTools (F12)
|
||||
2. Tab Console
|
||||
3. Cerca errori di caricamento CSS
|
||||
4. Se vedi errori, il server potrebbe non essere avviato correttamente
|
||||
```
|
||||
|
||||
### Problema: "Tutto bianco/rotto"
|
||||
**Soluzione**: CSS non caricato
|
||||
```
|
||||
1. DevTools ? Network tab
|
||||
2. Ricarica (F5)
|
||||
3. Verifica che app.css e MainLayout.razor.css siano caricati (200 OK)
|
||||
4. Se vedi 404, restart del server
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ? CHECKLIST FINALE
|
||||
|
||||
Prima di contattare per supporto, verifica:
|
||||
|
||||
- [ ] Ho fatto Hard Refresh (Ctrl + Shift + R)?
|
||||
- [ ] Ho provato in modalità Incognito?
|
||||
- [ ] Ho pulito la cache manualmente?
|
||||
- [ ] Il server è in esecuzione correttamente?
|
||||
- [ ] Ho fatto `dotnet clean` e `dotnet build`?
|
||||
- [ ] Ho verificato la Console (F12) per errori?
|
||||
- [ ] Ho provato con un browser diverso?
|
||||
|
||||
---
|
||||
|
||||
## ?? FUNZIONA?
|
||||
|
||||
Se dopo questi passaggi vedi la sidebar moderna verticale:
|
||||
- ? Tutto è corretto!
|
||||
- ? Puoi iniziare a usare l'applicazione
|
||||
- ? Il problema era solo la cache
|
||||
|
||||
Se NON funziona ancora:
|
||||
- ?? Apri DevTools (F12)
|
||||
- ?? Fai uno screenshot della Console
|
||||
- ?? Condividi gli errori che vedi
|
||||
|
||||
---
|
||||
|
||||
## ?? NOTE TECNICHE
|
||||
|
||||
### File CSS Modificati
|
||||
1. `wwwroot/app.css` - Stili globali con priorità
|
||||
2. `Components/Layout/MainLayout.razor.css` - Stili scoped con ::deep
|
||||
|
||||
### Modifiche Applicate
|
||||
- ? Bootstrap Icons CDN aggiunto
|
||||
- ? Namespace globali in _Imports.razor
|
||||
- ? CSS con !important per override
|
||||
- ? ::deep selectors per scoped CSS
|
||||
- ? Layout completamente riscritto
|
||||
|
||||
### Port di Default
|
||||
L'applicazione di solito gira su:
|
||||
- `https://localhost:5001` (HTTPS)
|
||||
- `http://localhost:5000` (HTTP)
|
||||
|
||||
Verifica nel terminal quale porta sta usando!
|
||||
|
||||
---
|
||||
|
||||
**Buon trading! ??**
|
||||
@@ -1,141 +0,0 @@
|
||||
# ?? QUICK START - Docker Deployment
|
||||
|
||||
## Per Sviluppo Locale
|
||||
|
||||
### Windows
|
||||
```powershell
|
||||
# Build
|
||||
.\build-docker.bat
|
||||
|
||||
# Run
|
||||
docker-compose up -d
|
||||
|
||||
# Logs
|
||||
docker-compose logs -f
|
||||
|
||||
# Stop
|
||||
docker-compose down
|
||||
```
|
||||
|
||||
### Linux/Mac
|
||||
```sh
|
||||
# Build
|
||||
chmod +x build-docker.sh
|
||||
./build-docker.sh
|
||||
|
||||
# Run
|
||||
docker-compose up -d
|
||||
|
||||
# Logs
|
||||
docker-compose logs -f
|
||||
|
||||
# Stop
|
||||
docker-compose down
|
||||
```
|
||||
|
||||
### Accesso
|
||||
```
|
||||
http://localhost:8080
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Per Unraid (via Portainer)
|
||||
|
||||
### 1. Setup Git Repository
|
||||
```sh
|
||||
git add .
|
||||
git commit -m "Docker ready"
|
||||
git push origin main
|
||||
```
|
||||
|
||||
### 2. Deploy su Portainer
|
||||
1. Stacks ? Add stack
|
||||
2. Name: `tradingbot`
|
||||
3. Git Repository: `https://192.168.30.23/Alby96/Encelado`
|
||||
4. Compose path: `TradingBot/docker-compose.yml`
|
||||
5. Deploy
|
||||
|
||||
### 3. Accesso
|
||||
```
|
||||
http://[UNRAID-IP]:8080
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Per Unraid (via SSH)
|
||||
|
||||
```sh
|
||||
# SSH
|
||||
ssh root@[UNRAID-IP]
|
||||
|
||||
# Clone
|
||||
cd /mnt/user/appdata
|
||||
git clone https://192.168.30.23/Alby96/Encelado.git tradingbot
|
||||
cd tradingbot/TradingBot
|
||||
|
||||
# Deploy
|
||||
docker-compose up -d
|
||||
|
||||
# Check
|
||||
docker ps | grep tradingbot
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Comandi Utili
|
||||
|
||||
```sh
|
||||
# Status
|
||||
docker ps
|
||||
|
||||
# Logs
|
||||
docker logs tradingbot -f
|
||||
|
||||
# Restart
|
||||
docker restart tradingbot
|
||||
|
||||
# Update
|
||||
git pull && docker-compose up -d --build
|
||||
|
||||
# Remove
|
||||
docker-compose down -v
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Environment Variables (opzionali)
|
||||
|
||||
Crea file `.env`:
|
||||
```env
|
||||
TZ=Europe/Rome
|
||||
ASPNETCORE_ENVIRONMENT=Production
|
||||
TRADINGBOT_AUTOSTART=true
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Container non parte
|
||||
```sh
|
||||
docker logs tradingbot
|
||||
```
|
||||
|
||||
### Porta già usata
|
||||
```sh
|
||||
# Cambia porta in docker-compose.yml
|
||||
ports:
|
||||
- "8081:8080"
|
||||
```
|
||||
|
||||
### Rebuild da zero
|
||||
```sh
|
||||
docker-compose down -v
|
||||
docker-compose build --no-cache
|
||||
docker-compose up -d
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
Documentazione completa: [UNRAID_DEPLOYMENT.md](UNRAID_DEPLOYMENT.md)
|
||||
@@ -1,386 +0,0 @@
|
||||
# ? VERIFICA FINALE - TradingBot Application
|
||||
|
||||
## ?? CHECKLIST COMPLETA
|
||||
|
||||
### ?? Layout & Design
|
||||
- [x] Sidebar verticale moderna implementata
|
||||
- [x] Brand section con logo gradient
|
||||
- [x] Status badge animato (? ATTIVO)
|
||||
- [x] Menu items con icone Bootstrap
|
||||
- [x] Active state highlighting
|
||||
- [x] Collapsible sidebar (280px ? 80px)
|
||||
- [x] Portfolio summary nel footer
|
||||
- [x] Top bar con bot control
|
||||
- [x] Responsive design (mobile-ready)
|
||||
|
||||
### ?? File Modificati
|
||||
- [x] `Components/Layout/MainLayout.razor` - Layout completo riscritto
|
||||
- [x] `Components/Layout/MainLayout.razor.css` - CSS moderno con ::deep
|
||||
- [x] `wwwroot/app.css` - Stili globali prioritari
|
||||
- [x] `Components/App.razor` - Bootstrap Icons CDN
|
||||
- [x] `Components/_Imports.razor` - Namespace globali
|
||||
|
||||
### ?? Pagine Verificate
|
||||
- [x] Dashboard - Razor syntax corretta
|
||||
- [x] Strategies - Asset count dinamico (15/15)
|
||||
- [x] Assets - Nuova pagina completa
|
||||
- [x] Trading - Funzionante
|
||||
- [x] Market - Query parameters supportati
|
||||
- [x] Statistics - Dettagli completi
|
||||
- [x] Settings - Persistenza attiva
|
||||
|
||||
### ?? Services
|
||||
- [x] TradingBotService - 15 asset abilitati
|
||||
- [x] SettingsService - Persistenza JSON
|
||||
- [x] SimulatedMarketDataService - Tutti asset disponibili
|
||||
- [x] SimpleMovingAverageStrategy - RSI + MACD
|
||||
|
||||
### ?? Features Implementate
|
||||
|
||||
#### Sidebar
|
||||
```
|
||||
? Logo gradient 3.5rem
|
||||
? Brand text con accent
|
||||
? Status indicator animato
|
||||
? 7 menu items verticali
|
||||
? Icone 1.375rem
|
||||
? Hover effects
|
||||
? Active state con border
|
||||
? Portfolio summary live
|
||||
? Toggle collapse button
|
||||
```
|
||||
|
||||
#### Navigation
|
||||
```
|
||||
? Dashboard (/)
|
||||
? Strategie (/strategies)
|
||||
? Asset (/assets) - NUOVA
|
||||
? Trading (/trading)
|
||||
? Analisi Mercato (/market)
|
||||
? Statistiche (/statistics)
|
||||
? Impostazioni (/settings)
|
||||
```
|
||||
|
||||
#### Assets Page
|
||||
```
|
||||
? Grid view / List view
|
||||
? 15 asset visibili
|
||||
? Strategy assignment dropdown
|
||||
? Toggle on/off per asset
|
||||
? Filtri: Tutti/Attivi/Inattivi
|
||||
? Real-time metrics
|
||||
? Navigate to chart
|
||||
```
|
||||
|
||||
### ?? Design System
|
||||
|
||||
#### Colors
|
||||
```css
|
||||
Primary: #6366f1 (Indigo)
|
||||
Secondary: #8b5cf6 (Purple)
|
||||
Success: #10b981 (Green)
|
||||
Danger: #ef4444 (Red)
|
||||
Warning: #f59e0b (Amber)
|
||||
Background: #0a0e27 (Dark Blue)
|
||||
Sidebar: #1a1f3a ? #0f1629 (Gradient)
|
||||
```
|
||||
|
||||
#### Typography
|
||||
```
|
||||
Headers: System Font Stack
|
||||
Monospace: Courier New (numeri)
|
||||
Weights: 600 (semi-bold), 700 (bold)
|
||||
Sizes: 0.75rem - 1.75rem
|
||||
```
|
||||
|
||||
#### Spacing
|
||||
```
|
||||
Unit: 0.25rem (4px)
|
||||
Padding: 1rem - 2rem
|
||||
Gaps: 0.5rem - 1.5rem
|
||||
Radius: 0.5rem - 1rem
|
||||
```
|
||||
|
||||
### ?? Real-time Updates
|
||||
- [x] Prezzi aggiornati ogni 3 secondi
|
||||
- [x] Portfolio stats live
|
||||
- [x] Trade notifications
|
||||
- [x] Indicators recalculated
|
||||
- [x] SignalR connection active
|
||||
|
||||
### ?? Persistenza
|
||||
- [x] Settings salvati in JSON
|
||||
- [x] Sidebar state ricordato
|
||||
- [x] Auto-start bot configurabile
|
||||
- [x] File path: %LocalAppData%/TradingBot/appsettings.json
|
||||
|
||||
### ?? Simulazione
|
||||
- [x] 15 asset simultanei
|
||||
- [x] Dati di mercato realistici
|
||||
- [x] Variazioni % simulate
|
||||
- [x] Trading automatico attivo
|
||||
- [x] Risk management implementato
|
||||
|
||||
### ??? Architettura
|
||||
|
||||
#### Frontend
|
||||
```
|
||||
Blazor Server (.NET 10)
|
||||
??? SignalR per real-time
|
||||
??? Scoped CSS per component isolation
|
||||
??? Global CSS per layout
|
||||
??? Bootstrap Icons via CDN
|
||||
```
|
||||
|
||||
#### Backend
|
||||
```
|
||||
Services
|
||||
??? TradingBotService (singleton)
|
||||
??? SimulatedMarketDataService (singleton)
|
||||
??? SettingsService (singleton)
|
||||
??? SimpleMovingAverageStrategy (singleton)
|
||||
```
|
||||
|
||||
#### Models
|
||||
```
|
||||
Core
|
||||
??? AssetConfiguration
|
||||
??? AssetStatistics
|
||||
??? MarketPrice
|
||||
??? Trade
|
||||
??? TechnicalIndicators
|
||||
??? PortfolioStatistics
|
||||
??? AppSettings
|
||||
```
|
||||
|
||||
### ?? Build Status
|
||||
```
|
||||
Compilazione: ? RIUSCITA
|
||||
Errori: ? 0
|
||||
Warning: ? 0
|
||||
Target: ? .NET 10
|
||||
```
|
||||
|
||||
### ?? Documentazione
|
||||
- [x] README.md aggiornato
|
||||
- [x] BROWSER_CACHE_GUIDE.md creato
|
||||
- [x] FINAL_VERIFICATION.md (questo file)
|
||||
- [x] Inline code comments
|
||||
|
||||
### ?? Sicurezza
|
||||
- [x] Input validation
|
||||
- [x] Readonly settings per sim mode
|
||||
- [x] Safe decimal calculations
|
||||
- [x] Error boundaries
|
||||
|
||||
### ? Accessibilità
|
||||
- [x] Semantic HTML
|
||||
- [x] ARIA labels via title attributes
|
||||
- [x] Keyboard navigation support
|
||||
- [x] Focus states visible
|
||||
|
||||
### ?? Responsive
|
||||
```
|
||||
Desktop: > 1024px ? Full layout
|
||||
Tablet: 768-1024px ? Sidebar 260px
|
||||
Mobile: < 768px ? Offscreen sidebar
|
||||
Small: < 480px ? Compact padding
|
||||
```
|
||||
|
||||
### ? Performance
|
||||
- [x] CSS transitions GPU-accelerated
|
||||
- [x] Component rendering optimized
|
||||
- [x] Minimal re-renders (StateHasChanged strategico)
|
||||
- [x] Lazy evaluation dove possibile
|
||||
|
||||
### ?? Testing Checklist
|
||||
|
||||
#### Manual Testing
|
||||
- [ ] Avvia applicazione
|
||||
- [ ] Verifica sidebar appare correttamente
|
||||
- [ ] Click su ogni menu item
|
||||
- [ ] Verifica navigazione funziona
|
||||
- [ ] Toggle sidebar collapse/expand
|
||||
- [ ] Verifica portfolio stats si aggiornano
|
||||
- [ ] Click "Stop" bot
|
||||
- [ ] Click "Avvia" bot
|
||||
- [ ] Vai su Assets page
|
||||
- [ ] Cambia view (Grid ? List)
|
||||
- [ ] Assegna strategia ad un asset
|
||||
- [ ] Toggle asset on/off
|
||||
- [ ] Vai su Settings
|
||||
- [ ] Cambia impostazioni
|
||||
- [ ] Verifica salvataggio automatico
|
||||
- [ ] Resize finestra (responsive test)
|
||||
- [ ] Test su mobile (DevTools)
|
||||
|
||||
#### Browser Compatibility
|
||||
- [ ] Chrome (latest)
|
||||
- [ ] Edge (latest)
|
||||
- [ ] Firefox (latest)
|
||||
- [ ] Safari (se disponibile)
|
||||
|
||||
#### Cache Testing
|
||||
- [ ] Hard refresh (Ctrl+Shift+R)
|
||||
- [ ] Incognito mode
|
||||
- [ ] After server restart
|
||||
- [ ] After clean build
|
||||
|
||||
### ?? Metrics
|
||||
|
||||
#### Code Stats
|
||||
```
|
||||
Razor Files: ~15 pages
|
||||
CSS Files: ~15 scoped + 1 global
|
||||
C# Services: ~8 services
|
||||
Models: ~12 models
|
||||
Total Lines: ~5000+ LOC
|
||||
```
|
||||
|
||||
#### Features Count
|
||||
```
|
||||
Pages: 7 main pages
|
||||
Components: ~5 shared components
|
||||
Services: 8 business services
|
||||
Asset Support: 15 cryptocurrencies
|
||||
Strategies: 6 templates
|
||||
Indicators: 3 technical (RSI, MACD, EMA)
|
||||
```
|
||||
|
||||
### ?? Success Criteria
|
||||
|
||||
#### Visual
|
||||
? Sidebar verticale moderna visibile
|
||||
? Icone Bootstrap caricate
|
||||
? Gradients applicati
|
||||
? Animazioni fluide
|
||||
? Colors coerenti
|
||||
? Typography corretta
|
||||
|
||||
#### Functional
|
||||
? Navigazione funzionante
|
||||
? Bot start/stop
|
||||
? Real-time updates
|
||||
? Settings persistono
|
||||
? Assets management
|
||||
? Strategy assignment
|
||||
|
||||
#### Technical
|
||||
? Build successful
|
||||
? 0 compilation errors
|
||||
? CSS correttamente applicato
|
||||
? Services registered
|
||||
? SignalR connected
|
||||
|
||||
### ?? Deployment Ready
|
||||
|
||||
#### Pre-deployment
|
||||
- [x] Build in Release mode
|
||||
- [x] Verify all assets
|
||||
- [x] Test all routes
|
||||
- [x] Check console for errors
|
||||
- [x] Validate responsive design
|
||||
|
||||
#### Production Checklist
|
||||
- [ ] Remove debug code
|
||||
- [ ] Optimize images
|
||||
- [ ] Minify CSS/JS
|
||||
- [ ] Enable HTTPS
|
||||
- [ ] Configure CORS
|
||||
- [ ] Set production URLs
|
||||
- [ ] Configure logging
|
||||
- [ ] Setup monitoring
|
||||
|
||||
### ?? Support
|
||||
|
||||
#### Se Qualcosa Non Funziona
|
||||
|
||||
1. **Verifica Build**
|
||||
```sh
|
||||
dotnet build
|
||||
```
|
||||
|
||||
2. **Pulisci Cache**
|
||||
```sh
|
||||
dotnet clean
|
||||
Remove-Item bin,obj -Recurse -Force
|
||||
dotnet restore
|
||||
dotnet build
|
||||
```
|
||||
|
||||
3. **Hard Refresh Browser**
|
||||
```
|
||||
Ctrl + Shift + R
|
||||
```
|
||||
|
||||
4. **Check Console**
|
||||
```
|
||||
F12 ? Console tab
|
||||
Cerca errori rossi
|
||||
```
|
||||
|
||||
5. **Verifica Network**
|
||||
```
|
||||
F12 ? Network tab
|
||||
Reload ? Verifica CSS caricati (200 OK)
|
||||
```
|
||||
|
||||
### ?? Screenshots Attesi
|
||||
|
||||
#### Desktop - Expanded
|
||||
```
|
||||
[Logo 3.5rem] TradingBot [?]
|
||||
? ATTIVO
|
||||
????????????????????????????????
|
||||
?? Dashboard
|
||||
?? Strategie
|
||||
?? Asset
|
||||
?? Trading
|
||||
?? Analisi Mercato
|
||||
?? Statistiche
|
||||
?? Impostazioni
|
||||
????????????????????????????????
|
||||
Portfolio $15,000
|
||||
Profitto $0.00
|
||||
```
|
||||
|
||||
#### Desktop - Collapsed
|
||||
```
|
||||
[Logo]
|
||||
[?]
|
||||
|
||||
??
|
||||
??
|
||||
??
|
||||
??
|
||||
??
|
||||
??
|
||||
??
|
||||
```
|
||||
|
||||
#### Mobile
|
||||
```
|
||||
[?] TradingBot [Stop]
|
||||
|
||||
Main Content Here...
|
||||
```
|
||||
|
||||
### ? CONCLUSIONE
|
||||
|
||||
L'applicazione è:
|
||||
- ? **Completamente funzionale**
|
||||
- ? **Build successful**
|
||||
- ? **Design moderno implementato**
|
||||
- ? **Tutti i 15 asset attivi**
|
||||
- ? **Persistenza settings funzionante**
|
||||
- ? **Responsive su tutti i device**
|
||||
- ? **Real-time updates attivi**
|
||||
- ? **Documentazione completa**
|
||||
|
||||
**?? PRONTO PER L'USO!**
|
||||
|
||||
---
|
||||
|
||||
**Data verifica**: 2025-12-12
|
||||
**Versione**: 1.0.0
|
||||
**Status**: ? PRODUCTION READY
|
||||
@@ -1,410 +0,0 @@
|
||||
# ?? WORKFLOW: Sviluppo ? Gitea ? Unraid
|
||||
|
||||
## Flusso di Lavoro Completo
|
||||
|
||||
```
|
||||
PC Sviluppo ? Git Commit ? Gitea Push ? Unraid Pull ? Docker Deploy
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ?? STEP BY STEP
|
||||
|
||||
### 1. Sviluppo Locale (PC)
|
||||
|
||||
```sh
|
||||
# Lavora sul codice
|
||||
code .
|
||||
|
||||
# Test locale
|
||||
dotnet run
|
||||
# Oppure
|
||||
docker-compose up
|
||||
|
||||
# Verifica funzionamento
|
||||
http://localhost:8080
|
||||
```
|
||||
|
||||
### 2. Commit e Push su Gitea
|
||||
|
||||
```sh
|
||||
# Status modifiche
|
||||
git status
|
||||
|
||||
# Stage files
|
||||
git add .
|
||||
|
||||
# Commit
|
||||
git commit -m "Feature: Descrizione modifiche"
|
||||
|
||||
# Push su Gitea
|
||||
git push origin main
|
||||
```
|
||||
|
||||
### 3. Deploy su Unraid
|
||||
|
||||
#### Opzione A: Automatico (Portainer Webhook)
|
||||
|
||||
**Setup iniziale** (una volta):
|
||||
```
|
||||
1. Portainer ? Stacks ? tradingbot ? Webhooks
|
||||
2. Create webhook
|
||||
3. Copy URL
|
||||
|
||||
4. Gitea ? Settings ? Webhooks ? Add Webhook
|
||||
5. Paste URL
|
||||
6. Trigger: Push events
|
||||
7. Save
|
||||
```
|
||||
|
||||
**Uso**: Ogni push su Gitea ? Auto-deploy su Unraid!
|
||||
|
||||
#### Opzione B: Manuale (SSH)
|
||||
|
||||
```sh
|
||||
# SSH su Unraid
|
||||
ssh root@[UNRAID-IP]
|
||||
|
||||
# Vai nella directory
|
||||
cd /mnt/user/appdata/tradingbot/TradingBot
|
||||
|
||||
# Pull modifiche
|
||||
git pull origin main
|
||||
|
||||
# Rebuild e restart
|
||||
docker-compose down
|
||||
docker-compose build
|
||||
docker-compose up -d
|
||||
```
|
||||
|
||||
#### Opzione C: Script Automatico
|
||||
|
||||
Crea `/root/scripts/deploy-tradingbot.sh`:
|
||||
|
||||
```sh
|
||||
#!/bin/bash
|
||||
cd /mnt/user/appdata/tradingbot/TradingBot
|
||||
|
||||
echo "?? Pulling latest changes..."
|
||||
git pull origin main
|
||||
|
||||
if [ $? -eq 0 ]; then
|
||||
echo "?? Rebuilding container..."
|
||||
docker-compose down
|
||||
docker-compose build
|
||||
docker-compose up -d
|
||||
echo "? Deployment completed!"
|
||||
else
|
||||
echo "? Git pull failed!"
|
||||
exit 1
|
||||
fi
|
||||
```
|
||||
|
||||
Usa:
|
||||
```sh
|
||||
chmod +x /root/scripts/deploy-tradingbot.sh
|
||||
/root/scripts/deploy-tradingbot.sh
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ?? WORKFLOW GIORNALIERO
|
||||
|
||||
### Mattina - Modifiche
|
||||
|
||||
```sh
|
||||
# PC
|
||||
git pull origin main # Sync
|
||||
code . # Sviluppa
|
||||
dotnet run # Test
|
||||
```
|
||||
|
||||
### Pomeriggio - Deploy
|
||||
|
||||
```sh
|
||||
# PC
|
||||
git add .
|
||||
git commit -m "Daily improvements"
|
||||
git push origin main
|
||||
|
||||
# Unraid (se non auto-deploy)
|
||||
ssh root@unraid
|
||||
/root/scripts/deploy-tradingbot.sh
|
||||
```
|
||||
|
||||
### Sera - Monitoring
|
||||
|
||||
```sh
|
||||
# Check logs
|
||||
docker logs tradingbot -f
|
||||
|
||||
# Check stats
|
||||
docker stats tradingbot
|
||||
|
||||
# Backup (opzionale)
|
||||
/root/scripts/backup-tradingbot.sh
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ?? BRANCHING STRATEGY
|
||||
|
||||
### Main Branch (Production)
|
||||
```sh
|
||||
# Solo codice stabile e testato
|
||||
git checkout main
|
||||
git pull origin main
|
||||
```
|
||||
|
||||
### Development Branch
|
||||
```sh
|
||||
# Crea branch per nuove feature
|
||||
git checkout -b feature/nome-feature
|
||||
|
||||
# Sviluppa e testa
|
||||
# ...
|
||||
|
||||
# Merge in main quando pronto
|
||||
git checkout main
|
||||
git merge feature/nome-feature
|
||||
git push origin main
|
||||
```
|
||||
|
||||
### Hotfix
|
||||
```sh
|
||||
# Per fix urgenti
|
||||
git checkout -b hotfix/descrizione
|
||||
# Fix
|
||||
git checkout main
|
||||
git merge hotfix/descrizione
|
||||
git push origin main
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ?? RELEASE VERSIONING
|
||||
|
||||
### Tagging
|
||||
```sh
|
||||
# Tag versione
|
||||
git tag -a v1.0.0 -m "Release v1.0.0"
|
||||
git push origin v1.0.0
|
||||
|
||||
# Build con tag
|
||||
docker build -t tradingbot:v1.0.0 .
|
||||
docker tag tradingbot:v1.0.0 tradingbot:latest
|
||||
```
|
||||
|
||||
### Rollback
|
||||
```sh
|
||||
# Lista tags
|
||||
git tag -l
|
||||
|
||||
# Checkout versione precedente
|
||||
git checkout v0.9.0
|
||||
|
||||
# Deploy versione specifica
|
||||
docker-compose down
|
||||
docker-compose build
|
||||
docker-compose up -d
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ?? BEST PRACTICES
|
||||
|
||||
### 1. Non Committare Secrets
|
||||
```sh
|
||||
# .gitignore già configurato per:
|
||||
appsettings.Development.json
|
||||
*.env
|
||||
*.key
|
||||
```
|
||||
|
||||
### 2. Test Prima di Push
|
||||
```sh
|
||||
# Sempre test locale prima
|
||||
dotnet build
|
||||
dotnet test # Se hai tests
|
||||
docker-compose up # Test container
|
||||
```
|
||||
|
||||
### 3. Commit Messages Descrittivi
|
||||
```sh
|
||||
# ? Buoni
|
||||
git commit -m "Fix: Sidebar toggle button not working"
|
||||
git commit -m "Feature: Add Docker support"
|
||||
git commit -m "Docs: Update deployment guide"
|
||||
|
||||
# ? Cattivi
|
||||
git commit -m "fix"
|
||||
git commit -m "update"
|
||||
git commit -m "changes"
|
||||
```
|
||||
|
||||
### 4. Pull Prima di Push
|
||||
```sh
|
||||
# Sempre sync prima
|
||||
git pull origin main
|
||||
# Risolvi conflitti se presenti
|
||||
git push origin main
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ?? TROUBLESHOOTING
|
||||
|
||||
### Conflitto Git
|
||||
```sh
|
||||
# Pull con conflitti
|
||||
git pull origin main
|
||||
|
||||
# Risolvi manualmente i file in conflitto
|
||||
# Cerca <<<<<<< HEAD
|
||||
|
||||
# Dopo risolto
|
||||
git add .
|
||||
git commit -m "Resolve merge conflicts"
|
||||
git push origin main
|
||||
```
|
||||
|
||||
### Push Rifiutato
|
||||
```sh
|
||||
# Se remote è avanti
|
||||
git pull --rebase origin main
|
||||
git push origin main
|
||||
```
|
||||
|
||||
### Reset Completo (ATTENZIONE!)
|
||||
```sh
|
||||
# Solo in caso di emergenza
|
||||
git fetch origin
|
||||
git reset --hard origin/main
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ?? MONITORING WORKFLOW
|
||||
|
||||
### Check Health
|
||||
```sh
|
||||
# Local
|
||||
curl http://localhost:8080/health
|
||||
|
||||
# Unraid
|
||||
curl http://[UNRAID-IP]:8080/health
|
||||
```
|
||||
|
||||
### View Logs
|
||||
```sh
|
||||
# Real-time
|
||||
docker logs -f tradingbot
|
||||
|
||||
# Last 100 lines
|
||||
docker logs --tail 100 tradingbot
|
||||
|
||||
# Since timestamp
|
||||
docker logs --since 2024-12-12T10:00:00 tradingbot
|
||||
```
|
||||
|
||||
### Resource Usage
|
||||
```sh
|
||||
# Stats
|
||||
docker stats tradingbot
|
||||
|
||||
# Processes
|
||||
docker top tradingbot
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ?? CHECKLIST COMPLETO
|
||||
|
||||
### Pre-Development
|
||||
- [ ] Git repository synced (`git pull`)
|
||||
- [ ] Branch corretto (`git branch`)
|
||||
- [ ] Dependencies updated (`dotnet restore`)
|
||||
|
||||
### Development
|
||||
- [ ] Codice scritto e testato
|
||||
- [ ] Build successful (`dotnet build`)
|
||||
- [ ] Test locale OK (`dotnet run`)
|
||||
- [ ] Docker test OK (`docker-compose up`)
|
||||
|
||||
### Pre-Commit
|
||||
- [ ] Codice formattato
|
||||
- [ ] No secrets committati
|
||||
- [ ] .gitignore aggiornato
|
||||
- [ ] README aggiornato se necessario
|
||||
|
||||
### Commit & Push
|
||||
- [ ] `git status` verificato
|
||||
- [ ] Commit message descrittivo
|
||||
- [ ] Push successful
|
||||
- [ ] Verifica su Gitea web UI
|
||||
|
||||
### Deployment
|
||||
- [ ] Pull su Unraid OK
|
||||
- [ ] Docker build successful
|
||||
- [ ] Container running
|
||||
- [ ] Health check passing
|
||||
- [ ] WebUI accessibile
|
||||
|
||||
### Post-Deployment
|
||||
- [ ] Logs verificati
|
||||
- [ ] Nessun errore critico
|
||||
- [ ] Funzionalità testate
|
||||
- [ ] Performance OK
|
||||
|
||||
---
|
||||
|
||||
## ?? MAINTENANCE
|
||||
|
||||
### Giornaliero
|
||||
- Check logs per errori
|
||||
- Verifica health endpoint
|
||||
- Monitor resource usage
|
||||
|
||||
### Settimanale
|
||||
- Git pull updates
|
||||
- Review commits
|
||||
- Check disk space
|
||||
|
||||
### Mensile
|
||||
- Full backup
|
||||
- Review performance metrics
|
||||
- Update dependencies
|
||||
- Security audit
|
||||
|
||||
---
|
||||
|
||||
## ?? COMANDI RAPIDI
|
||||
|
||||
```sh
|
||||
# Development
|
||||
git status
|
||||
git add .
|
||||
git commit -m "message"
|
||||
git push origin main
|
||||
|
||||
# Local Test
|
||||
dotnet run
|
||||
docker-compose up -d
|
||||
|
||||
# Unraid Deploy
|
||||
ssh root@unraid "/root/scripts/deploy-tradingbot.sh"
|
||||
|
||||
# Check Status
|
||||
docker ps | grep tradingbot
|
||||
docker logs tradingbot --tail 50
|
||||
|
||||
# Restart
|
||||
docker restart tradingbot
|
||||
|
||||
# Update
|
||||
git pull && docker-compose up -d --build
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
**?? Workflow pronto! Sviluppo ? Gitea ? Unraid automatizzato!**
|
||||
@@ -1,345 +0,0 @@
|
||||
# ?? TradingBot - Automated Crypto Trading Simulator
|
||||
|
||||
Un'applicazione Blazor Server avanzata per simulare e testare strategie di trading automatizzato su criptovalute.
|
||||
|
||||
## ?? Caratteristiche Principali
|
||||
|
||||
### ?? Dashboard
|
||||
- **Panoramica Portfolio**: Visualizzazione completa del valore totale e performance
|
||||
- **Metriche Chiave**: Profitto totale, operazioni eseguite, asset attivi
|
||||
- **Asset Attivi**: Grid dei top 6 asset con performance in tempo reale
|
||||
- **Attività Recente**: Storico delle ultime 8 operazioni
|
||||
|
||||
### ?? Strategie
|
||||
- **Gestione Strategie**: Crea, modifica ed elimina strategie di trading
|
||||
- **Template Predefiniti**:
|
||||
- Scalping Veloce
|
||||
- Trend Following
|
||||
- Mean Reversion
|
||||
- Conservative
|
||||
- **Strategia Attiva**: RSI + MACD Cross (personalizzabile)
|
||||
- **Parametri Configurabili**: Stop Loss, Take Profit, condizioni BUY/SELL
|
||||
|
||||
### ?? Asset (NUOVO!)
|
||||
- **Vista Completa Asset**: Tutti i 15 asset disponibili
|
||||
- **Due Modalità di Visualizzazione**:
|
||||
- **Grid View**: Card dettagliate con metriche
|
||||
- **List View**: Tabella compatta per overview rapido
|
||||
- **Assegnazione Strategie**: Dropdown per ogni asset
|
||||
- **Toggle On/Off**: Attiva/disattiva trading per asset
|
||||
- **Filtri**: Tutti / Solo Attivi / Solo Inattivi
|
||||
- **Metriche Real-time**: Prezzo, variazione 24h, holdings, profitto
|
||||
- **Azioni Rapide**: Configura e Visualizza Grafico
|
||||
|
||||
### ?? Trading
|
||||
- **15 Asset Simulati**: BTC, ETH, BNB, SOL, ADA, XRP, DOT, AVAX, MATIC, LINK, UNI, ATOM, LTC, ALGO, VET
|
||||
- **Gestione Asset**: Toggle on/off per ogni asset
|
||||
- **Monitoraggio Real-time**: Prezzi, holdings, profitti aggiornati ogni 3 secondi
|
||||
- **Tabella Operazioni**: Storico completo con filtri e ricerca
|
||||
|
||||
### ?? Analisi Mercato
|
||||
- **Grafici Interattivi**: Visualizzazione prezzi con SVG rendering
|
||||
- **Indicatori Tecnici**:
|
||||
- RSI (14) con stati Overbought/Oversold/Neutral
|
||||
- MACD con signal e histogram
|
||||
- EMA (12, 26)
|
||||
- **Selector Asset**: Cambia asset per analisi dettagliate
|
||||
|
||||
### ?? Statistiche
|
||||
- **Overview Portfolio**: Metriche aggregate di tutti gli asset
|
||||
- **Breakdown per Asset**: Tabella dettagliata con ROI, win rate, trades
|
||||
- **Best/Worst Performers**: Identificazione automatica
|
||||
- **Analisi Dettagliata**: Drilldown su singolo asset con:
|
||||
- Performance trading completa
|
||||
- Analisi profitti/perdite
|
||||
- Operazioni recenti
|
||||
|
||||
### ?? Impostazioni
|
||||
- **Persistenza Automatica**: Tutte le modifiche salvate su file
|
||||
- **Configurazioni**:
|
||||
- Modalità simulazione
|
||||
- Notifiche desktop
|
||||
- Auto-start bot
|
||||
- Conferma operazioni manuali
|
||||
- Intervallo aggiornamento (2-10 secondi)
|
||||
- Log level
|
||||
- **Notifiche Visive**: Feedback immediato sui salvataggi
|
||||
|
||||
## ??? Architettura
|
||||
|
||||
### Frontend
|
||||
- **Blazor Server (.NET 10)**: Rendering server-side con SignalR
|
||||
- **Sidebar Collapsible**: Navigazione verticale espandibile/minimizzabile
|
||||
- **Responsive Design**: Ottimizzato per desktop, tablet e mobile
|
||||
- **Dark Theme**: Design moderno con palette Indigo/Purple
|
||||
|
||||
### Backend Services
|
||||
- **TradingBotService**: Core logic per trading automatizzato
|
||||
- **SimulatedMarketDataService**: Generazione dati di mercato realistici
|
||||
- **SettingsService**: Persistenza configurazioni su file JSON
|
||||
- **SimpleMovingAverageStrategy**: Strategia di trading con RSI e MACD
|
||||
|
||||
### Models
|
||||
- **AssetConfiguration**: Configurazione per singolo asset
|
||||
- **AssetStatistics**: Metriche e performance tracking
|
||||
- **MarketPrice**: Dati di mercato in tempo reale
|
||||
- **TechnicalIndicators**: RSI, MACD, EMA
|
||||
- **AppSettings**: Configurazioni globali applicazione
|
||||
|
||||
## ?? Quick Start
|
||||
|
||||
### Prerequisiti
|
||||
- .NET 10 SDK
|
||||
- Visual Studio 2022+ o VS Code
|
||||
|
||||
### Installazione Locale
|
||||
```bash
|
||||
# Clone repository
|
||||
git clone https://192.168.30.23/Alby96/Encelado
|
||||
cd TradingBot
|
||||
|
||||
# Restore packages
|
||||
dotnet restore
|
||||
|
||||
# Run application
|
||||
dotnet run
|
||||
```
|
||||
|
||||
### ?? Deployment Docker
|
||||
|
||||
#### Development
|
||||
```sh
|
||||
# Build
|
||||
docker-compose build
|
||||
|
||||
# Run
|
||||
docker-compose up -d
|
||||
|
||||
# Access
|
||||
http://localhost:8080
|
||||
```
|
||||
|
||||
#### Production (Unraid)
|
||||
Vedi documentazione completa:
|
||||
- ?? [UNRAID_DEPLOYMENT.md](UNRAID_DEPLOYMENT.md) - Guida completa Unraid + Gitea
|
||||
- ?? [DOCKER_QUICKSTART.md](DOCKER_QUICKSTART.md) - Quick start rapido
|
||||
|
||||
### Uso
|
||||
1. L'applicazione si avvia automaticamente in modalità simulazione
|
||||
2. Tutti i 15 asset sono attivi di default
|
||||
3. Il bot inizia il trading automaticamente (configurabile in Impostazioni)
|
||||
4. Usa la sidebar per navigare tra le sezioni
|
||||
|
||||
## ?? Struttura Progetto
|
||||
|
||||
```
|
||||
TradingBot/
|
||||
??? Components/
|
||||
? ??? Layout/
|
||||
? ? ??? MainLayout.razor # Layout principale con sidebar
|
||||
? ? ??? MainLayout.razor.css
|
||||
? ??? Pages/
|
||||
? ? ??? Dashboard.razor # Homepage overview
|
||||
? ? ??? Strategies.razor # Gestione strategie
|
||||
? ? ??? Trading.razor # Trading view
|
||||
? ? ??? Market.razor # Analisi mercato
|
||||
? ? ??? Statistics.razor # Statistiche dettagliate
|
||||
? ? ??? Settings.razor # Configurazioni
|
||||
? ? ??? Assets.razor # Gestione asset (NUOVA PAGINA)
|
||||
? ??? Shared/
|
||||
? ??? AdvancedChart.razor # Componente grafico SVG
|
||||
? ??? AssetSettings.razor # Config singolo asset
|
||||
??? Models/
|
||||
? ??? AssetConfiguration.cs
|
||||
? ??? AssetStatistics.cs
|
||||
? ??? AppSettings.cs
|
||||
? ??? MarketPrice.cs
|
||||
? ??? TechnicalIndicators.cs
|
||||
? ??? ...
|
||||
??? Services/
|
||||
? ??? TradingBotService.cs # Core trading logic
|
||||
? ??? SimulatedMarketDataService.cs # Simulazione mercato
|
||||
? ??? SettingsService.cs # Persistenza settings
|
||||
? ??? ITradingStrategy.cs # Interface strategia
|
||||
? ??? SimpleMovingAverageStrategy.cs
|
||||
? ??? TechnicalAnalysis.cs # Calcolo indicatori
|
||||
??? wwwroot/
|
||||
? ??? app.css # Stili globali
|
||||
??? Program.cs # Entry point + DI
|
||||
|
||||
```
|
||||
|
||||
## ?? **STRUTTURA FINALE APPLICAZIONE**
|
||||
|
||||
### **7 Sezioni Principali**
|
||||
|
||||
1. **?? Dashboard** (`/`)
|
||||
- Overview portfolio completo
|
||||
- 4 summary cards con metriche
|
||||
- Top 6 asset attivi
|
||||
- Ultimi 8 trades
|
||||
|
||||
2. **?? Strategie** (`/strategies`)
|
||||
- Gestione strategie di trading
|
||||
- Strategia attiva: RSI + MACD Cross
|
||||
- Template predefiniti
|
||||
- Performance tracking
|
||||
|
||||
3. **?? Asset** (`/assets`) **? NUOVA PAGINA!**
|
||||
- Vista completa tutti i 15 asset
|
||||
- Grid view / List view
|
||||
- Assegnazione strategia per asset
|
||||
- Toggle attivazione
|
||||
- Filtri e ricerca
|
||||
- Metriche real-time
|
||||
|
||||
4. **?? Trading** (`/trading`
|
||||
- Tutti 15 asset in grid
|
||||
- Toggle on/off per ogni asset
|
||||
- Metriche real-time
|
||||
- Tabella operazioni complete
|
||||
|
||||
5. **?? Analisi Mercato** (`/market`)
|
||||
- Grafici interattivi SVG
|
||||
- Indicatori tecnici (RSI, MACD, EMA)
|
||||
- Selector asset
|
||||
- Dati aggiornati ogni 3 secondi
|
||||
|
||||
6. **?? Statistiche** (`/statistics`)
|
||||
- Overview portfolio dettagliato
|
||||
- Breakdown per asset
|
||||
- Best/Worst performers
|
||||
- Analisi P&L completa
|
||||
- Drilldown su singolo asset
|
||||
|
||||
7. **?? Impostazioni** (`/settings`)
|
||||
- Tutte le configurazioni globali
|
||||
- Salvataggio automatico
|
||||
- Notifiche di conferma
|
||||
- Reset a defaults
|
||||
|
||||
|
||||
## ?? Design System
|
||||
|
||||
### Colori
|
||||
- **Primary**: `#6366f1` (Indigo)
|
||||
- **Secondary**: `#8b5cf6` (Purple)
|
||||
- **Success**: `#10b981` (Green)
|
||||
- **Danger**: `#ef4444` (Red)
|
||||
- **Warning**: `#f59e0b` (Amber)
|
||||
- **Background**: `#0a0e27` (Dark Blue)
|
||||
|
||||
### Typography
|
||||
- **Headers**: System Font Stack
|
||||
- **Monospace**: Courier New (per valori numerici)
|
||||
|
||||
## ?? Configurazione
|
||||
|
||||
Le impostazioni vengono salvate automaticamente in:
|
||||
```
|
||||
%LocalAppData%/TradingBot/appsettings.json
|
||||
```
|
||||
|
||||
### Esempio appsettings.json
|
||||
```json
|
||||
{
|
||||
"SimulationMode": true,
|
||||
"DesktopNotifications": false,
|
||||
"AutoStartBot": true,
|
||||
"ConfirmManualTrades": false,
|
||||
"UpdateIntervalSeconds": 3,
|
||||
"LogLevel": "Info",
|
||||
"SidebarCollapsed": false
|
||||
}
|
||||
```
|
||||
|
||||
## ?? Indicatori Tecnici Implementati
|
||||
|
||||
### RSI (Relative Strength Index)
|
||||
- **Periodo**: 14
|
||||
- **Overbought**: > 70
|
||||
- **Oversold**: < 30
|
||||
- **Neutro**: 30-70
|
||||
|
||||
### MACD (Moving Average Convergence Divergence)
|
||||
- **Fast EMA**: 12 periodi
|
||||
- **Slow EMA**: 26 periodi
|
||||
- **Signal**: 9 periodi
|
||||
- **Histogram**: MACD - Signal
|
||||
|
||||
### EMA (Exponential Moving Average)
|
||||
- **EMA 12**: Media breve termine
|
||||
- **EMA 26**: Media lungo termine
|
||||
|
||||
## ?? Strategia di Trading
|
||||
|
||||
### Condizioni BUY
|
||||
- RSI < 40 (asset ipervenduto)
|
||||
- MACD Histogram > 0 (momentum positivo)
|
||||
- Budget disponibile >= MinTradeAmount
|
||||
|
||||
### Condizioni SELL
|
||||
- RSI > 60 (asset ipercomprato)
|
||||
- MACD Histogram < 0 (momentum negativo)
|
||||
- Holdings > 0
|
||||
- **Oppure**:
|
||||
- Profitto >= Take Profit (10%)
|
||||
- Perdita >= Stop Loss (5%)
|
||||
|
||||
### Risk Management
|
||||
- **Max Daily Trades**: 50 per asset
|
||||
- **Max Position Size**: $5000 per asset
|
||||
- **Min Trade Amount**: $10
|
||||
- **Trade Size**: 30% del balance disponibile (max)
|
||||
- **Min Interval**: 10 secondi tra trades
|
||||
|
||||
## ?? Aggiornamenti Real-time
|
||||
|
||||
- **Prezzi**: Ogni 3 secondi (configurabile)
|
||||
- **Indicatori**: Calcolati ad ogni aggiornamento prezzo
|
||||
- **Stats Portfolio**: Aggiornate ad ogni trade
|
||||
- **UI**: SignalR per aggiornamenti istantanei
|
||||
|
||||
## ?? Responsive Breakpoints
|
||||
|
||||
- **Desktop**: > 1024px (full features)
|
||||
- **Tablet**: 768px - 1024px (layout adattato)
|
||||
- **Mobile**: < 768px (sidebar collapsible automatico)
|
||||
|
||||
## ?? Debug & Logging
|
||||
|
||||
I log vengono stampati nella console del browser e nel terminal di Visual Studio.
|
||||
|
||||
Livelli disponibili:
|
||||
- **Error**: Solo errori critici
|
||||
- **Warning**: Warning e errori
|
||||
- **Info**: Informazioni generali (default)
|
||||
- **Debug**: Dettagli completi per debugging
|
||||
|
||||
## ?? Note Importanti
|
||||
|
||||
1. **Modalità Simulazione**: Sempre attiva, dati non reali
|
||||
2. **Dati Persistenti**: Solo impostazioni, non trades storici
|
||||
3. **Reset Dati**: Riavvio applicazione = reset portfolio
|
||||
4. **Performance**: Ottimizzata per 15 asset simultanei
|
||||
|
||||
## ?? Future Enhancements
|
||||
|
||||
- [ ] Backtesting su dati storici
|
||||
- [ ] Multi-strategy support
|
||||
- [ ] Export/import configurazioni
|
||||
- [ ] Alert system con notifiche
|
||||
- [ ] Paper trading con dati reali
|
||||
- [ ] Machine learning per ottimizzazione strategie
|
||||
|
||||
## ????? Sviluppatore
|
||||
|
||||
**Alberto** - Encelado Project
|
||||
|
||||
## ?? Licenza
|
||||
|
||||
Progetto privato - Tutti i diritti riservati
|
||||
|
||||
---
|
||||
|
||||
**Note**: Questa è un'applicazione di simulazione a scopo educativo. Non utilizzare con denaro reale senza test approfonditi e comprensione completa dei rischi del trading.
|
||||
@@ -1,271 +0,0 @@
|
||||
# ?? DEBUG - Sidebar Collapse Toggle
|
||||
|
||||
## Problema Riportato
|
||||
Il pulsante per ridurre la sidebar a sole icone non funziona.
|
||||
|
||||
## Modifiche Applicate
|
||||
|
||||
### 1. **MainLayout.razor** - Migliorato Toggle
|
||||
```csharp
|
||||
private void ToggleSidebar()
|
||||
{
|
||||
sidebarCollapsed = !sidebarCollapsed;
|
||||
SettingsService.UpdateSetting(nameof(AppSettings.SidebarCollapsed), sidebarCollapsed);
|
||||
StateHasChanged(); // ? AGGIUNTO: Force immediate UI update
|
||||
Console.WriteLine($"Sidebar toggled: collapsed={sidebarCollapsed}"); // ? AGGIUNTO: Debug log
|
||||
}
|
||||
```
|
||||
|
||||
**Cosa fa**:
|
||||
- ? Forza il re-render immediato con `StateHasChanged()`
|
||||
- ? Log nella console per debug
|
||||
- ? Salva lo stato nelle impostazioni
|
||||
|
||||
### 2. **MainLayout.razor.css** - CSS Collapsed State
|
||||
```css
|
||||
::deep .trading-bot-layout.collapsed .sidebar-brand {
|
||||
padding: 1.5rem 0.75rem !important;
|
||||
justify-content: center !important;
|
||||
}
|
||||
|
||||
::deep .trading-bot-layout.collapsed .brand-logo {
|
||||
width: 3rem !important;
|
||||
height: 3rem !important;
|
||||
}
|
||||
```
|
||||
|
||||
**Cosa fa**:
|
||||
- ? Riduce padding quando collapsed
|
||||
- ? Centra il logo
|
||||
- ? Riduce dimensione logo
|
||||
|
||||
## Come Testare
|
||||
|
||||
### 1. **Riavvia l'Applicazione**
|
||||
```sh
|
||||
# Stop server
|
||||
Ctrl + C
|
||||
|
||||
# Clean build
|
||||
dotnet clean
|
||||
dotnet build
|
||||
|
||||
# Run
|
||||
dotnet run
|
||||
```
|
||||
|
||||
### 2. **Forza Cache Refresh**
|
||||
```
|
||||
Ctrl + Shift + R (o Ctrl + F5)
|
||||
```
|
||||
|
||||
### 3. **Test del Button**
|
||||
1. Apri l'applicazione
|
||||
2. Click sul pulsante `[?]` in alto a destra nella sidebar
|
||||
3. Verifica che:
|
||||
- La sidebar si riduca a ~80px
|
||||
- Rimangano solo le icone
|
||||
- Il logo si ridimensioni
|
||||
- L'area contenuto si espanda
|
||||
|
||||
### 4. **Verifica Console**
|
||||
Apri DevTools (F12) ? Console
|
||||
|
||||
Dovresti vedere:
|
||||
```
|
||||
Sidebar toggled: collapsed=true (quando minimizzi)
|
||||
Sidebar toggled: collapsed=false (quando espandi)
|
||||
```
|
||||
|
||||
## Comportamento Atteso
|
||||
|
||||
### Expanded (280px)
|
||||
```
|
||||
????????????????????????????
|
||||
? [??] TradingBot [?] ? ? Button qui
|
||||
? ? ATTIVO ?
|
||||
????????????????????????????
|
||||
? ?? Dashboard ?
|
||||
? ?? Strategie ?
|
||||
? ?? Asset ?
|
||||
? ... ?
|
||||
????????????????????????????
|
||||
```
|
||||
|
||||
### Collapsed (80px)
|
||||
```
|
||||
???????
|
||||
? [??]? ? Logo centrato
|
||||
? ?
|
||||
???????
|
||||
? ?? ? ? Solo icone
|
||||
? ?? ? centrate
|
||||
? ?? ?
|
||||
? ... ?
|
||||
???????
|
||||
```
|
||||
|
||||
## Debug Checklist
|
||||
|
||||
Se il button ancora non funziona:
|
||||
|
||||
- [ ] Build riuscito senza errori?
|
||||
- [ ] Cache browser pulita (Ctrl+Shift+R)?
|
||||
- [ ] Console mostra i log "Sidebar toggled"?
|
||||
- [ ] Ispeziona elemento: classe "collapsed" viene applicata al container?
|
||||
- [ ] CSS caricato correttamente (verifica in Network tab)?
|
||||
|
||||
## Verifica con DevTools
|
||||
|
||||
### 1. Ispeziona il Container
|
||||
```
|
||||
F12 ? Elements tab
|
||||
Cerca: <div class="trading-bot-layout ...">
|
||||
```
|
||||
|
||||
**Quando Expanded**:
|
||||
```html
|
||||
<div class="trading-bot-layout expanded">
|
||||
```
|
||||
|
||||
**Quando Collapsed**:
|
||||
```html
|
||||
<div class="trading-bot-layout collapsed">
|
||||
```
|
||||
|
||||
### 2. Verifica CSS Applicato
|
||||
```
|
||||
Click su .modern-sidebar
|
||||
Guarda tab "Computed" ? width
|
||||
```
|
||||
|
||||
**Expanded**: `width: 280px`
|
||||
**Collapsed**: `width: 80px`
|
||||
|
||||
### 3. Verifica Button Click
|
||||
```
|
||||
Console tab
|
||||
Click sul button [?]
|
||||
```
|
||||
|
||||
**Output atteso**:
|
||||
```
|
||||
Sidebar toggled: collapsed=true
|
||||
```
|
||||
|
||||
## Possibili Cause se Non Funziona
|
||||
|
||||
### 1. CSS Non Caricato
|
||||
**Sintomo**: Button visibile ma sidebar non cambia dimensione
|
||||
|
||||
**Soluzione**:
|
||||
```sh
|
||||
dotnet clean
|
||||
dotnet build
|
||||
Ctrl + Shift + R nel browser
|
||||
```
|
||||
|
||||
### 2. JavaScript/SignalR Bloccato
|
||||
**Sintomo**: Click non produce effetto, nessun log
|
||||
|
||||
**Soluzione**:
|
||||
```
|
||||
F12 ? Console ? Cerca errori
|
||||
Riavvia server Blazor
|
||||
```
|
||||
|
||||
### 3. Settings Service Non Salva
|
||||
**Sintomo**: Toggle funziona ma non persiste al reload
|
||||
|
||||
**Soluzione**:
|
||||
Verifica file:
|
||||
```
|
||||
%LocalAppData%/TradingBot/appsettings.json
|
||||
```
|
||||
|
||||
Cerca proprietà:
|
||||
```json
|
||||
{
|
||||
"SidebarCollapsed": true/false
|
||||
}
|
||||
```
|
||||
|
||||
### 4. Binding Non Aggiornato
|
||||
**Sintomo**: Classe non cambia nel DOM
|
||||
|
||||
**Soluzione**:
|
||||
Aggiungi nel code block:
|
||||
```csharp
|
||||
protected override void OnAfterRender(bool firstRender)
|
||||
{
|
||||
if (firstRender)
|
||||
{
|
||||
Console.WriteLine($"Initial collapsed state: {sidebarCollapsed}");
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## File Modificati
|
||||
|
||||
1. ? `Components/Layout/MainLayout.razor`
|
||||
- Aggiunto `StateHasChanged()`
|
||||
- Aggiunto debug log
|
||||
|
||||
2. ? `Components/Layout/MainLayout.razor.css`
|
||||
- CSS specifico per collapsed state
|
||||
- Riduzione dimensioni logo
|
||||
|
||||
## Test Manuale Step-by-Step
|
||||
|
||||
1. ? Avvia app: `dotnet run`
|
||||
2. ? Apri browser: `https://localhost:[PORT]`
|
||||
3. ? Hard refresh: `Ctrl + Shift + R`
|
||||
4. ? Apri DevTools: `F12`
|
||||
5. ? Vai su Console tab
|
||||
6. ? Click sul button `[?]`
|
||||
7. ? Verifica log: "Sidebar toggled: collapsed=true"
|
||||
8. ? Verifica visuale: Sidebar si riduce
|
||||
9. ? Click di nuovo: "Sidebar toggled: collapsed=false"
|
||||
10. ? Verifica visuale: Sidebar si espande
|
||||
|
||||
## Expected Log Output
|
||||
|
||||
```
|
||||
// Al caricamento
|
||||
Initial collapsed state: false
|
||||
|
||||
// Click 1 (Minimize)
|
||||
Sidebar toggled: collapsed=true
|
||||
|
||||
// Click 2 (Expand)
|
||||
Sidebar toggled: collapsed=false
|
||||
|
||||
// Click 3 (Minimize)
|
||||
Sidebar toggled: collapsed=true
|
||||
```
|
||||
|
||||
## CSS Transitions
|
||||
|
||||
Con le modifiche applicate, le transizioni dovrebbero essere smooth:
|
||||
|
||||
```css
|
||||
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1) !important;
|
||||
```
|
||||
|
||||
**Durata**: 300ms
|
||||
**Easing**: Smooth cubic-bezier
|
||||
|
||||
## Support
|
||||
|
||||
Se dopo questi passaggi il button ancora non funziona:
|
||||
|
||||
1. ?? Screenshot della sidebar
|
||||
2. ?? Log della Console (F12)
|
||||
3. ?? Ispeziona elemento HTML del container
|
||||
4. ?? Contenuto di appsettings.json
|
||||
|
||||
---
|
||||
|
||||
**Status**: ? Fix Applicato
|
||||
**Build**: ? Successful
|
||||
**Test**: ? Pending User Verification
|
||||
@@ -1,517 +0,0 @@
|
||||
# ?? DEPLOYMENT GUIDE - Unraid + Gitea + Docker
|
||||
|
||||
Guida completa per deployare TradingBot su **Unraid** usando **Gitea** come sistema di controllo versione.
|
||||
|
||||
---
|
||||
|
||||
## ?? PREREQUISITI
|
||||
|
||||
### Su Unraid
|
||||
- ? Docker installato (Community Applications)
|
||||
- ? Gitea installato e configurato
|
||||
- ? Accesso SSH abilitato
|
||||
- ? Portainer installato (opzionale ma consigliato)
|
||||
|
||||
### Sul PC di Sviluppo
|
||||
- ? Git installato
|
||||
- ? Accesso al server Unraid
|
||||
- ? Repository Gitea configurato
|
||||
|
||||
---
|
||||
|
||||
## ?? STEP 1: Configurazione Gitea
|
||||
|
||||
### 1.1 Crea Repository su Gitea
|
||||
|
||||
```sh
|
||||
# Accedi a Gitea (esempio)
|
||||
http://192.168.30.23:3000
|
||||
|
||||
# Crea nuovo repository
|
||||
Nome: TradingBot
|
||||
Descrizione: Automated Crypto Trading Bot
|
||||
Privato: ? (consigliato)
|
||||
```
|
||||
|
||||
### 1.2 Configura Git Remote (già fatto)
|
||||
|
||||
```sh
|
||||
cd /path/to/TradingBot
|
||||
|
||||
# Verifica remote (dovresti già averlo)
|
||||
git remote -v
|
||||
# Output:
|
||||
# origin https://192.168.30.23/Alby96/Encelado (fetch)
|
||||
# origin https://192.168.30.23/Alby96/Encelado (push)
|
||||
|
||||
# Se non configurato:
|
||||
git remote add origin https://192.168.30.23/Alby96/Encelado
|
||||
```
|
||||
|
||||
### 1.3 Push del Codice
|
||||
|
||||
```sh
|
||||
# Commit delle modifiche Docker
|
||||
git add Dockerfile docker-compose.yml .dockerignore
|
||||
git add build-docker.sh build-docker.bat
|
||||
git add UNRAID_DEPLOYMENT.md
|
||||
|
||||
git commit -m "Add Docker support and Unraid deployment"
|
||||
|
||||
# Push su Gitea
|
||||
git push origin main
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ?? STEP 2: Deployment su Unraid
|
||||
|
||||
### Metodo A: Via Portainer (CONSIGLIATO)
|
||||
|
||||
#### 2.1 Accedi a Portainer
|
||||
```
|
||||
http://[UNRAID-IP]:9000
|
||||
```
|
||||
|
||||
#### 2.2 Crea Stack
|
||||
1. **Stacks** ? **Add stack**
|
||||
2. **Name**: `tradingbot`
|
||||
3. **Build method**: `Git Repository`
|
||||
4. **Repository URL**: `https://192.168.30.23/Alby96/Encelado`
|
||||
5. **Repository reference**: `refs/heads/main`
|
||||
6. **Compose path**: `TradingBot/docker-compose.yml`
|
||||
7. **Authentication**:
|
||||
- Username: `Alby96`
|
||||
- Personal access token: (crea su Gitea)
|
||||
|
||||
#### 2.3 Environment Variables (opzionali)
|
||||
```
|
||||
TZ=Europe/Rome
|
||||
ASPNETCORE_ENVIRONMENT=Production
|
||||
```
|
||||
|
||||
#### 2.4 Deploy
|
||||
Click **Deploy the stack**
|
||||
|
||||
---
|
||||
|
||||
### Metodo B: Via SSH + Docker Compose
|
||||
|
||||
#### 2.1 Connettiti a Unraid via SSH
|
||||
|
||||
```sh
|
||||
ssh root@[UNRAID-IP]
|
||||
```
|
||||
|
||||
#### 2.2 Crea Directory Progetto
|
||||
|
||||
```sh
|
||||
# Vai nella directory appropriata
|
||||
cd /mnt/user/appdata/
|
||||
|
||||
# Crea directory per TradingBot
|
||||
mkdir -p tradingbot
|
||||
cd tradingbot
|
||||
```
|
||||
|
||||
#### 2.3 Clone Repository da Gitea
|
||||
|
||||
```sh
|
||||
# Clone del repository
|
||||
git clone https://192.168.30.23/Alby96/Encelado.git .
|
||||
|
||||
# Entra nella directory del progetto
|
||||
cd TradingBot
|
||||
```
|
||||
|
||||
#### 2.4 Build e Run
|
||||
|
||||
```sh
|
||||
# Build immagine Docker
|
||||
docker-compose build
|
||||
|
||||
# Avvia container
|
||||
docker-compose up -d
|
||||
|
||||
# Verifica logs
|
||||
docker-compose logs -f
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Metodo C: Via Unraid Docker Template
|
||||
|
||||
#### 2.1 Crea Template Personalizzato
|
||||
|
||||
Crea file: `/boot/config/plugins/dockerMan/templates-user/my-TradingBot.xml`
|
||||
|
||||
```xml
|
||||
<?xml version="1.0"?>
|
||||
<Container version="2">
|
||||
<Name>TradingBot</Name>
|
||||
<Repository>tradingbot:latest</Repository>
|
||||
<Registry>https://192.168.30.23:5000/</Registry>
|
||||
<Network>bridge</Network>
|
||||
<MyIP/>
|
||||
<Shell>sh</Shell>
|
||||
<Privileged>false</Privileged>
|
||||
<Support>https://192.168.30.23/Alby96/Encelado</Support>
|
||||
<Project>https://192.168.30.23/Alby96/Encelado</Project>
|
||||
<Overview>Automated Crypto Trading Bot con strategie personalizzabili</Overview>
|
||||
<Category>Tools:</Category>
|
||||
<WebUI>http://[IP]:[PORT:8080]</WebUI>
|
||||
<TemplateURL/>
|
||||
<Icon>https://raw.githubusercontent.com/docker-library/docs/master/dotnet/logo.png</Icon>
|
||||
<ExtraParams/>
|
||||
<PostArgs/>
|
||||
<CPUset/>
|
||||
<DateInstalled>1234567890</DateInstalled>
|
||||
<DonateText/>
|
||||
<DonateLink/>
|
||||
<Requires/>
|
||||
<Config Name="WebUI Port" Target="8080" Default="8080" Mode="tcp" Description="Port per accedere alla WebUI" Type="Port" Display="always" Required="true" Mask="false">8080</Config>
|
||||
<Config Name="Data Volume" Target="/app/data" Default="/mnt/user/appdata/tradingbot/data" Mode="rw" Description="Volume per dati persistenti" Type="Path" Display="always" Required="true" Mask="false">/mnt/user/appdata/tradingbot/data</Config>
|
||||
<Config Name="Timezone" Target="TZ" Default="Europe/Rome" Mode="" Description="Timezone" Type="Variable" Display="always" Required="false" Mask="false">Europe/Rome</Config>
|
||||
</Container>
|
||||
```
|
||||
|
||||
#### 2.2 Usa Template da Unraid UI
|
||||
1. Docker ? Add Container
|
||||
2. Select: `TradingBot`
|
||||
3. Configure ports and volumes
|
||||
4. Apply
|
||||
|
||||
---
|
||||
|
||||
## ?? STEP 3: Aggiornamenti Automatici
|
||||
|
||||
### 3.1 Setup Webhook su Gitea (opzionale)
|
||||
|
||||
#### Su Gitea:
|
||||
```
|
||||
Settings ? Webhooks ? Add Webhook
|
||||
Payload URL: http://[UNRAID-IP]:9000/api/webhooks/[webhook-id]
|
||||
Content type: application/json
|
||||
Events: Push events
|
||||
```
|
||||
|
||||
#### Su Portainer:
|
||||
```
|
||||
Stacks ? tradingbot ? Webhooks ? Create webhook
|
||||
Copia URL generato
|
||||
```
|
||||
|
||||
### 3.2 Script di Aggiornamento Manuale
|
||||
|
||||
```sh
|
||||
#!/bin/bash
|
||||
# update-tradingbot.sh
|
||||
|
||||
cd /mnt/user/appdata/tradingbot/TradingBot
|
||||
|
||||
# Pull latest changes
|
||||
git pull origin main
|
||||
|
||||
# Rebuild
|
||||
docker-compose down
|
||||
docker-compose build
|
||||
docker-compose up -d
|
||||
|
||||
echo "? TradingBot aggiornato!"
|
||||
```
|
||||
|
||||
Salva come: `/root/scripts/update-tradingbot.sh`
|
||||
|
||||
```sh
|
||||
chmod +x /root/scripts/update-tradingbot.sh
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ?? STEP 4: Monitoraggio e Gestione
|
||||
|
||||
### 4.1 Verifica Status Container
|
||||
|
||||
```sh
|
||||
# Via SSH
|
||||
docker ps | grep tradingbot
|
||||
|
||||
# Logs
|
||||
docker logs tradingbot -f
|
||||
|
||||
# Stats
|
||||
docker stats tradingbot
|
||||
```
|
||||
|
||||
### 4.2 Accesso WebUI
|
||||
|
||||
```
|
||||
http://[UNRAID-IP]:8080
|
||||
```
|
||||
|
||||
### 4.3 Health Check
|
||||
|
||||
```sh
|
||||
curl http://[UNRAID-IP]:8080/health
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ?? STEP 5: Configurazione Avanzata
|
||||
|
||||
### 5.1 Reverse Proxy (opzionale)
|
||||
|
||||
Se usi **Nginx Proxy Manager** o **Traefik**:
|
||||
|
||||
#### docker-compose.yml aggiornato:
|
||||
```yaml
|
||||
services:
|
||||
tradingbot:
|
||||
# ... altre configurazioni
|
||||
labels:
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.routers.tradingbot.rule=Host(`trading.tuodominio.com`)"
|
||||
- "traefik.http.services.tradingbot.loadbalancer.server.port=8080"
|
||||
networks:
|
||||
- traefik_proxy
|
||||
- tradingbot-network
|
||||
|
||||
networks:
|
||||
traefik_proxy:
|
||||
external: true
|
||||
```
|
||||
|
||||
### 5.2 Backup Automatico
|
||||
|
||||
Script backup: `/root/scripts/backup-tradingbot.sh`
|
||||
|
||||
```sh
|
||||
#!/bin/bash
|
||||
BACKUP_DIR="/mnt/user/backups/tradingbot"
|
||||
DATE=$(date +%Y%m%d_%H%M%S)
|
||||
|
||||
mkdir -p $BACKUP_DIR
|
||||
|
||||
# Backup volume dati
|
||||
docker run --rm \
|
||||
-v tradingbot_tradingbot-data:/data \
|
||||
-v $BACKUP_DIR:/backup \
|
||||
alpine tar czf /backup/tradingbot-data-$DATE.tar.gz -C /data .
|
||||
|
||||
echo "? Backup completato: tradingbot-data-$DATE.tar.gz"
|
||||
|
||||
# Mantieni solo ultimi 7 backup
|
||||
find $BACKUP_DIR -name "tradingbot-data-*.tar.gz" -mtime +7 -delete
|
||||
```
|
||||
|
||||
Aggiungi a crontab:
|
||||
```sh
|
||||
crontab -e
|
||||
# Backup giornaliero alle 3 AM
|
||||
0 3 * * * /root/scripts/backup-tradingbot.sh
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ?? TROUBLESHOOTING
|
||||
|
||||
### Container non si avvia
|
||||
|
||||
```sh
|
||||
# Check logs
|
||||
docker logs tradingbot
|
||||
|
||||
# Check network
|
||||
docker network ls
|
||||
docker network inspect tradingbot_tradingbot-network
|
||||
|
||||
# Rebuild da zero
|
||||
docker-compose down -v
|
||||
docker-compose build --no-cache
|
||||
docker-compose up -d
|
||||
```
|
||||
|
||||
### Problemi di permessi
|
||||
|
||||
```sh
|
||||
# Fix ownership
|
||||
docker exec tradingbot chown -R tradingbot:tradingbot /app/data
|
||||
```
|
||||
|
||||
### Porta già in uso
|
||||
|
||||
```sh
|
||||
# Trova processo che usa porta 8080
|
||||
netstat -tulpn | grep 8080
|
||||
|
||||
# Cambia porta in docker-compose.yml
|
||||
ports:
|
||||
- "8081:8080" # Usa 8081 invece
|
||||
```
|
||||
|
||||
### Out of Memory
|
||||
|
||||
Aumenta limits in docker-compose.yml:
|
||||
```yaml
|
||||
deploy:
|
||||
resources:
|
||||
limits:
|
||||
memory: 2G # Da 1G a 2G
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ?? STEP 6: Registry Privato (opzionale)
|
||||
|
||||
### 6.1 Setup Docker Registry su Unraid
|
||||
|
||||
```sh
|
||||
docker run -d \
|
||||
-p 5000:5000 \
|
||||
--restart=always \
|
||||
--name registry \
|
||||
-v /mnt/user/appdata/registry:/var/lib/registry \
|
||||
registry:2
|
||||
```
|
||||
|
||||
### 6.2 Build e Push
|
||||
|
||||
```sh
|
||||
# Tag image
|
||||
docker tag tradingbot:latest 192.168.30.23:5000/tradingbot:latest
|
||||
|
||||
# Push to registry
|
||||
docker push 192.168.30.23:5000/tradingbot:latest
|
||||
```
|
||||
|
||||
### 6.3 Deploy da Registry
|
||||
|
||||
```yaml
|
||||
# docker-compose.yml
|
||||
services:
|
||||
tradingbot:
|
||||
image: 192.168.30.23:5000/tradingbot:latest
|
||||
# ... resto configurazione
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ?? SECURITY BEST PRACTICES
|
||||
|
||||
### 1. Non esporre porte pubblicamente
|
||||
```sh
|
||||
# Usa solo rete interna Unraid
|
||||
# Accesso via VPN o Wireguard
|
||||
```
|
||||
|
||||
### 2. SSL/TLS
|
||||
```sh
|
||||
# Usa reverse proxy con certificati SSL
|
||||
# Let's Encrypt via Nginx Proxy Manager
|
||||
```
|
||||
|
||||
### 3. Credenziali
|
||||
```sh
|
||||
# Non committare secrets in Git
|
||||
# Usa Docker secrets o environment variables
|
||||
```
|
||||
|
||||
### 4. Firewall
|
||||
```sh
|
||||
# Limita accesso solo a IP fidati
|
||||
# Configura in Unraid Settings ? Network
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ?? MONITORING
|
||||
|
||||
### Grafana + Prometheus (opzionale)
|
||||
|
||||
```yaml
|
||||
# monitoring-stack.yml
|
||||
version: '3.8'
|
||||
services:
|
||||
prometheus:
|
||||
image: prom/prometheus
|
||||
volumes:
|
||||
- ./prometheus.yml:/etc/prometheus/prometheus.yml
|
||||
ports:
|
||||
- "9090:9090"
|
||||
|
||||
grafana:
|
||||
image: grafana/grafana
|
||||
ports:
|
||||
- "3001:3000"
|
||||
volumes:
|
||||
- grafana-data:/var/lib/grafana
|
||||
|
||||
volumes:
|
||||
grafana-data:
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ?? CHECKLIST DEPLOYMENT
|
||||
|
||||
### Pre-Deployment
|
||||
- [ ] Codice committed su Gitea
|
||||
- [ ] Dockerfile testato localmente
|
||||
- [ ] docker-compose.yml configurato
|
||||
- [ ] .dockerignore presente
|
||||
- [ ] Environment variables definite
|
||||
|
||||
### Deployment
|
||||
- [ ] Repository clonato su Unraid
|
||||
- [ ] Docker image built
|
||||
- [ ] Container avviato correttamente
|
||||
- [ ] WebUI accessibile
|
||||
- [ ] Health check passing
|
||||
|
||||
### Post-Deployment
|
||||
- [ ] Logs verificati (no errori)
|
||||
- [ ] Dati persistono dopo restart
|
||||
- [ ] Backup configurato
|
||||
- [ ] Monitoring attivo
|
||||
- [ ] Documentazione aggiornata
|
||||
|
||||
---
|
||||
|
||||
## ?? COMANDI UTILI
|
||||
|
||||
```sh
|
||||
# Build
|
||||
./build-docker.sh [tag]
|
||||
|
||||
# Start
|
||||
docker-compose up -d
|
||||
|
||||
# Stop
|
||||
docker-compose down
|
||||
|
||||
# Logs
|
||||
docker-compose logs -f
|
||||
|
||||
# Restart
|
||||
docker-compose restart
|
||||
|
||||
# Update
|
||||
git pull && docker-compose up -d --build
|
||||
|
||||
# Clean
|
||||
docker-compose down -v
|
||||
docker system prune -a
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ?? RISORSE
|
||||
|
||||
- **Unraid Docs**: https://docs.unraid.net/
|
||||
- **Docker Docs**: https://docs.docker.com/
|
||||
- **Gitea Docs**: https://docs.gitea.io/
|
||||
- **Portainer Docs**: https://docs.portainer.io/
|
||||
|
||||
---
|
||||
|
||||
**?? Deployment completato! Il tuo TradingBot è ora in produzione su Unraid!**
|
||||
43
TradingBot/organize-docs.ps1
Normal file
43
TradingBot/organize-docs.ps1
Normal file
@@ -0,0 +1,43 @@
|
||||
# ?? Documentation Organization Script
|
||||
# Run this script to organize all documentation files
|
||||
|
||||
$docs = "docs"
|
||||
|
||||
# Create directory structure
|
||||
$directories = @(
|
||||
"installation",
|
||||
"architecture",
|
||||
"deployment",
|
||||
"configuration",
|
||||
"trading",
|
||||
"development",
|
||||
"troubleshooting",
|
||||
"verification",
|
||||
"api"
|
||||
)
|
||||
|
||||
foreach ($dir in $directories) {
|
||||
New-Item -ItemType Directory -Force -Path "$docs\$dir"
|
||||
}
|
||||
|
||||
# Move files to appropriate directories
|
||||
Write-Host "Moving documentation files..."
|
||||
|
||||
# Deployment docs
|
||||
Move-Item -Path "DOCKER_QUICKSTART.md" -Destination "$docs\deployment\" -Force
|
||||
Move-Item -Path "UNRAID_DEPLOYMENT.md" -Destination "$docs\deployment\" -Force
|
||||
Move-Item -Path "DOCKER_BUILD_TEST.md" -Destination "$docs\deployment\" -Force
|
||||
|
||||
# Development docs
|
||||
Move-Item -Path "GIT_WORKFLOW.md" -Destination "$docs\development\" -Force
|
||||
Move-Item -Path "COMMIT_CHECKLIST.md" -Destination "$docs\development\" -Force
|
||||
|
||||
# Troubleshooting docs
|
||||
Move-Item -Path "BROWSER_CACHE_GUIDE.md" -Destination "$docs\troubleshooting\" -Force
|
||||
Move-Item -Path "SIDEBAR_TOGGLE_DEBUG.md" -Destination "$docs\troubleshooting\" -Force
|
||||
|
||||
# Verification docs
|
||||
Move-Item -Path "FINAL_VERIFICATION.md" -Destination "$docs\verification\" -Force
|
||||
|
||||
Write-Host "? Documentation organized!"
|
||||
Write-Host "See docs/README.md for index"
|
||||
31
TradingBot/organize-docs.sh
Normal file
31
TradingBot/organize-docs.sh
Normal file
@@ -0,0 +1,31 @@
|
||||
#!/bin/bash
|
||||
# Documentation Organization Script
|
||||
# Run this to organize all documentation files
|
||||
|
||||
DOCS="docs"
|
||||
|
||||
# Create directory structure
|
||||
echo "Creating directory structure..."
|
||||
mkdir -p "$DOCS"/{installation,architecture,deployment,configuration,trading,development,troubleshooting,verification,api}
|
||||
|
||||
# Move files to appropriate directories
|
||||
echo "Moving documentation files..."
|
||||
|
||||
# Deployment docs
|
||||
mv DOCKER_QUICKSTART.md "$DOCS/deployment/" 2>/dev/null
|
||||
mv UNRAID_DEPLOYMENT.md "$DOCS/deployment/" 2>/dev/null
|
||||
mv DOCKER_BUILD_TEST.md "$DOCS/deployment/" 2>/dev/null
|
||||
|
||||
# Development docs
|
||||
mv GIT_WORKFLOW.md "$DOCS/development/" 2>/dev/null
|
||||
mv COMMIT_CHECKLIST.md "$DOCS/development/" 2>/dev/null
|
||||
|
||||
# Troubleshooting docs
|
||||
mv BROWSER_CACHE_GUIDE.md "$DOCS/troubleshooting/" 2>/dev/null
|
||||
mv SIDEBAR_TOGGLE_DEBUG.md "$DOCS/troubleshooting/" 2>/dev/null
|
||||
|
||||
# Verification docs
|
||||
mv FINAL_VERIFICATION.md "$DOCS/verification/" 2>/dev/null
|
||||
|
||||
echo "? Documentation organized!"
|
||||
echo "See docs/README.md for index"
|
||||
Reference in New Issue
Block a user