
- 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
595 lines
13 KiB
Markdown
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
|