-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdeploy_production.sh
More file actions
executable file
·321 lines (267 loc) · 9.34 KB
/
deploy_production.sh
File metadata and controls
executable file
·321 lines (267 loc) · 9.34 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
#!/bin/bash
# AlphaBeta808 Trading Bot - Production Deployment Script
# Complete production deployment with monitoring and verification
set -e
echo "🚀 AlphaBeta808 Trading Bot - Production Deployment"
echo "=================================================="
# Couleurs pour les messages
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m'
log_info() {
echo -e "${BLUE}[INFO]${NC} $1"
}
log_success() {
echo -e "${GREEN}[SUCCESS]${NC} $1"
}
log_warning() {
echo -e "${YELLOW}[WARNING]${NC} $1"
}
log_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
# Variables
DEPLOYMENT_MODE=${1:-docker} # docker ou kubernetes
VERSION=${2:-latest}
# Vérifier les prérequis
check_prerequisites() {
log_info "Vérification des prérequis..."
# Vérifier que nous sommes dans le bon répertoire
if [ ! -f "trader_config.json" ]; then
log_error "Veuillez exécuter ce script depuis le répertoire racine d'AlphaBeta808Trading"
exit 1
fi
# Vérifier les fichiers de configuration
if [ ! -f ".env" ]; then
log_error "Fichier .env manquant. Exécutez setup_production.sh d'abord"
exit 1
fi
# Vérifier la configuration des clés API
if grep -q "your_binance_api_key_here" .env; then
log_error "Veuillez configurer vos clés API Binance dans le fichier .env"
exit 1
fi
log_success "Prérequis vérifiés"
}
# Test du système
test_system() {
log_info "Test du système complet..."
# Activer l'environnement virtuel
if [ -d "trading_env" ]; then
source trading_env/bin/activate
fi
# Exécuter les tests de vérification
python system_verification.py
if [ $? -eq 0 ]; then
log_success "Système vérifié avec succès"
else
log_error "Le système a échoué aux tests de vérification"
exit 1
fi
}
# Déploiement Docker
deploy_docker() {
log_info "Déploiement avec Docker Compose..."
# Construire l'image
log_info "Construction de l'image Docker..."
docker build -t alphabeta808/trading-bot:$VERSION .
# Démarrer les services
log_info "Démarrage des services..."
docker-compose down || true
docker-compose up -d
# Attendre que les services soient prêts
log_info "Attente du démarrage des services..."
sleep 30
# Vérifier que les services sont en cours d'exécution
if docker-compose ps | grep -q "Up"; then
log_success "Services Docker démarrés avec succès"
else
log_error "Échec du démarrage des services Docker"
docker-compose logs
exit 1
fi
# Test de connectivité
log_info "Test de connectivité..."
max_attempts=10
attempt=1
while [ $attempt -le $max_attempts ]; do
if curl -f http://localhost:5000/api/system/status > /dev/null 2>&1; then
log_success "Interface web accessible"
break
else
log_info "Tentative $attempt/$max_attempts - En attente de l'interface web..."
sleep 10
attempt=$((attempt + 1))
fi
done
if [ $attempt -gt $max_attempts ]; then
log_error "Interface web non accessible après $max_attempts tentatives"
exit 1
fi
}
# Déploiement Kubernetes
deploy_kubernetes() {
log_info "Déploiement sur Kubernetes..."
# Vérifier kubectl
if ! command -v kubectl &> /dev/null; then
log_error "kubectl non trouvé. Veuillez l'installer pour le déploiement Kubernetes"
exit 1
fi
# Vérifier la connexion au cluster
if ! kubectl cluster-info &> /dev/null; then
log_error "Pas de connexion au cluster Kubernetes"
exit 1
fi
# Exécuter le script de déploiement Kubernetes
cd k8s
./deploy.sh $VERSION
cd ..
log_success "Déploiement Kubernetes terminé"
}
# Configuration du monitoring
setup_monitoring() {
log_info "Configuration du monitoring..."
# Créer le répertoire des logs s'il n'existe pas
mkdir -p logs
# Démarrer le monitoring en arrière-plan
if [ "$DEPLOYMENT_MODE" = "docker" ]; then
# Le monitoring est inclus dans docker-compose.yml
log_success "Monitoring configuré avec Docker Compose"
log_info "Accès Grafana: http://localhost:3000 (admin/admin123)"
log_info "Accès Prometheus: http://localhost:9090"
else
log_info "Monitoring Kubernetes configuré via monitoring.yaml"
fi
}
# Vérification post-déploiement
post_deployment_checks() {
log_info "Vérifications post-déploiement..."
# Liste des endpoints à vérifier
if [ "$DEPLOYMENT_MODE" = "docker" ]; then
endpoints=(
"http://localhost:5000/api/system/status"
"http://localhost:5000/api/bot/status"
"http://localhost:3000" # Grafana
"http://localhost:9090" # Prometheus
)
else
# Pour Kubernetes, adapter selon votre configuration d'ingress
endpoints=(
"http://localhost:5000/api/system/status"
)
fi
for endpoint in "${endpoints[@]}"; do
if curl -f "$endpoint" > /dev/null 2>&1; then
log_success "✅ $endpoint"
else
log_warning "⚠️ $endpoint non accessible"
fi
done
# Vérifier les logs pour des erreurs
log_info "Vérification des logs..."
if [ -f "logs/continuous_trader.log" ]; then
error_count=$(grep -c "ERROR" logs/continuous_trader.log || echo "0")
if [ "$error_count" -gt 0 ]; then
log_warning "$error_count erreurs trouvées dans les logs"
else
log_success "Aucune erreur dans les logs"
fi
fi
}
# Affichage des informations de connexion
show_connection_info() {
echo ""
echo "🎉 Déploiement terminé avec succès!"
echo "=================================="
echo ""
log_info "Informations de connexion:"
if [ "$DEPLOYMENT_MODE" = "docker" ]; then
echo " 📊 Interface Web: http://localhost:5000"
echo " 📈 Grafana: http://localhost:3000 (admin/admin123)"
echo " 🔍 Prometheus: http://localhost:9090"
echo " 🗄️ Redis: localhost:6379"
else
echo " 📊 Interface Web: http://localhost:5000 (via port-forward)"
echo " 🏗️ Cluster: kubectl get pods -n alphabeta808-trading"
fi
echo ""
log_info "Commandes utiles:"
echo " 📋 Voir les logs: docker-compose logs -f (Docker) ou kubectl logs -f deployment/trading-bot -n alphabeta808-trading (K8s)"
echo " 🔄 Redémarrer: docker-compose restart (Docker) ou kubectl rollout restart deployment/trading-bot -n alphabeta808-trading (K8s)"
echo " 📊 Status: curl http://localhost:5000/api/system/status"
echo " 🛑 Arrêter: docker-compose down (Docker) ou k8s/undeploy.sh (K8s)"
echo ""
log_warning "IMPORTANT:"
echo " - Surveillez les logs pour détecter d'éventuels problèmes"
echo " - Configurez des sauvegardes régulières des modèles et données"
echo " - Testez le système avec de petits montants avant la production"
echo " - Surveillez la consommation des ressources"
echo ""
}
# Sauvegarde de sécurité
create_backup() {
log_info "Création d'une sauvegarde de sécurité..."
timestamp=$(date +%Y%m%d_%H%M%S)
backup_dir="backups/deployment_$timestamp"
mkdir -p "$backup_dir"
# Sauvegarder les fichiers critiques
cp -r models_store "$backup_dir/" 2>/dev/null || log_warning "Aucun modèle à sauvegarder"
cp trader_config.json "$backup_dir/"
cp .env "$backup_dir/.env.backup"
# Sauvegarder la base de données si elle existe
if [ -f "trading_web.db" ]; then
cp trading_web.db "$backup_dir/"
fi
log_success "Sauvegarde créée dans $backup_dir"
}
# Script principal
main() {
log_info "Mode de déploiement: $DEPLOYMENT_MODE"
log_info "Version: $VERSION"
echo ""
# Étapes de déploiement
check_prerequisites
create_backup
test_system
case $DEPLOYMENT_MODE in
"docker")
deploy_docker
;;
"kubernetes"|"k8s")
deploy_kubernetes
;;
*)
log_error "Mode de déploiement non supporté: $DEPLOYMENT_MODE"
log_info "Modes disponibles: docker, kubernetes"
exit 1
;;
esac
setup_monitoring
post_deployment_checks
show_connection_info
}
# Gestion des signaux pour un arrêt propre
trap 'log_warning "Interruption détectée, nettoyage..."; exit 1' INT TERM
# Affichage de l'aide
if [ "$1" = "--help" ] || [ "$1" = "-h" ]; then
echo "Usage: $0 [MODE] [VERSION]"
echo ""
echo "MODE:"
echo " docker - Déploiement avec Docker Compose (défaut)"
echo " kubernetes - Déploiement sur Kubernetes"
echo ""
echo "VERSION:"
echo " latest - Version la plus récente (défaut)"
echo " v1.0.0 - Version spécifique"
echo ""
echo "Exemples:"
echo " $0 # Docker avec version latest"
echo " $0 docker v1.0.0 # Docker avec version v1.0.0"
echo " $0 kubernetes # Kubernetes avec version latest"
echo ""
exit 0
fi
# Exécution du script principal
main