- FastAPI backend with JWT authentication - ElGamal, RSA-PSS, ZK-proofs crypto modules - HTML5/JS frontend SPA - MariaDB database with 5 tables - Docker Compose with 3 services (frontend, backend, mariadb) - Comprehensive tests for cryptography - Typst technical report (30+ pages) - Makefile with development commands
4.2 KiB
4.2 KiB
Guide de Déploiement
Prérequis
- Docker 20.10+
- Docker Compose 1.29+
- Python 3.12 (pour développement local)
- Git
Installation Rapide
1. Cloner le projet
cd /home/paul/CIA
git clone <repo-url> e-voting-system
cd e-voting-system
2. Configurer l'environnement
cp .env.example .env
# Éditer .env si nécessaire
3. Démarrer avec Docker
./start.sh
# Ou
docker-compose up -d
L'application est maintenant accessible à :
- Frontend : http://localhost:3000
- Backend API : http://localhost:8000
- API Documentation : http://localhost:8000/docs
Développement Local
Installation de l'environnement Python
# Installer Poetry (si nécessaire)
curl -sSL https://install.python-poetry.org | python3 -
# Installer les dépendances
make install
# Ou
poetry install
Démarrer le backend en mode développement
make dev
# Ou
poetry run uvicorn src.backend.main:app --reload
Le backend s'auto-recharge à chaque modification de fichier.
Accéder au frontend en développement
Ouvrir un navigateur sur : http://localhost:3000
Commandes utiles
# Voir les logs
make logs
# ou
docker-compose logs -f
# Arrêter les conteneurs
make down
# ou
docker-compose down
# Voir l'état des conteneurs
docker-compose ps
# Exécuter les tests
make test
# ou
poetry run pytest tests/ -v
# Vérifier la qualité du code
make lint
# ou
poetry run ruff check src/
# Formater le code
make format
# ou
poetry run black src/
Structure de la Base de Données
Tables principales
- voters : Électeurs enregistrés
- elections : Élections disponibles
- candidates : Candidats par élection
- votes : Votes chiffrés
- audit_logs : Journal d'audit
Voir docker/init.sql pour le schéma complet.
Configuration de Production
Variables d'environnement
# Changez ces valeurs en production !
DB_ROOT_PASSWORD=<random-string>
DB_PASSWORD=<random-string>
SECRET_KEY=<random-key-min-32-chars>
DEBUG=false
# CORS (restreindre les origines)
CORS_ORIGINS="https://domain.com"
# HTTPS
HTTPS_ONLY=true
Recommandations
- Mots de passe : Utilisez des chaînes aléatoires longues
- Secret Key : Générer avec
openssl rand -hex 32 - HTTPS : Configurer avec un certificat SSL/TLS
- Base de données : Sauvegarde régulière
- Logs : Centraliser les logs
- Monitoring : Configurer des alertes
Exemple de déploiement production
# Générer des secrets
export DB_PASSWORD=$(openssl rand -hex 16)
export SECRET_KEY=$(openssl rand -hex 32)
# Créer .env.production
cat > .env.production << EOF
DB_HOST=db.production.com
DB_PORT=3306
DB_NAME=evoting_prod
DB_USER=evoting_user
DB_PASSWORD=$DB_PASSWORD
SECRET_KEY=$SECRET_KEY
DEBUG=false
CORS_ORIGINS="https://vote.company.com"
EOF
# Démarrer avec le fichier .env.production
docker-compose --env-file .env.production up -d
Troubleshooting
MariaDB ne démarre pas
# Vérifier les logs
docker-compose logs mariadb
# Réinitialiser la BD
docker-compose down -v
docker-compose up -d
Port déjà utilisé
# Changer les ports dans .env
# Ou libérer le port
lsof -i :3000 # Trouver le processus
kill -9 <PID> # Le terminer
Problèmes de connexion API
- Vérifier que les conteneurs tournent :
docker-compose ps - Vérifier la configuration réseau :
docker-compose exec backend ping mariadb - Consulter les logs :
docker-compose logs backend
Sauvegarde et Restauration
Sauvegarder la BD
docker-compose exec mariadb mysqldump -u evoting_user -p evoting_db > backup.sql
Restaurer la BD
docker-compose exec -T mariadb mysql -u evoting_user -p evoting_db < backup.sql
Arrêt et Nettoyage
# Arrêter les conteneurs (données conservées)
make down
# Arrêter et supprimer les volumes (ATTENTION: données supprimées)
docker-compose down -v
# Nettoyage complet
./clean.sh
Performance
- Frontend : Serveur HTTP statique (http-server)
- Backend : Uvicorn ASGI (4 workers par défaut)
- BD : Connection pooling (10 connexions par défaut)
Ajuster les paramètres dans docker-compose.yml si nécessaire.