
- 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
13 KiB
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
- Récupération des fichiers : Restauration depuis les backups
- Récupération de la configuration : Restauration des fichiers de config
- Redémarrage des services :
systemctl restart vault-api nginx
- Tests de validation : Vérification de la fonctionnalité
Dernière mise à jour : 2025-09-29 Version : 1.0.0