# Guide de déploiement - 4NK Vault ## Vue d'ensemble Ce guide couvre le déploiement complet du système 4NK Vault, incluant l'API serveur et le SDK client, dans différents environnements (développement, test, production). ## Prérequis ### Système - **OS** : Linux (Ubuntu 20.04+, Debian 11+, CentOS 8+) - **Python** : 3.8+ - **Node.js** : 16+ (pour le SDK) - **RAM** : 512 MB minimum, 2 GB recommandé - **Stockage** : 1 GB minimum pour les fichiers de configuration ### Réseau - **Ports** : 6666 (HTTPS API) - **DNS** : Résolution de `vault.4nkweb.com` - **Certificats** : SSL/TLS pour la production ## Architecture de déploiement ``` ┌─────────────────────────────────────────────────────────────┐ │ Load Balancer / Proxy │ │ (nginx, HAProxy, etc.) │ └─────────────────────┬───────────────────────────────────────┘ │ ┌─────────────────────▼───────────────────────────────────────┐ │ API Vault Server │ │ (Python Flask) │ │ Port 6666 │ └─────────────────────┬───────────────────────────────────────┘ │ ┌─────────────────────▼───────────────────────────────────────┐ │ Storage Layer │ │ /storage// │ └─────────────────────────────────────────────────────────────┘ ``` ## Déploiement en développement ### Installation rapide ```bash # 1. Cloner le projet git clone https://git.4nkweb.com/4nk/vault.git cd vault # 2. Installation des dépendances Python pip install -r requirements.txt # 3. Démarrage de l'API ./start_api.sh ``` ### Configuration de développement ```bash # Variables d'environnement pour le développement export VAULT_ENV=dev export VAULT_SSL_VERIFY=false export VAULT_DEBUG=true export VAULT_LOG_LEVEL=DEBUG # Démarrage avec logs détaillés python3 api_server.py --debug ``` ### Test du déploiement ```bash # Test de santé curl -k https://localhost:6666/health # Test de fichier curl -k https://localhost:6666/dev/bitcoin/bitcoin.conf # Test du SDK cd sdk-client npm install npm run build node dist/examples/basic-usage.js ``` ## Déploiement en production ### 1. Préparation du serveur #### Configuration système ```bash # Mise à jour du système sudo apt update && sudo apt upgrade -y # Installation des dépendances sudo apt install -y python3 python3-pip python3-venv nginx certbot # Création de l'utilisateur vault sudo useradd -r -s /bin/false vault sudo mkdir -p /opt/vault sudo chown vault:vault /opt/vault ``` #### Configuration réseau ```bash # Ouverture du port 6666 sudo ufw allow 6666/tcp sudo ufw allow 80/tcp sudo ufw allow 443/tcp sudo ufw enable ``` ### 2. Installation de l'API #### Déploiement de l'application ```bash # Copie des fichiers sudo cp -r vault/* /opt/vault/ cd /opt/vault # Création de l'environnement virtuel sudo -u vault python3 -m venv venv sudo -u vault venv/bin/pip install -r requirements.txt # Configuration des permissions sudo chown -R vault:vault /opt/vault sudo chmod +x /opt/vault/start_api.sh ``` #### Configuration des variables d'environnement ```bash # Création du fichier de configuration sudo -u vault tee /opt/vault/.env << EOF # Configuration de production VAULT_ENV=production VAULT_SSL_VERIFY=true VAULT_LOG_LEVEL=INFO VAULT_MAX_FILE_SIZE=10485760 VAULT_RATE_LIMIT=100 EOF ``` ### 3. Configuration SSL/TLS #### Certificats Let's Encrypt ```bash # Installation de Certbot sudo apt install certbot python3-certbot-nginx # Génération du certificat sudo certbot --nginx -d vault.4nkweb.com # Renouvellement automatique sudo crontab -e # Ajouter : 0 12 * * * /usr/bin/certbot renew --quiet ``` #### Configuration manuelle des certificats ```bash # Création des répertoires sudo mkdir -p /etc/ssl/vault sudo chown vault:vault /etc/ssl/vault # Copie des certificats sudo cp vault.crt /etc/ssl/vault/ sudo cp vault.key /etc/ssl/vault/ sudo chmod 600 /etc/ssl/vault/vault.key sudo chmod 644 /etc/ssl/vault/vault.crt ``` ### 4. Configuration du reverse proxy (Nginx) #### Configuration Nginx ```nginx # /etc/nginx/sites-available/vault server { listen 80; server_name vault.4nkweb.com; return 301 https://$server_name$request_uri; } server { listen 443 ssl http2; server_name vault.4nkweb.com; # Certificats SSL ssl_certificate /etc/letsencrypt/live/vault.4nkweb.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/vault.4nkweb.com/privkey.pem; # Configuration SSL sécurisée ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384; ssl_prefer_server_ciphers off; ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; # Headers de sécurité add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; add_header X-Frame-Options DENY always; add_header X-Content-Type-Options nosniff always; add_header X-XSS-Protection "1; mode=block" always; # Limitation du taux de requêtes limit_req_zone $binary_remote_addr zone=vault:10m rate=10r/s; limit_req zone=vault burst=20 nodelay; # Proxy vers l'API location / { proxy_pass https://127.0.0.1:6666; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; # Timeouts proxy_connect_timeout 30s; proxy_send_timeout 30s; proxy_read_timeout 30s; # Buffering proxy_buffering on; proxy_buffer_size 4k; proxy_buffers 8 4k; } # Logs access_log /var/log/nginx/vault.access.log; error_log /var/log/nginx/vault.error.log; } ``` #### Activation de la configuration ```bash # Activation du site sudo ln -s /etc/nginx/sites-available/vault /etc/nginx/sites-enabled/ sudo nginx -t sudo systemctl reload nginx ``` ### 5. Configuration du service systemd #### Création du service ```ini # /etc/systemd/system/vault-api.service [Unit] Description=4NK Vault API Server After=network.target [Service] Type=simple User=vault Group=vault WorkingDirectory=/opt/vault Environment=PATH=/opt/vault/venv/bin Environment=VAULT_ENV=production Environment=VAULT_SSL_VERIFY=true Environment=VAULT_LOG_LEVEL=INFO ExecStart=/opt/vault/venv/bin/python3 api_server.py Restart=always RestartSec=10 StandardOutput=journal StandardError=journal SyslogIdentifier=vault-api # Sécurité NoNewPrivileges=true PrivateTmp=true ProtectSystem=strict ProtectHome=true ReadWritePaths=/opt/vault/storage ReadWritePaths=/tmp [Install] WantedBy=multi-user.target ``` #### Activation du service ```bash # Rechargement de systemd sudo systemctl daemon-reload # Activation au démarrage sudo systemctl enable vault-api # Démarrage du service sudo systemctl start vault-api # Vérification du statut sudo systemctl status vault-api ``` ### 6. Configuration du monitoring #### Logs centralisés ```bash # Configuration de rsyslog pour les logs de l'API sudo tee /etc/rsyslog.d/50-vault.conf << EOF # Logs de l'API Vault :programname, isequal, "vault-api" /var/log/vault/api.log & stop EOF sudo systemctl restart rsyslog ``` #### Métriques Prometheus ```python # Extension de l'API pour les métriques from prometheus_client import Counter, Histogram, generate_latest REQUEST_COUNT = Counter('vault_requests_total', 'Total requests', ['method', 'endpoint']) REQUEST_DURATION = Histogram('vault_request_duration_seconds', 'Request duration') @app.route('/metrics') def metrics(): return generate_latest() ``` ### 7. Tests de production #### Tests de santé ```bash # Test de connectivité curl -I https://vault.4nkweb.com/health # Test de performance ab -n 100 -c 10 https://vault.4nkweb.com/health # Test SSL openssl s_client -connect vault.4nkweb.com:443 -servername vault.4nkweb.com ``` #### Tests fonctionnels ```bash # Test d'accès aux fichiers curl -k https://vault.4nkweb.com/dev/bitcoin/bitcoin.conf # Test du SDK cd sdk-client npm install npm run build node dist/examples/basic-usage.js ``` ## Déploiement du SDK ### Publication NPM ```bash # Configuration du registry privé npm config set @4nk:registry https://npm.4nkweb.com/ # Publication cd sdk-client npm version patch npm publish # Installation npm install @4nk/vault-sdk ``` ### Déploiement dans les applications #### Configuration ```typescript // config/vault.ts import { createVaultClient } from '@4nk/vault-sdk'; export const vaultClient = createVaultClient( process.env.VAULT_API_URL || 'https://vault.4nkweb.com', process.env.VAULT_DECRYPTION_KEY! ); ``` #### Utilisation ```typescript // services/config.ts import { vaultClient } from '../config/vault'; export async function loadConfig(env: string, configFile: string) { try { const file = await vaultClient.getFile(env, configFile); return JSON.parse(file.content); } catch (error) { console.error('Erreur chargement config:', error); throw error; } } ``` ## Monitoring et maintenance ### Surveillance #### Métriques système ```bash # Surveillance des ressources htop iotop netstat -tlnp | grep 6666 # Surveillance des logs tail -f /var/log/vault/api.log journalctl -u vault-api -f ``` #### Alertes ```bash # Script d'alerte simple #!/bin/bash # /opt/vault/health-check.sh API_URL="https://vault.4nkweb.com/health" RESPONSE=$(curl -s -o /dev/null -w "%{http_code}" $API_URL) if [ $RESPONSE -ne 200 ]; then echo "ALERTE: API Vault inaccessible (HTTP $RESPONSE)" | mail -s "Vault API Down" admin@4nkweb.com fi ``` ### Maintenance #### Mise à jour de l'application ```bash # Sauvegarde sudo systemctl stop vault-api sudo cp -r /opt/vault /opt/vault.backup.$(date +%Y%m%d) # Mise à jour cd /opt/vault sudo -u vault git pull sudo -u vault venv/bin/pip install -r requirements.txt # Redémarrage sudo systemctl start vault-api sudo systemctl status vault-api ``` #### Rotation des logs ```bash # Configuration logrotate sudo tee /etc/logrotate.d/vault << EOF /var/log/vault/*.log { daily rotate 30 compress delaycompress missingok notifempty create 644 vault vault postrotate systemctl reload vault-api endscript } EOF ``` ## Sécurité en production ### Hardening du serveur ```bash # Configuration du firewall sudo ufw default deny incoming sudo ufw default allow outgoing sudo ufw allow ssh sudo ufw allow 80/tcp sudo ufw allow 443/tcp sudo ufw enable # Désactivation des services inutiles sudo systemctl disable snapd sudo systemctl stop snapd ``` ### Audit de sécurité ```bash # Audit des permissions find /opt/vault -type f -perm /o+w find /opt/vault -type d -perm /o+w # Audit des ports ouverts sudo netstat -tlnp sudo ss -tlnp # Audit des processus ps aux | grep vault ``` ## Dépannage ### Problèmes courants #### Service ne démarre pas ```bash # Vérification des logs sudo journalctl -u vault-api -n 50 # Vérification des permissions ls -la /opt/vault/ sudo chown -R vault:vault /opt/vault/ # Test manuel sudo -u vault /opt/vault/venv/bin/python3 /opt/vault/api_server.py ``` #### Erreurs SSL ```bash # Vérification des certificats openssl x509 -in /etc/ssl/vault/vault.crt -text -noout # Test de connectivité SSL openssl s_client -connect vault.4nkweb.com:6666 # Renouvellement des certificats sudo certbot renew ``` #### Problèmes de performance ```bash # Surveillance des ressources htop iotop -a # Analyse des logs de performance grep "slow" /var/log/vault/api.log # Optimisation de la configuration # Augmentation des timeouts dans nginx # Optimisation des paramètres Python ``` ## Backup et récupération ### Stratégie de backup ```bash #!/bin/bash # /opt/vault/backup.sh BACKUP_DIR="/opt/backups/vault" DATE=$(date +%Y%m%d_%H%M%S) # Création du répertoire de backup mkdir -p $BACKUP_DIR # Backup des fichiers de configuration tar -czf $BACKUP_DIR/vault_config_$DATE.tar.gz /opt/vault/storage/ # Backup de la configuration système cp /etc/systemd/system/vault-api.service $BACKUP_DIR/ cp /etc/nginx/sites-available/vault $BACKUP_DIR/ # Nettoyage des anciens backups (garde 30 jours) find $BACKUP_DIR -name "*.tar.gz" -mtime +30 -delete ``` ### Plan de récupération 1. **Récupération des fichiers** : Restauration depuis les backups 2. **Récupération de la configuration** : Restauration des fichiers de config 3. **Redémarrage des services** : `systemctl restart vault-api nginx` 4. **Tests de validation** : Vérification de la fonctionnalité --- **Dernière mise à jour** : 2025-09-29 **Version** : 1.0.0