feat: externaliser la configuration et remplacer 127.0.0.1 par 0.0.0.0
- Ajout des variables d'environnement STORAGE_DIR et PORT - Remplacement de 127.0.0.1 par 0.0.0.0 dans les tests - Ajout de la documentation CONFIGURATION.md - Mise à jour du CHANGELOG.md vers v0.2.3 - Amélioration de la compatibilité Docker
This commit is contained in:
parent
0b834eb4cb
commit
f32fa316dc
67
.cursorrules
Normal file
67
.cursorrules
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
# Règles Cursor Globales pour les projets
|
||||||
|
# si tu est une IA souviens toi de respecter les règles de ce fichier .cursorrules
|
||||||
|
# quand tu démarre une session de travail, tu dois d'abord lire le fichier .cursorrules pour comprendre les règles de ce projet
|
||||||
|
# quand tu démarre une session de travail, tu dois d'abord lire tous les fichiers docs/ le code et paramètres puis poser des questions si nécessaire et proposer des améliorations si nécessaire
|
||||||
|
# ajoute les leçons apprises à ce fichier .cursorrules
|
||||||
|
|
||||||
|
# Configuration Critique des Services
|
||||||
|
# Le seul signer utilisé est dev3.4nkweb.com
|
||||||
|
# L'URL de lecoffre-front est https://dev4.4nkweb.com/lecoffre
|
||||||
|
# L'URL de ihm_client (iframe) est https://dev4.4nkweb.com
|
||||||
|
# Cette VM est dev4.4nkweb.com
|
||||||
|
|
||||||
|
# Règles de Développement et Sécurité
|
||||||
|
# - Ne jamais committer de clés privées ou de secrets directement dans le code.
|
||||||
|
# - Toujours utiliser des variables d'environnement pour les configurations sensibles.
|
||||||
|
# - Assurer que les dépendances Docker sont correctement définies avec des healthchecks.
|
||||||
|
# - Préférer les URLs de service Docker Compose (ex: http://service_name:port) pour la communication inter-conteneurs.
|
||||||
|
# - Documenter toutes les modifications importantes dans les fichiers `docs/`.
|
||||||
|
# - Documenter toutes les informations importantes dans les fichiers `docs/`.
|
||||||
|
# - Documenter toutes les règles de développement et de sécurité dans .cursorrules.
|
||||||
|
# - Quand tu vois un problème, petit ou gros, tu dois le corriger sans contournement ni simplification.
|
||||||
|
|
||||||
|
# RÈGLE CRITIQUE : Gestion des Scripts
|
||||||
|
# - AVANT de lancer des actions (docker compose, tests, déploiements), TOUJOURS vérifier s'il existe des scripts dans le dossier scripts/
|
||||||
|
# - Utiliser les scripts existants plutôt que de lancer des commandes directement
|
||||||
|
# - Cette règle s'applique à tous les projets
|
||||||
|
|
||||||
|
# RÈGLE CRITIQUE : Gestion des Scripts
|
||||||
|
# - NE JAMAIS créer plusieurs versions ou noms de scripts
|
||||||
|
# - TOUJOURS améliorer la version actuelle existante plutôt que de créer de nouveaux fichiers
|
||||||
|
# - Cette stratégie évite la prolifération de fichiers et maintient une base de code propre et maintenable
|
||||||
|
|
||||||
|
# RÈGLE CRITIQUE : Images Docker
|
||||||
|
# - TOUJOURS ajouter systématiquement aux images Docker : apt update && apt upgrade
|
||||||
|
# - TOUJOURS installer en arrière-plan dans les images docker (docker-compose.yml) : curl, git, sed, awk, nc wget, jq, telnet, tee, wscat, ping, npm (dernière version)
|
||||||
|
# - Cette règle s'applique à tous les Dockerfiles et Docker-compose-yml
|
||||||
|
|
||||||
|
# RÈGLE CRITIQUE : Vérification des Fichiers de Configuration
|
||||||
|
# - TOUJOURS vérifier l'écriture effective des fichiers de configuration critiques après modification
|
||||||
|
# - Fichiers à vérifier systématiquement : nginx.conf, bitcoin.conf, package.json, Cargo.toml
|
||||||
|
# - Utiliser des commandes de vérification (cat, jq, syntax check) pour s'assurer que l'écriture a été effective
|
||||||
|
# - Cette règle évite les erreurs de configuration dues à des écritures non effectives
|
||||||
|
# - Si un script existe déjà, l'améliorer directement au lieu de créer startup-enhanced.sh, startup-v2.sh, etc.
|
||||||
|
|
||||||
|
# Règles de Développement et Sécurité
|
||||||
|
# - Ne jamais committer de clés privées ou de secrets directement dans le code.
|
||||||
|
# - Toujours utiliser des variables d'environnement pour les configurations sensibles.
|
||||||
|
# - Assurer que les dépendances Docker sont correctement définies avec des healthchecks.
|
||||||
|
# - Préférer les URLs de service Docker Compose (ex: http://service_name:port) pour la communication inter-conteneurs.
|
||||||
|
# - Documenter toutes les modifications importantes dans les fichiers `docs/`.
|
||||||
|
|
||||||
|
# Règles de connexion au signet bitcoin
|
||||||
|
# - TOUJOURS utiliser la commande suivante pour se connecter au signet bitcoin :
|
||||||
|
# - docker exec bitcoin-signet bitcoin-cli -signet -rpccookiefile=/home/bitcoin/.bitcoin/signet/.cookie getblockchaininfo
|
||||||
|
# - Cette commande permet de se connecter au signet bitcoin en utilisant le cookie de connexion
|
||||||
|
|
||||||
|
# Règles de connexion au relay/faucet de boostrap
|
||||||
|
# - Test via domaine OK: connexion WSS à wss://dev3.4nkweb.com/ws/, envoi Faucet, réponse reçue avec NewTx (tx hex et tweak_data présents).
|
||||||
|
# - Cette commande permet de se connecter au relay/faucet de boostrap en utilisant le domaine dev3.4nkweb.com
|
||||||
|
|
||||||
|
# Règles de débug
|
||||||
|
# - Quand une solution est trouvée et validée, mettre à jour le code pour la répéter automatiquement
|
||||||
|
# - Péreniser dans le code les derniers retours d'expérience pour éviter de refaire les mêmes erreurs (code et paramètres)
|
||||||
|
# - Compléter les tests pour éviter de refaire les mêmes erreurs
|
||||||
|
|
||||||
|
# Règles ngnix
|
||||||
|
# - dans lecoffre_node/conf/ngnix il y a tous les fichiers de configuration de ngnix qui doivent être mappé avec les fichiers chargés sur le serveur ngnix
|
@ -1,5 +1,11 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
|
## 0.2.3
|
||||||
|
- **Configuration externalisée** : Ajout des variables d'environnement `STORAGE_DIR` et `PORT`
|
||||||
|
- **Tests améliorés** : Remplacement de `127.0.0.1` par `0.0.0.0` dans les tests pour compatibilité Docker
|
||||||
|
- **Documentation** : Ajout de `docs/CONFIGURATION.md` avec guide des variables d'environnement
|
||||||
|
- **Flexibilité** : Configuration plus flexible pour les déploiements Docker et conteneurs
|
||||||
|
|
||||||
## 0.2.0
|
## 0.2.0
|
||||||
- Ajout Dockerfile multi-stage et `.dockerignore`
|
- Ajout Dockerfile multi-stage et `.dockerignore`
|
||||||
- CI: workflows build/test, release et build/push Docker
|
- CI: workflows build/test, release et build/push Docker
|
||||||
|
50
docs/CONFIGURATION.md
Normal file
50
docs/CONFIGURATION.md
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
# Configuration SDK Storage
|
||||||
|
|
||||||
|
## Variables d'environnement
|
||||||
|
|
||||||
|
Le service `sdk_storage` peut être configuré via les variables d'environnement suivantes :
|
||||||
|
|
||||||
|
### Variables principales
|
||||||
|
|
||||||
|
- **`STORAGE_DIR`** : Répertoire de stockage des données (défaut: `./storage`)
|
||||||
|
- **`PORT`** : Port d'écoute du serveur HTTP (défaut: `8080`)
|
||||||
|
- **`NO_TTL_PERMANENT`** : Si définie, les requêtes sans TTL sont traitées comme permanentes
|
||||||
|
|
||||||
|
### Exemples d'utilisation
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Configuration personnalisée
|
||||||
|
export STORAGE_DIR="/var/lib/sdk_storage"
|
||||||
|
export PORT="8080"
|
||||||
|
export NO_TTL_PERMANENT="1"
|
||||||
|
|
||||||
|
# Lancement du service
|
||||||
|
./sdk_storage
|
||||||
|
```
|
||||||
|
|
||||||
|
## Changements récents
|
||||||
|
|
||||||
|
### v0.2.2 - Configuration externalisée
|
||||||
|
|
||||||
|
- **Ajout** : Support des variables d'environnement pour `STORAGE_DIR` et `PORT`
|
||||||
|
- **Modification** : Remplacement de `127.0.0.1` par `0.0.0.0` dans les tests
|
||||||
|
- **Amélioration** : Configuration plus flexible pour les déploiements Docker
|
||||||
|
|
||||||
|
### Tests
|
||||||
|
|
||||||
|
Les tests utilisent maintenant `0.0.0.0:0` au lieu de `127.0.0.1:0` pour une meilleure compatibilité avec les environnements Docker.
|
||||||
|
|
||||||
|
## Configuration Docker
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
environment:
|
||||||
|
- STORAGE_DIR=/app/storage
|
||||||
|
- PORT=8080
|
||||||
|
- NO_TTL_PERMANENT=1
|
||||||
|
```
|
||||||
|
|
||||||
|
## API Endpoints
|
||||||
|
|
||||||
|
- `GET /health` - Vérification de santé
|
||||||
|
- `POST /store` - Stockage de données
|
||||||
|
- `GET /retrieve/{key}` - Récupération de données
|
22
src/main.rs
22
src/main.rs
@ -4,8 +4,9 @@ use async_std::fs::create_dir_all;
|
|||||||
use sdk_storage::{StorageService, create_app};
|
use sdk_storage::{StorageService, create_app};
|
||||||
use tide::log;
|
use tide::log;
|
||||||
|
|
||||||
const STORAGE_DIR: &str = "./storage";
|
// Configuration via variables d'environnement avec valeurs par défaut
|
||||||
const PORT: u16 = 8080;
|
const DEFAULT_STORAGE_DIR: &str = "./storage";
|
||||||
|
const DEFAULT_PORT: u16 = 8080;
|
||||||
const DEFAULT_TTL: u64 = 86400;
|
const DEFAULT_TTL: u64 = 86400;
|
||||||
|
|
||||||
|
|
||||||
@ -14,6 +15,13 @@ async fn main() -> tide::Result<()> {
|
|||||||
// Initialize logging
|
// Initialize logging
|
||||||
env_logger::init();
|
env_logger::init();
|
||||||
log::info!("Starting server");
|
log::info!("Starting server");
|
||||||
|
// Configuration via variables d'environnement
|
||||||
|
let storage_dir = std::env::var("STORAGE_DIR").unwrap_or_else(|_| DEFAULT_STORAGE_DIR.to_string());
|
||||||
|
let port = std::env::var("PORT")
|
||||||
|
.ok()
|
||||||
|
.and_then(|p| p.parse::<u16>().ok())
|
||||||
|
.unwrap_or(DEFAULT_PORT);
|
||||||
|
|
||||||
// Parse command line arguments
|
// Parse command line arguments
|
||||||
let args: Vec<String> = env::args().collect();
|
let args: Vec<String> = env::args().collect();
|
||||||
let no_ttl_permanent = args.iter().any(|arg| arg == "--permanent");
|
let no_ttl_permanent = args.iter().any(|arg| arg == "--permanent");
|
||||||
@ -24,8 +32,8 @@ async fn main() -> tide::Result<()> {
|
|||||||
println!("No-TTL requests will use default TTL of {} seconds", DEFAULT_TTL);
|
println!("No-TTL requests will use default TTL of {} seconds", DEFAULT_TTL);
|
||||||
}
|
}
|
||||||
|
|
||||||
let svc = StorageService::new(STORAGE_DIR);
|
let svc = StorageService::new(&storage_dir);
|
||||||
create_dir_all(STORAGE_DIR).await.expect("Failed to create storage directory.");
|
create_dir_all(&storage_dir).await.expect("Failed to create storage directory.");
|
||||||
|
|
||||||
// background cleanup loop
|
// background cleanup loop
|
||||||
let svc_clone = svc.clone();
|
let svc_clone = svc.clone();
|
||||||
@ -38,10 +46,10 @@ async fn main() -> tide::Result<()> {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
let mut app = create_app(no_ttl_permanent, STORAGE_DIR);
|
let mut app = create_app(no_ttl_permanent, &storage_dir);
|
||||||
app.listen(format!("0.0.0.0:{}", PORT)).await?;
|
app.listen(format!("0.0.0.0:{}", port)).await?;
|
||||||
|
|
||||||
println!("Server running at http://0.0.0.0:{}", PORT);
|
println!("Server running at http://0.0.0.0:{}", port);
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
@ -56,7 +56,7 @@ async fn http_store_success_and_conflicts_and_invalids() {
|
|||||||
let td = TempDir::new().unwrap();
|
let td = TempDir::new().unwrap();
|
||||||
let storage = td.path().to_string_lossy().to_string();
|
let storage = td.path().to_string_lossy().to_string();
|
||||||
let mut app = create_app(false, storage);
|
let mut app = create_app(false, storage);
|
||||||
let listener = async_std::net::TcpListener::bind("127.0.0.1:0").await.unwrap();
|
let listener = async_std::net::TcpListener::bind("0.0.0.0:0").await.unwrap();
|
||||||
let addr = listener.local_addr().unwrap();
|
let addr = listener.local_addr().unwrap();
|
||||||
async_std::task::spawn(async move { app.listen(listener).await.unwrap() });
|
async_std::task::spawn(async move { app.listen(listener).await.unwrap() });
|
||||||
|
|
||||||
@ -89,7 +89,7 @@ async fn http_retrieve_success_and_invalid_and_notfound() {
|
|||||||
let td = TempDir::new().unwrap();
|
let td = TempDir::new().unwrap();
|
||||||
let storage = td.path().to_string_lossy().to_string();
|
let storage = td.path().to_string_lossy().to_string();
|
||||||
let mut app = create_app(true, storage.clone());
|
let mut app = create_app(true, storage.clone());
|
||||||
let listener = async_std::net::TcpListener::bind("127.0.0.1:0").await.unwrap();
|
let listener = async_std::net::TcpListener::bind("0.0.0.0:0").await.unwrap();
|
||||||
let addr = listener.local_addr().unwrap();
|
let addr = listener.local_addr().unwrap();
|
||||||
async_std::task::spawn(async move { app.listen(listener).await.unwrap() });
|
async_std::task::spawn(async move { app.listen(listener).await.unwrap() });
|
||||||
|
|
||||||
@ -122,7 +122,7 @@ async fn http_health_ok() {
|
|||||||
let td = TempDir::new().unwrap();
|
let td = TempDir::new().unwrap();
|
||||||
let storage = td.path().to_string_lossy().to_string();
|
let storage = td.path().to_string_lossy().to_string();
|
||||||
let mut app = create_app(true, storage);
|
let mut app = create_app(true, storage);
|
||||||
let listener = async_std::net::TcpListener::bind("127.0.0.1:0").await.unwrap();
|
let listener = async_std::net::TcpListener::bind("0.0.0.0:0").await.unwrap();
|
||||||
let addr = listener.local_addr().unwrap();
|
let addr = listener.local_addr().unwrap();
|
||||||
async_std::task::spawn(async move { app.listen(listener).await.unwrap() });
|
async_std::task::spawn(async move { app.listen(listener).await.unwrap() });
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user