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

595 lines
13 KiB
Markdown

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