- Frontend v4 accessible sur réseau local (192.168.1.40) - Ports ouverts: 3002 (frontend), 5001 (backend), 5004 (dashboard) - Ollama GPU fonctionnel - Self-healing interactif - Dashboard confiance Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
604 lines
12 KiB
Markdown
604 lines
12 KiB
Markdown
# Guide Build & Déploiement - Agent V0 + Serveur
|
|
|
|
**Date:** 24 novembre 2025
|
|
|
|
## 📋 Vue d'Ensemble
|
|
|
|
Ce guide explique comment:
|
|
1. **Builder les exécutables** Windows/macOS/Linux
|
|
2. **Déployer le serveur API** pour recevoir les uploads
|
|
3. **Tester end-to-end** agent → serveur
|
|
|
|
---
|
|
|
|
## 🔨 Part 1: Build des Exécutables
|
|
|
|
### Prérequis
|
|
|
|
**Tous OS:**
|
|
- Python 3.10+
|
|
- pip
|
|
- Git (pour cloner le projet)
|
|
|
|
**Windows:**
|
|
- Visual Studio Build Tools (pour cryptography)
|
|
- Ou: Installer via `pip install cryptography` (binaires pré-compilés)
|
|
|
|
**macOS:**
|
|
- Xcode Command Line Tools: `xcode-select --install`
|
|
|
|
**Linux:**
|
|
- `sudo apt-get install python3-dev libssl-dev`
|
|
|
|
### 1.1 Build Windows (.exe)
|
|
|
|
**Sur une machine Windows:**
|
|
|
|
```cmd
|
|
cd agent_v0
|
|
|
|
REM Méthode 1: Script automatique
|
|
build_windows.bat
|
|
|
|
REM Méthode 2: Manuel
|
|
python -m venv .venv
|
|
.venv\Scripts\activate
|
|
pip install -r requirements.txt
|
|
pip install pyinstaller pywin32
|
|
pyinstaller agent_v0.spec --clean --noconfirm
|
|
```
|
|
|
|
**Résultat:**
|
|
```
|
|
dist/agent_v0.exe (~50-80 MB)
|
|
```
|
|
|
|
**Test:**
|
|
```cmd
|
|
dist\agent_v0.exe
|
|
```
|
|
|
|
### 1.2 Build macOS (.app)
|
|
|
|
**Sur une machine macOS:**
|
|
|
|
```bash
|
|
cd agent_v0
|
|
|
|
# Méthode 1: Script automatique
|
|
./build_macos.sh
|
|
|
|
# Méthode 2: Manuel
|
|
python3 -m venv .venv
|
|
source .venv/bin/activate
|
|
pip install -r requirements.txt
|
|
pip install pyinstaller pyobjc-framework-Cocoa
|
|
pyinstaller agent_v0.spec --clean --noconfirm
|
|
```
|
|
|
|
**Résultat:**
|
|
```
|
|
dist/agent_v0.app/ (~60-90 MB)
|
|
```
|
|
|
|
**Test:**
|
|
```bash
|
|
open dist/agent_v0.app
|
|
```
|
|
|
|
**⚠️ Permissions macOS:**
|
|
|
|
Première exécution → macOS demandera les permissions:
|
|
1. System Preferences > Security & Privacy > Privacy
|
|
2. Accessibility → Cocher `agent_v0`
|
|
3. Screen Recording → Cocher `agent_v0`
|
|
|
|
### 1.3 Build Linux (binaire)
|
|
|
|
**Sur une machine Linux:**
|
|
|
|
```bash
|
|
cd agent_v0
|
|
|
|
# Méthode 1: Script automatique
|
|
./build_linux.sh
|
|
|
|
# Méthode 2: Manuel
|
|
python3 -m venv .venv
|
|
source .venv/bin/activate
|
|
pip install -r requirements.txt
|
|
pip install pyinstaller
|
|
pyinstaller agent_v0.spec --clean --noconfirm
|
|
```
|
|
|
|
**Résultat:**
|
|
```
|
|
dist/agent_v0 (~60-90 MB)
|
|
```
|
|
|
|
**Test:**
|
|
```bash
|
|
./dist/agent_v0
|
|
```
|
|
|
|
**⚠️ Dépendances Linux:**
|
|
```bash
|
|
sudo apt-get install xdotool # Pour détection fenêtre active
|
|
```
|
|
|
|
---
|
|
|
|
## 🚀 Part 2: Déploiement Serveur
|
|
|
|
### 2.1 Installation Serveur
|
|
|
|
**Sur le serveur Linux (où tourne RPA Vision V3):**
|
|
|
|
```bash
|
|
cd /path/to/rpa_vision_v3
|
|
|
|
# Installer dépendances serveur
|
|
pip install -r server/requirements_server.txt
|
|
|
|
# Ou manuellement:
|
|
pip install fastapi uvicorn[standard] python-multipart cryptography
|
|
```
|
|
|
|
### 2.2 Configuration
|
|
|
|
**Définir le password de chiffrement:**
|
|
|
|
```bash
|
|
# Option 1: Variable d'environnement
|
|
export ENCRYPTION_PASSWORD="VotreCléSecrète2025"
|
|
|
|
# Option 2: Fichier .env
|
|
echo 'ENCRYPTION_PASSWORD="VotreCléSecrète2025"' > server/.env
|
|
|
|
# Option 3: Hardcoder dans api_upload.py (pas recommandé)
|
|
# ENCRYPTION_PASSWORD = "VotreCléSecrète2025"
|
|
```
|
|
|
|
**⚠️ Important:** Utiliser le **même password** que dans `agent_config.json` des agents!
|
|
|
|
### 2.3 Démarrage Serveur
|
|
|
|
**Méthode 1: Script automatique**
|
|
```bash
|
|
cd server
|
|
./start_server.sh
|
|
```
|
|
|
|
**Méthode 2: Uvicorn direct**
|
|
```bash
|
|
cd server
|
|
uvicorn api_upload:app --host 0.0.0.0 --port 8000
|
|
```
|
|
|
|
**Méthode 3: Production avec systemd**
|
|
|
|
Créer `/etc/systemd/system/rpa-api.service`:
|
|
```ini
|
|
[Unit]
|
|
Description=RPA Vision V3 - API Upload
|
|
After=network.target
|
|
|
|
[Service]
|
|
Type=simple
|
|
User=rpa
|
|
WorkingDirectory=/path/to/rpa_vision_v3/server
|
|
Environment="ENCRYPTION_PASSWORD=VotreCléSecrète2025"
|
|
ExecStart=/path/to/venv/bin/uvicorn api_upload:app --host 0.0.0.0 --port 8000
|
|
Restart=always
|
|
|
|
[Install]
|
|
WantedBy=multi-user.target
|
|
```
|
|
|
|
Activer:
|
|
```bash
|
|
sudo systemctl daemon-reload
|
|
sudo systemctl enable rpa-api
|
|
sudo systemctl start rpa-api
|
|
sudo systemctl status rpa-api
|
|
```
|
|
|
|
### 2.4 Vérification Serveur
|
|
|
|
**Test status:**
|
|
```bash
|
|
curl http://localhost:8000/api/traces/status
|
|
```
|
|
|
|
**Réponse attendue:**
|
|
```json
|
|
{
|
|
"status": "online",
|
|
"version": "1.0.0",
|
|
"upload_dir": "data/training/uploads",
|
|
"sessions_dir": "data/training/sessions",
|
|
"encryption_enabled": true
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
## 🔗 Part 3: Configuration Agent → Serveur
|
|
|
|
### 3.1 Configurer URL Serveur
|
|
|
|
**Sur chaque agent (Windows/macOS/Linux):**
|
|
|
|
Éditer `agent_config.json`:
|
|
```json
|
|
{
|
|
"enable_encryption": true,
|
|
"encryption_password": "VotreCléSecrète2025",
|
|
"server_url": "https://votre-serveur.com/api/traces/upload"
|
|
}
|
|
```
|
|
|
|
**⚠️ Important:**
|
|
- Utiliser **HTTPS** en production (pas HTTP)
|
|
- Même `encryption_password` que le serveur
|
|
- URL complète avec `/api/traces/upload`
|
|
|
|
### 3.2 Mettre à Jour config.py
|
|
|
|
**Dans `agent_v0/config.py`:**
|
|
|
|
```python
|
|
# Avant (placeholder)
|
|
SERVER_URL = "https://example.com/api/traces/upload"
|
|
|
|
# Après (production)
|
|
SERVER_URL = "https://votre-serveur.com/api/traces/upload"
|
|
```
|
|
|
|
**Ou:** Lire depuis `agent_config.json` (recommandé):
|
|
|
|
```python
|
|
# config.py
|
|
import json
|
|
from pathlib import Path
|
|
|
|
config_file = Path(__file__).parent / "agent_config.json"
|
|
if config_file.exists():
|
|
with open(config_file) as f:
|
|
config = json.load(f)
|
|
SERVER_URL = config.get("server_url", "https://example.com/api/traces/upload")
|
|
else:
|
|
SERVER_URL = "https://example.com/api/traces/upload"
|
|
```
|
|
|
|
---
|
|
|
|
## 🧪 Part 4: Test End-to-End
|
|
|
|
### 4.1 Test Local (même machine)
|
|
|
|
**Terminal 1: Démarrer serveur**
|
|
```bash
|
|
cd server
|
|
./start_server.sh
|
|
```
|
|
|
|
**Terminal 2: Tester agent**
|
|
```bash
|
|
cd agent_v0
|
|
|
|
# Configurer pour local
|
|
echo '{
|
|
"user_id": "test_user",
|
|
"enable_encryption": true,
|
|
"encryption_password": "test_password_123",
|
|
"server_url": "http://localhost:8000/api/traces/upload"
|
|
}' > agent_config.json
|
|
|
|
# Lancer agent
|
|
python main.py
|
|
|
|
# Ou exécutable:
|
|
./dist/agent_v0 # Linux
|
|
open dist/agent_v0.app # macOS
|
|
dist\agent_v0.exe # Windows
|
|
```
|
|
|
|
**Actions:**
|
|
1. Clic gauche sur icône tray → Start session
|
|
2. Faire quelques clics dans des applications
|
|
3. Clic gauche sur icône tray → Stop session
|
|
4. Vérifier upload dans logs
|
|
|
|
**Terminal 3: Vérifier réception**
|
|
```bash
|
|
curl http://localhost:8000/api/traces/sessions
|
|
```
|
|
|
|
### 4.2 Test Production (réseau)
|
|
|
|
**Serveur:**
|
|
```bash
|
|
# Démarrer sur IP publique
|
|
cd server
|
|
export ENCRYPTION_PASSWORD="VotreCléSecrète2025"
|
|
uvicorn api_upload:app --host 0.0.0.0 --port 8000
|
|
```
|
|
|
|
**Agent (machine distante):**
|
|
```json
|
|
{
|
|
"encryption_password": "VotreCléSecrète2025",
|
|
"server_url": "https://votre-serveur.com/api/traces/upload"
|
|
}
|
|
```
|
|
|
|
**Test upload manuel:**
|
|
```bash
|
|
# Créer une session test
|
|
cd agent_v0
|
|
python main.py
|
|
# Start → quelques clics → Stop
|
|
|
|
# Vérifier fichier créé
|
|
ls -lh sessions/*.enc
|
|
|
|
# Upload manuel avec curl
|
|
curl -X POST \
|
|
-F "file=@sessions/sess_xxx.enc" \
|
|
-F "session_id=sess_xxx" \
|
|
https://votre-serveur.com/api/traces/upload
|
|
```
|
|
|
|
---
|
|
|
|
## 📦 Part 5: Distribution aux Formateurs
|
|
|
|
### 5.1 Package Windows
|
|
|
|
**Créer installeur NSIS (optionnel):**
|
|
|
|
```nsis
|
|
; installer.nsi
|
|
!include "MUI2.nsh"
|
|
|
|
Name "Agent V0"
|
|
OutFile "agent_v0_installer.exe"
|
|
InstallDir "$PROGRAMFILES\AgentV0"
|
|
|
|
!insertmacro MUI_PAGE_DIRECTORY
|
|
!insertmacro MUI_PAGE_INSTFILES
|
|
!insertmacro MUI_LANGUAGE "French"
|
|
|
|
Section "Install"
|
|
SetOutPath "$INSTDIR"
|
|
File "dist\agent_v0.exe"
|
|
File "agent_config.json"
|
|
|
|
CreateShortcut "$DESKTOP\Agent V0.lnk" "$INSTDIR\agent_v0.exe"
|
|
CreateShortcut "$SMPROGRAMS\Agent V0.lnk" "$INSTDIR\agent_v0.exe"
|
|
SectionEnd
|
|
```
|
|
|
|
Compiler:
|
|
```cmd
|
|
makensis installer.nsi
|
|
```
|
|
|
|
### 5.2 Package macOS
|
|
|
|
**Créer DMG:**
|
|
```bash
|
|
# Installer create-dmg
|
|
brew install create-dmg
|
|
|
|
# Créer DMG
|
|
create-dmg \
|
|
--volname "Agent V0" \
|
|
--window-pos 200 120 \
|
|
--window-size 600 400 \
|
|
--icon-size 100 \
|
|
--icon "agent_v0.app" 175 120 \
|
|
--app-drop-link 425 120 \
|
|
"agent_v0_installer.dmg" \
|
|
"dist/agent_v0.app"
|
|
```
|
|
|
|
### 5.3 Package Linux
|
|
|
|
**Créer .deb:**
|
|
```bash
|
|
# Structure
|
|
mkdir -p agent_v0_deb/DEBIAN
|
|
mkdir -p agent_v0_deb/usr/local/bin
|
|
mkdir -p agent_v0_deb/usr/share/applications
|
|
|
|
# Control file
|
|
cat > agent_v0_deb/DEBIAN/control << EOF
|
|
Package: agent-v0
|
|
Version: 0.1.0
|
|
Architecture: amd64
|
|
Maintainer: RPA Vision <contact@rpavision.com>
|
|
Description: Agent d'enregistrement pour RPA Vision V3
|
|
Depends: xdotool
|
|
EOF
|
|
|
|
# Copier binaire
|
|
cp dist/agent_v0 agent_v0_deb/usr/local/bin/
|
|
|
|
# Desktop entry
|
|
cat > agent_v0_deb/usr/share/applications/agent_v0.desktop << EOF
|
|
[Desktop Entry]
|
|
Name=Agent V0
|
|
Exec=/usr/local/bin/agent_v0
|
|
Type=Application
|
|
Categories=Utility;
|
|
EOF
|
|
|
|
# Build
|
|
dpkg-deb --build agent_v0_deb
|
|
mv agent_v0_deb.deb agent_v0_0.1.0_amd64.deb
|
|
```
|
|
|
|
---
|
|
|
|
## 🔒 Part 6: Sécurité Production
|
|
|
|
### 6.1 HTTPS (Obligatoire)
|
|
|
|
**Avec Nginx + Let's Encrypt:**
|
|
|
|
```nginx
|
|
# /etc/nginx/sites-available/rpa-api
|
|
server {
|
|
listen 443 ssl http2;
|
|
server_name votre-serveur.com;
|
|
|
|
ssl_certificate /etc/letsencrypt/live/votre-serveur.com/fullchain.pem;
|
|
ssl_certificate_key /etc/letsencrypt/live/votre-serveur.com/privkey.pem;
|
|
|
|
location /api/traces/ {
|
|
proxy_pass http://127.0.0.1:8000;
|
|
proxy_set_header Host $host;
|
|
proxy_set_header X-Real-IP $remote_addr;
|
|
client_max_body_size 100M; # Pour gros uploads
|
|
}
|
|
}
|
|
```
|
|
|
|
### 6.2 Firewall
|
|
|
|
```bash
|
|
# Autoriser seulement HTTPS
|
|
sudo ufw allow 443/tcp
|
|
sudo ufw deny 8000/tcp # Bloquer accès direct à uvicorn
|
|
```
|
|
|
|
### 6.3 Authentification (Optionnel)
|
|
|
|
**Ajouter API key:**
|
|
|
|
```python
|
|
# api_upload.py
|
|
from fastapi import Header, HTTPException
|
|
|
|
API_KEY = os.getenv("API_KEY", "changeme")
|
|
|
|
@app.post("/api/traces/upload")
|
|
async def upload_session(
|
|
file: UploadFile,
|
|
session_id: str,
|
|
x_api_key: str = Header(...)
|
|
):
|
|
if x_api_key != API_KEY:
|
|
raise HTTPException(status_code=401, detail="Invalid API key")
|
|
# ...
|
|
```
|
|
|
|
**Agent:**
|
|
```python
|
|
# uploader.py
|
|
headers = {"X-API-Key": "votre_api_key"}
|
|
resp = requests.post(SERVER_URL, files=files, data=data, headers=headers)
|
|
```
|
|
|
|
---
|
|
|
|
## 📊 Part 7: Monitoring
|
|
|
|
### 7.1 Logs Serveur
|
|
|
|
```bash
|
|
# Logs en temps réel
|
|
tail -f /var/log/rpa-api.log
|
|
|
|
# Ou avec systemd
|
|
journalctl -u rpa-api -f
|
|
```
|
|
|
|
### 7.2 Statistiques
|
|
|
|
**Endpoint stats (à ajouter):**
|
|
```python
|
|
@app.get("/api/traces/stats")
|
|
async def get_stats():
|
|
return {
|
|
"total_sessions": len(list(SESSIONS_DIR.iterdir())),
|
|
"total_uploads": len(list(UPLOAD_DIR.glob("*.enc"))),
|
|
"disk_usage_mb": sum(f.stat().st_size for f in SESSIONS_DIR.rglob("*")) / 1024 / 1024
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
## 🎯 Checklist Déploiement
|
|
|
|
### Agent
|
|
- [ ] Build exécutables (Windows/macOS/Linux)
|
|
- [ ] Tester sur chaque OS
|
|
- [ ] Configurer `server_url` production
|
|
- [ ] Configurer `encryption_password`
|
|
- [ ] Créer installeurs (optionnel)
|
|
- [ ] Distribuer aux formateurs
|
|
|
|
### Serveur
|
|
- [ ] Installer dépendances
|
|
- [ ] Configurer `ENCRYPTION_PASSWORD`
|
|
- [ ] Démarrer serveur (systemd)
|
|
- [ ] Configurer HTTPS (Nginx)
|
|
- [ ] Configurer firewall
|
|
- [ ] Tester endpoint `/api/traces/status`
|
|
- [ ] Configurer monitoring
|
|
|
|
### Test End-to-End
|
|
- [ ] Agent → Upload → Serveur
|
|
- [ ] Vérifier déchiffrement
|
|
- [ ] Vérifier extraction ZIP
|
|
- [ ] Vérifier chargement RawSession
|
|
- [ ] Vérifier logs
|
|
|
|
---
|
|
|
|
## 🚨 Troubleshooting
|
|
|
|
### Agent ne démarre pas
|
|
|
|
**Windows:**
|
|
- Antivirus bloque → Ajouter exception
|
|
- DLL manquantes → Installer Visual C++ Redistributable
|
|
|
|
**macOS:**
|
|
- Permissions refusées → Activer Accessibility + Screen Recording
|
|
- "App is damaged" → `xattr -cr agent_v0.app`
|
|
|
|
**Linux:**
|
|
- `xdotool` manquant → `sudo apt-get install xdotool`
|
|
|
|
### Upload échoue
|
|
|
|
- Vérifier `server_url` dans config
|
|
- Vérifier serveur accessible: `curl https://votre-serveur.com/api/traces/status`
|
|
- Vérifier firewall
|
|
- Vérifier logs serveur
|
|
|
|
### Déchiffrement échoue
|
|
|
|
- Vérifier même `encryption_password` agent/serveur
|
|
- Vérifier fichier .enc pas corrompu
|
|
- Vérifier version `cryptography` identique
|
|
|
|
---
|
|
|
|
## 📞 Support
|
|
|
|
**Problèmes?**
|
|
- Logs agent: `agent_v0/logs/agent_v0.log`
|
|
- Logs serveur: `journalctl -u rpa-api`
|
|
- GitHub Issues: [lien]
|
|
|
|
---
|
|
|
|
**Build et déploiement terminés!** 🎉
|
|
|
|
Les formateurs peuvent maintenant enregistrer leurs workflows et alimenter le système RPA Vision V3.
|