4NK_vault/docs/deployment-guide.md
4NK Dev fcb15afb88 Initial commit: 4NK Vault API with quantum-resistant encryption
- API server with ChaCha20-Poly1305 encryption
- TypeScript SDK client with full functionality
- Complete documentation in docs/
- Environment variable processing with composite variables
- HTTPS-only API on port 6666
- Storage structure for configuration files
- Tests and examples included

Features:
- Quantum-resistant encryption (ChaCha20-Poly1305)
- Variable substitution from .env files
- Comprehensive TypeScript SDK
- Full API documentation and specifications
- Deployment guides and security model
2025-09-29 21:02:18 +00:00

13 KiB

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/<env>/<file>                   │
└─────────────────────────────────────────────────────────────┘

Déploiement en développement

Installation rapide

# 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

# 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

# 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

# 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

# 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

# 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

# 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

# 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

# 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

# /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

# 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

# /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

# 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

# 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

# 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é

# 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

# 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

# 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

// 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

// 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

# 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

# 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

# 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

# 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

# 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é

# 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

# 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

# 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

# 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

#!/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