chore: sync projects/lecoffre/lecoffre_node compose paths, add scripts/push_modules.sh, set bitcoin datadir to projects tree
This commit is contained in:
parent
dcb429e500
commit
66f1844587
97
.gitignore
vendored
97
.gitignore
vendored
@ -2,30 +2,30 @@
|
|||||||
# ============================
|
# ============================
|
||||||
|
|
||||||
# Dossiers de sauvegarde des scripts
|
# Dossiers de sauvegarde des scripts
|
||||||
*.backup/
|
**/backup/
|
||||||
*/backup/
|
**/*backup*
|
||||||
*/*.backup*
|
|
||||||
|
**/.cargo/
|
||||||
|
|
||||||
.cargo/
|
|
||||||
Cargo.lock
|
|
||||||
*/.cargo/
|
|
||||||
*/Cargo.lock
|
|
||||||
|
|
||||||
*.cargo/
|
|
||||||
*Cargo.lock
|
|
||||||
|
|
||||||
# Fichiers temporaires
|
# Fichiers temporaires
|
||||||
*.tmp
|
**/*.tmp*
|
||||||
*.temp
|
**/*.temp*
|
||||||
*.log
|
**/*.log*
|
||||||
*.pid
|
**/*.pid*
|
||||||
|
|
||||||
# Fichiers de configuration locale
|
# Fichiers de configuration locale
|
||||||
**/*.env*
|
**/*.env*
|
||||||
|
**/*.conf*
|
||||||
|
**/*.yaml*
|
||||||
|
**/*.yml*
|
||||||
|
**/*.ini*
|
||||||
|
**/*.json*
|
||||||
|
**/*.toml*
|
||||||
|
**/*.lock*
|
||||||
|
|
||||||
# Données et logs
|
# Données et logs
|
||||||
**/data/
|
|
||||||
**/logs/
|
|
||||||
**/*.logs*
|
**/*.logs*
|
||||||
**/*.data
|
**/*.data
|
||||||
*.db
|
*.db
|
||||||
@ -41,72 +41,43 @@ ssl/
|
|||||||
certs/
|
certs/
|
||||||
|
|
||||||
# Docker
|
# Docker
|
||||||
.docker/
|
**/*.docker*
|
||||||
docker-data/
|
|
||||||
docker-volumes/
|
|
||||||
|
|
||||||
# Cache et build
|
# Cache et build
|
||||||
**/*.node_modules/
|
**/*.node_modules/
|
||||||
**/*.dist/
|
**/*.dist/
|
||||||
**/*.build/
|
**/*build/
|
||||||
**/*.target/
|
**/*target/
|
||||||
**/*.*.o
|
**/*.*.o
|
||||||
**/*.so
|
**/*.so
|
||||||
**/*.dylib
|
**/*.dylib
|
||||||
|
|
||||||
# IDE et éditeurs
|
# IDE et éditeurs
|
||||||
.vscode/
|
**/*.vscode/
|
||||||
.idea/
|
**/*.idea/
|
||||||
*.swp
|
**/*.swp
|
||||||
*.swo
|
**/*.swo
|
||||||
*~
|
**/*~
|
||||||
|
|
||||||
# OS
|
# OS
|
||||||
.DS_Store
|
**/*.DS_Store
|
||||||
Thumbs.db
|
**/*Thumbs.db
|
||||||
*.tmp
|
**/*tmp*
|
||||||
|
|
||||||
# Git
|
# Git
|
||||||
.git/
|
**/*.git/
|
||||||
*.orig
|
**/*.orig*
|
||||||
|
|
||||||
# Backup des projets existants
|
# Backup des projets existants
|
||||||
*.backup/
|
**/*backup*
|
||||||
|
|
||||||
# Fichiers de configuration spécifiques au host
|
|
||||||
host-config/
|
|
||||||
local-config/
|
|
||||||
|
|
||||||
# Données sensibles
|
**/*wallet*
|
||||||
secrets/
|
**/*keys*
|
||||||
private/
|
|
||||||
confidential/
|
|
||||||
|
|
||||||
# Monitoring et métriques
|
|
||||||
prometheus-data/
|
|
||||||
grafana-data/
|
|
||||||
loki-data/
|
|
||||||
|
|
||||||
# Bitcoin et crypto
|
|
||||||
.bitcoin/
|
|
||||||
.4nk/
|
|
||||||
wallet/
|
|
||||||
keys/
|
|
||||||
|
|
||||||
# Nginx
|
|
||||||
nginx-cache/
|
|
||||||
nginx-logs/
|
|
||||||
|
|
||||||
# Supervisor
|
# Supervisor
|
||||||
supervisor-logs/
|
supervisor-logs/
|
||||||
|
|
||||||
# Scripts de déploiement temporaires
|
**/*node_modules*
|
||||||
deploy-*.tmp
|
**/*cursor*
|
||||||
setup-*.tmp
|
**/*pid*
|
||||||
.cursor-server
|
|
||||||
/home/debian/4NK_env/logs/
|
|
||||||
/home/debian/4NK_env/backups/
|
|
||||||
backups/
|
|
||||||
|
|
||||||
|
|
||||||
confs
|
|
53
.gitmodules
vendored
53
.gitmodules
vendored
@ -1,56 +1,69 @@
|
|||||||
[submodule "lecoffre_node"]
|
|
||||||
path = lecoffre_node
|
|
||||||
url = git@git.4nkweb.com:4nk/lecoffre_node.git
|
|
||||||
branch = ext
|
|
||||||
[submodule "sdk_relay"]
|
[submodule "sdk_relay"]
|
||||||
path = sdk_relay
|
path = 4NK_modules/sdk_relay
|
||||||
url = git@git.4nkweb.com:4nk/sdk_relay.git
|
url = git@git.4nkweb.com:4nk/sdk_relay.git
|
||||||
branch = ext
|
branch = ext
|
||||||
[submodule "sdk_storage"]
|
[submodule "sdk_storage"]
|
||||||
path = sdk_storage
|
path = 4NK_modules/sdk_storage
|
||||||
url = git@git.4nkweb.com:4nk/sdk_storage.git
|
url = git@git.4nkweb.com:4nk/sdk_storage.git
|
||||||
branch = ext
|
branch = ext
|
||||||
[submodule "ihm_client"]
|
[submodule "ihm_client"]
|
||||||
path = ihm_client
|
path = 4NK_modules/ihm_client
|
||||||
url = git@git.4nkweb.com:4nk/ihm_client.git
|
url = git@git.4nkweb.com:4nk/ihm_client.git
|
||||||
branch = ext
|
branch = ext
|
||||||
[submodule "lecoffre-front"]
|
|
||||||
path = lecoffre-front
|
|
||||||
url = git@git.4nkweb.com:4nk/lecoffre-front.git
|
|
||||||
branch = ext
|
|
||||||
[submodule "doc_api"]
|
[submodule "doc_api"]
|
||||||
path = doc_api
|
path = 4NK_modules/doc_api
|
||||||
url = git@git.4nkweb.com:4nk/doc_api.git
|
url = git@git.4nkweb.com:4nk/doc_api.git
|
||||||
branch = ext
|
branch = ext
|
||||||
[submodule "sdk_signer"]
|
[submodule "sdk_signer"]
|
||||||
path = sdk_signer
|
path = 4NK_modules/sdk_signer
|
||||||
url = git@git.4nkweb.com:4nk/sdk_signer.git
|
url = git@git.4nkweb.com:4nk/sdk_signer.git
|
||||||
branch = ext
|
branch = ext
|
||||||
[submodule "skeleton"]
|
[submodule "skeleton"]
|
||||||
path = skeleton
|
path = 4NK_modules/skeleton
|
||||||
url = git@git.4nkweb.com:4nk/skeleton.git
|
url = git@git.4nkweb.com:4nk/skeleton.git
|
||||||
branch = dev
|
branch = dev
|
||||||
[submodule "sdk-signer-client"]
|
[submodule "sdk-signer-client"]
|
||||||
path = sdk-signer-client
|
path = 4NK_modules/sdk-signer-client
|
||||||
url = git@git.4nkweb.com:4nk/sdk-signer-client.git
|
url = git@git.4nkweb.com:4nk/sdk-signer-client.git
|
||||||
branch = ext
|
branch = ext
|
||||||
[submodule "sdk_client"]
|
[submodule "sdk_client"]
|
||||||
path = sdk_client
|
path = 4NK_modules/sdk_client
|
||||||
url = git@git.4nkweb.com:4nk/sdk_client.git
|
url = git@git.4nkweb.com:4nk/sdk_client.git
|
||||||
branch = ext
|
branch = ext
|
||||||
[submodule "sdk_common"]
|
[submodule "sdk_common"]
|
||||||
path = sdk_common
|
path = 4NK_modules/sdk_common
|
||||||
url = git@git.4nkweb.com:4nk/sdk_common.git
|
url = git@git.4nkweb.com:4nk/sdk_common.git
|
||||||
branch = ext
|
branch = ext
|
||||||
[submodule "rust-silentPayments"]
|
[submodule "rust-silentPayments"]
|
||||||
path = rust-silentPayments
|
path = 4NK_modules/rust-silentPayments
|
||||||
url = git@github.com:Sosthene00/rust-silentPayments.git
|
url = git@github.com:Sosthene00/rust-silentPayments.git
|
||||||
branch = add-utils
|
branch = add-utils
|
||||||
[submodule "blindbit-oracle"]
|
[submodule "blindbit-oracle"]
|
||||||
path = blindbit-oracle
|
path = 4NK_modules/blindbit-oracle
|
||||||
url = https://github.com/setavenger/blindbit-oracle.git
|
url = https://github.com/setavenger/blindbit-oracle.git
|
||||||
branch = master
|
branch = master
|
||||||
[submodule "4NK_vault"]
|
[submodule "4NK_vault"]
|
||||||
path = vault
|
path = 4NK_modules/4NK_vault
|
||||||
url = git@git.4nkweb.com:4nk/4NK_vault.git
|
url = git@git.4nkweb.com:4nk/4NK_vault.git
|
||||||
branch = ext
|
branch = ext
|
||||||
|
[submodule "4NK_certificator"]
|
||||||
|
path = 4NK_certificator
|
||||||
|
url = git@git.4nkweb.com:4nk/4NK_certificator.git
|
||||||
|
branch = main
|
||||||
|
[submodule "4NK_miner"]
|
||||||
|
path = 4NK_miner
|
||||||
|
url = git@git.4nkweb.com:4nk/4NK_miner.git
|
||||||
|
branch = main
|
||||||
|
[submodule "4NK_web_status"]
|
||||||
|
path = 4NK_web_status
|
||||||
|
url = git@git.4nkweb.com:4nk/4NK_web_status.git
|
||||||
|
branch = main
|
||||||
|
|
||||||
|
[submodule "lecoffre-front"]
|
||||||
|
path = projects/lecoffre/lecoffre-front
|
||||||
|
url = git@git.4nkweb.com:4nk/lecoffre-front.git
|
||||||
|
branch = ext
|
||||||
|
[submodule "lecoffre_node"]
|
||||||
|
path = projects/lecoffre/lecoffre_node
|
||||||
|
url = git@git.4nkweb.com:4nk/lecoffre_node.git
|
||||||
|
branch = ext
|
1
4NK_modules/4NK_certificator
Submodule
1
4NK_modules/4NK_certificator
Submodule
@ -0,0 +1 @@
|
|||||||
|
Subproject commit 8006ba998656a3d80dc0f9a3cdd4668cec0aadcd
|
1
4NK_modules/4NK_miner
Submodule
1
4NK_modules/4NK_miner
Submodule
@ -0,0 +1 @@
|
|||||||
|
Subproject commit 5b504e2679dc695bf0fac7faeef55bacc37b824f
|
1
4NK_modules/4NK_vault
Submodule
1
4NK_modules/4NK_vault
Submodule
@ -0,0 +1 @@
|
|||||||
|
Subproject commit f4a8dd2e7fc9371c3d591f0afcc09b0e54bdf872
|
1
4NK_modules/4NK_web_status
Submodule
1
4NK_modules/4NK_web_status
Submodule
@ -0,0 +1 @@
|
|||||||
|
Subproject commit 643bda3eef1eac751b9e75f6a71b8033041a7a17
|
1
4NK_modules/rust-silentpayments
Submodule
1
4NK_modules/rust-silentpayments
Submodule
@ -0,0 +1 @@
|
|||||||
|
Subproject commit 2c3deb8831ce2ed2201b386bf51cb450f26da6d8
|
1
4NK_modules/sdk-signer-client
Submodule
1
4NK_modules/sdk-signer-client
Submodule
@ -0,0 +1 @@
|
|||||||
|
Subproject commit ff3e14a86da668caeaf654d94db8ad939820b0b9
|
1
4NK_modules/sdk_client
Submodule
1
4NK_modules/sdk_client
Submodule
@ -0,0 +1 @@
|
|||||||
|
Subproject commit c09135c4eb785fa5ef242cd106bb1e628d5f68fa
|
1
4NK_modules/sdk_common
Submodule
1
4NK_modules/sdk_common
Submodule
@ -0,0 +1 @@
|
|||||||
|
Subproject commit 72bb22282737d9140cfd2fbfc9111b9c10d7e3ff
|
1
4NK_modules/sdk_signer
Submodule
1
4NK_modules/sdk_signer
Submodule
@ -0,0 +1 @@
|
|||||||
|
Subproject commit 089bf06502eef2fb49e99ba9e614ddf3cbf7c3a0
|
1
4NK_modules/skeleton
Submodule
1
4NK_modules/skeleton
Submodule
@ -0,0 +1 @@
|
|||||||
|
Subproject commit 68f6b31a6c573fcbc4addef9f5aae2b11096b25f
|
@ -252,3 +252,5 @@ docker logs blindbit-oracle | grep -i "error"
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -184,3 +184,5 @@ blindbit:
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -263,3 +263,5 @@ La nouvelle structure des variables d'environnement améliore la sécurité, la
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
153
IA_agents/prompts/prompt-deploy/scripts/nginx-config-symlink.sh
Executable file
153
IA_agents/prompts/prompt-deploy/scripts/nginx-config-symlink.sh
Executable file
@ -0,0 +1,153 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
# Script pour remplacer les configurations nginx par des liens symboliques
|
||||||
|
# vers les fichiers centralisés dans /home/debian/4NK_env/confs/nginx
|
||||||
|
|
||||||
|
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
||||||
|
ROOT_DIR="$(cd "$SCRIPT_DIR/../../../.." && pwd)"
|
||||||
|
NGINX_CONF_DIR="/home/debian/4NK_env/confs/nginx"
|
||||||
|
NGINX_ACTIVE_DIR="/etc/nginx/sites-available"
|
||||||
|
NGINX_ENABLED_DIR="/etc/nginx/sites-enabled"
|
||||||
|
|
||||||
|
echo "=========================================="
|
||||||
|
echo " Configuration Nginx - Liens Symboliques"
|
||||||
|
echo "=========================================="
|
||||||
|
|
||||||
|
# Vérifier que le répertoire de configuration centralisé existe
|
||||||
|
if [ ! -d "$NGINX_CONF_DIR" ]; then
|
||||||
|
echo "❌ Erreur: Le répertoire $NGINX_CONF_DIR n'existe pas"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "📁 Répertoire de configuration centralisé: $NGINX_CONF_DIR"
|
||||||
|
echo "📁 Répertoire nginx sites-available: $NGINX_ACTIVE_DIR"
|
||||||
|
echo "📁 Répertoire nginx sites-enabled: $NGINX_ENABLED_DIR"
|
||||||
|
|
||||||
|
# Fonction pour créer un lien symbolique
|
||||||
|
create_symlink() {
|
||||||
|
local source="$1"
|
||||||
|
local target="$2"
|
||||||
|
local description="$3"
|
||||||
|
|
||||||
|
echo "🔗 Création du lien: $description"
|
||||||
|
echo " Source: $source"
|
||||||
|
echo " Cible: $target"
|
||||||
|
|
||||||
|
# Supprimer le fichier/cible existant s'il existe
|
||||||
|
if [ -e "$target" ] || [ -L "$target" ]; then
|
||||||
|
echo " Suppression de l'ancien fichier/lien: $target"
|
||||||
|
sudo rm -f "$target"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Créer le lien symbolique
|
||||||
|
sudo ln -sf "$source" "$target"
|
||||||
|
|
||||||
|
if [ -L "$target" ]; then
|
||||||
|
echo " ✅ Lien créé avec succès"
|
||||||
|
else
|
||||||
|
echo " ❌ Erreur lors de la création du lien"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "🔧 Création des liens symboliques..."
|
||||||
|
|
||||||
|
# Lister les fichiers de configuration dans le répertoire centralisé
|
||||||
|
config_files=$(find "$NGINX_CONF_DIR" -name "*.conf" -type f)
|
||||||
|
|
||||||
|
if [ -z "$config_files" ]; then
|
||||||
|
echo "❌ Aucun fichier .conf trouvé dans $NGINX_CONF_DIR"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "📋 Fichiers de configuration trouvés:"
|
||||||
|
echo "$config_files" | while read -r file; do
|
||||||
|
echo " - $(basename "$file")"
|
||||||
|
done
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "🔗 Création des liens dans sites-available..."
|
||||||
|
|
||||||
|
# Créer les liens dans sites-available
|
||||||
|
echo "$config_files" | while read -r source_file; do
|
||||||
|
filename=$(basename "$source_file")
|
||||||
|
target_file="$NGINX_ACTIVE_DIR/$filename"
|
||||||
|
|
||||||
|
create_symlink "$source_file" "$target_file" "$filename"
|
||||||
|
done
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "📋 Configuration actuelle de nginx..."
|
||||||
|
|
||||||
|
# Lister les configurations actives (sites-available)
|
||||||
|
echo "📁 Fichiers dans sites-available:"
|
||||||
|
if [ -d "$NGINX_ACTIVE_DIR" ]; then
|
||||||
|
ls -la "$NGINX_ACTIVE_DIR" | grep -E "\.(conf|link)$" || echo " Aucun fichier .conf trouvé"
|
||||||
|
else
|
||||||
|
echo " ❌ Répertoire $NGINX_ACTIVE_DIR n'existe pas"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Lister les configurations activées (sites-enabled)
|
||||||
|
echo ""
|
||||||
|
echo "📁 Fichiers dans sites-enabled:"
|
||||||
|
if [ -d "$NGINX_ENABLED_DIR" ]; then
|
||||||
|
ls -la "$NGINX_ENABLED_DIR" | grep -E "\.(conf|link)$" || echo " Aucun fichier .conf activé"
|
||||||
|
else
|
||||||
|
echo " ❌ Répertoire $NGINX_ENABLED_DIR n'existe pas"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "🧪 Test de la configuration nginx..."
|
||||||
|
|
||||||
|
# Tester la configuration nginx
|
||||||
|
if sudo nginx -t; then
|
||||||
|
echo "✅ Configuration nginx valide"
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "🔄 Redémarrage de nginx..."
|
||||||
|
|
||||||
|
# Redémarrer nginx
|
||||||
|
if sudo systemctl reload nginx; then
|
||||||
|
echo "✅ Nginx rechargé avec succès"
|
||||||
|
else
|
||||||
|
echo "❌ Erreur lors du rechargement de nginx"
|
||||||
|
echo "🔄 Tentative de redémarrage complet..."
|
||||||
|
if sudo systemctl restart nginx; then
|
||||||
|
echo "✅ Nginx redémarré avec succès"
|
||||||
|
else
|
||||||
|
echo "❌ Erreur lors du redémarrage de nginx"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "📊 Statut de nginx:"
|
||||||
|
sudo systemctl status nginx --no-pager -l
|
||||||
|
|
||||||
|
else
|
||||||
|
echo "❌ Configuration nginx invalide"
|
||||||
|
echo "🔍 Détails de l'erreur:"
|
||||||
|
sudo nginx -t 2>&1 || true
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "=========================================="
|
||||||
|
echo "✅ Configuration nginx terminée avec succès"
|
||||||
|
echo "=========================================="
|
||||||
|
|
||||||
|
# Afficher un résumé des liens créés
|
||||||
|
echo ""
|
||||||
|
echo "📋 Résumé des liens créés:"
|
||||||
|
echo "$config_files" | while read -r source_file; do
|
||||||
|
filename=$(basename "$source_file")
|
||||||
|
target_file="$NGINX_ACTIVE_DIR/$filename"
|
||||||
|
if [ -L "$target_file" ]; then
|
||||||
|
echo " ✅ $filename -> $(readlink "$target_file")"
|
||||||
|
else
|
||||||
|
echo " ❌ $filename -> Lien non créé"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
@ -12,3 +12,6 @@ if [ ! -x "$CHECK" ]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
exec "$CHECK"
|
exec "$CHECK"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
## Consignes de production et de consultation des logs
|
## Consignes de production et de consultation des logs
|
||||||
|
|
||||||
### Centralisation des logs
|
### Centralisation des logs
|
||||||
- Dossier central: `/home/debian/4NK_env/logs/`
|
- Dossier central: `/home/debian/4NK_env/lecoffre_node/logs/`
|
||||||
- Sous-dossiers standardisés par service:
|
- Sous-dossiers standardisés par service:
|
||||||
- `nginx/`, `lecoffre-front/`, `ihm_client/`, `sdk_relay/`, `sdk_storage/`, `bitcoin/`, `blindbit/`, `miner/`, `tor/`
|
- `nginx/`, `lecoffre-front/`, `ihm_client/`, `sdk_relay/`, `sdk_storage/`, `bitcoin/`, `blindbit/`, `miner/`, `tor/`
|
||||||
- Docker Compose monte chaque service avec un volume: `/home/debian/4NK_env/logs/<service>:/var/log/<service>`
|
- Docker Compose monte chaque service avec un volume: `/home/debian/4NK_env/lecoffre_node/logs/<service>:/var/log/<service>`
|
||||||
|
|
||||||
### Instrumentation et propagation
|
### Instrumentation et propagation
|
||||||
- Nginx JSON logging via `lecoffre_node/conf/nginx/logging.conf` avec `log_format lecoffre_json` incluant: `time`, `request_id`, `remote_addr`, `host`, `method`, `uri`, `args`, `status`, `bytes`, `referer`, `user_agent`, `request_time`, `upstream_*`, `x_forwarded_for`.
|
- Nginx JSON logging via `lecoffre_node/conf/nginx/logging.conf` avec `log_format lecoffre_json` incluant: `time`, `request_id`, `remote_addr`, `host`, `method`, `uri`, `args`, `status`, `bytes`, `referer`, `user_agent`, `request_time`, `upstream_*`, `x_forwarded_for`.
|
||||||
@ -23,7 +23,7 @@
|
|||||||
- `grep '"/api/v1/idnot/' /home/debian/4NK_env/logs/nginx/lecoffre_front_access.log | jq . | tail -n 50`
|
- `grep '"/api/v1/idnot/' /home/debian/4NK_env/logs/nginx/lecoffre_front_access.log | jq . | tail -n 50`
|
||||||
|
|
||||||
### Promtail → Loki → Grafana
|
### Promtail → Loki → Grafana
|
||||||
- Promtail scrute: `/home/debian/4NK_env/logs/**` (jobs par service).
|
- Promtail scrute: `/home/debian/4NK_env/lecoffre_node/logs/**` (jobs par service).
|
||||||
- Loki reçoit sur `http://loki:3100`.
|
- Loki reçoit sur `http://loki:3100`.
|
||||||
- Grafana (local): `https://dev4.4nkweb.com/grafana/` → Explore → Datasource Loki.
|
- Grafana (local): `https://dev4.4nkweb.com/grafana/` → Explore → Datasource Loki.
|
||||||
- Requêtes utiles: `{job="lecoffre-front"}`, `{job="nginx"}`, `{job="sdk_relay"}`.
|
- Requêtes utiles: `{job="lecoffre-front"}`, `{job="nginx"}`, `{job="sdk_relay"}`.
|
||||||
|
@ -1,45 +0,0 @@
|
|||||||
# Configuration globale
|
|
||||||
signet=1
|
|
||||||
server=1
|
|
||||||
datadir=/home/debian/4NK_env/logs/bitcoin
|
|
||||||
|
|
||||||
[signet]
|
|
||||||
daemon=0
|
|
||||||
txindex=1
|
|
||||||
upnp=1
|
|
||||||
#debug=1
|
|
||||||
#loglevel=debug
|
|
||||||
logthreadnames=1
|
|
||||||
onion=tor:9050
|
|
||||||
listenonion=1
|
|
||||||
onlynet=onion
|
|
||||||
|
|
||||||
# Paramètres RPC
|
|
||||||
rpcauth=bitcoin:c8ea921c7357bd6a5a8a7c43a12350a7$955e25b17672987b17c5a12f12cd8b9c1d38f0f86201c8cd47fc431f2e1c7956
|
|
||||||
rpcallowip=0.0.0.0/0
|
|
||||||
rpcworkqueue=32
|
|
||||||
rpcthreads=4
|
|
||||||
rpcdoccheck=1
|
|
||||||
|
|
||||||
# Paramètres ZMQ
|
|
||||||
zmqpubhashblock=tcp://:29000
|
|
||||||
zmqpubrawtx=tcp://:29001
|
|
||||||
|
|
||||||
listen=1
|
|
||||||
bind=:38333
|
|
||||||
rpcbind=:38332
|
|
||||||
rpcport=38332
|
|
||||||
fallbackfee=0.0001
|
|
||||||
blockfilterindex=1
|
|
||||||
datacarriersize=205
|
|
||||||
acceptnonstdtxn=1
|
|
||||||
dustrelayfee=0.00000001
|
|
||||||
minrelaytxfee=0.00000001
|
|
||||||
prune=0
|
|
||||||
signetchallenge=0020341c43803863c252df326e73574a27d7e19322992061017b0dc893e2eab90821
|
|
||||||
wallet=mining
|
|
||||||
wallet=watchonly
|
|
||||||
maxtxfee=1
|
|
||||||
addnode=tlv2yqamflv22vfdzy2hha2nwmt6zrwrhjjzz4lx7qyq7lyc6wfhabyd.onion
|
|
||||||
addnode=6xi33lwwslsx3yi3f7c56wnqtdx4v73vj2up3prrwebpwbz6qisnqbyd.onion
|
|
||||||
addnode=id7e3r3d2epen2v65jebjhmx77aimu7oyhcg45zadafypr4crqsytfid.onion
|
|
@ -1,18 +0,0 @@
|
|||||||
# Configuration Blindbit Oracle
|
|
||||||
host = "0.0.0.0:8000"
|
|
||||||
chain = "signet"
|
|
||||||
rpc_endpoint = "http://bitcoin:38332"
|
|
||||||
cookie_path = "/home/debian/4NK_env/data/bitcoin/signet/.cookie"
|
|
||||||
rpc_user = ""
|
|
||||||
rpc_pass = ""
|
|
||||||
sync_start_height = 1
|
|
||||||
|
|
||||||
# Performance
|
|
||||||
max_parallel_tweak_computations = 4
|
|
||||||
max_parallel_requests = 4
|
|
||||||
|
|
||||||
# Index
|
|
||||||
tweaks_only = 0
|
|
||||||
tweaks_full_basic = 1
|
|
||||||
tweaks_full_with_dust_filter = 1
|
|
||||||
tweaks_cut_through_with_dust_filter = 1
|
|
@ -1,57 +0,0 @@
|
|||||||
# Configuration Grafana avancée pour LeCoffre Node
|
|
||||||
|
|
||||||
[server]
|
|
||||||
# URL publique de Grafana
|
|
||||||
root_url = https://dev4.4nkweb.com/grafana
|
|
||||||
|
|
||||||
# Configuration de sécurité
|
|
||||||
enable_gzip = true
|
|
||||||
cert_file =
|
|
||||||
cert_key =
|
|
||||||
enforce_domain = false
|
|
||||||
|
|
||||||
[security]
|
|
||||||
# Configuration de sécurité
|
|
||||||
admin_user = admin
|
|
||||||
admin_password = admin123
|
|
||||||
secret_key = lecoffre_grafana_secret_key_2025
|
|
||||||
|
|
||||||
# Configuration des sessions
|
|
||||||
cookie_secure = true
|
|
||||||
cookie_samesite = strict
|
|
||||||
|
|
||||||
[users]
|
|
||||||
# Configuration des utilisateurs
|
|
||||||
allow_sign_up = false
|
|
||||||
allow_org_create = false
|
|
||||||
auto_assign_org = true
|
|
||||||
auto_assign_org_id = 1
|
|
||||||
auto_assign_org_role = Viewer
|
|
||||||
|
|
||||||
[auth.anonymous]
|
|
||||||
# Accès anonyme désactivé pour la sécurité
|
|
||||||
enabled = false
|
|
||||||
|
|
||||||
[dashboards]
|
|
||||||
# Configuration des dashboards
|
|
||||||
default_home_dashboard_path = /home/debian/4NK_env/confs/grafana/dashboards/lecoffre-overview.json
|
|
||||||
|
|
||||||
[unified_alerting]
|
|
||||||
# Configuration des alertes unifiées
|
|
||||||
enabled = true
|
|
||||||
|
|
||||||
[log]
|
|
||||||
# Configuration des logs Grafana
|
|
||||||
mode = console
|
|
||||||
level = info
|
|
||||||
format = json
|
|
||||||
|
|
||||||
[metrics]
|
|
||||||
# Métriques Prometheus
|
|
||||||
enabled = true
|
|
||||||
basic_auth_username =
|
|
||||||
basic_auth_password =
|
|
||||||
|
|
||||||
[feature_toggles]
|
|
||||||
# Fonctionnalités activées
|
|
||||||
enable = traceqlEditor
|
|
@ -1,76 +0,0 @@
|
|||||||
auth_enabled: false
|
|
||||||
|
|
||||||
server:
|
|
||||||
http_listen_port: 3100
|
|
||||||
grpc_listen_port: 9096
|
|
||||||
http_listen_address: 0.0.0.0
|
|
||||||
grpc_listen_address: 0.0.0.0
|
|
||||||
|
|
||||||
common:
|
|
||||||
instance_addr: 0.0.0.0
|
|
||||||
path_prefix: /loki
|
|
||||||
storage:
|
|
||||||
filesystem:
|
|
||||||
chunks_directory: /loki/chunks
|
|
||||||
rules_directory: /loki/rules
|
|
||||||
replication_factor: 1
|
|
||||||
ring:
|
|
||||||
kvstore:
|
|
||||||
store: inmemory
|
|
||||||
|
|
||||||
schema_config:
|
|
||||||
configs:
|
|
||||||
- from: 2020-10-24
|
|
||||||
store: tsdb
|
|
||||||
object_store: filesystem
|
|
||||||
schema: v13
|
|
||||||
index:
|
|
||||||
prefix: index_
|
|
||||||
period: 24h
|
|
||||||
|
|
||||||
ruler:
|
|
||||||
alertmanager_url: http://localhost:9093
|
|
||||||
|
|
||||||
# Configuration de l'ingester - SEULEMENT le paramètre crucial
|
|
||||||
ingester:
|
|
||||||
lifecycler:
|
|
||||||
min_ready_duration: 5s # Réduit le délai de 15s à 5s
|
|
||||||
|
|
||||||
# Configuration des limites
|
|
||||||
limits_config:
|
|
||||||
reject_old_samples: true
|
|
||||||
reject_old_samples_max_age: 168h
|
|
||||||
max_cache_freshness_per_query: 10m
|
|
||||||
split_queries_by_interval: 15m
|
|
||||||
max_query_parallelism: 32
|
|
||||||
max_streams_per_user: 0
|
|
||||||
max_line_size: 256000
|
|
||||||
ingestion_rate_mb: 16
|
|
||||||
ingestion_burst_size_mb: 32
|
|
||||||
per_stream_rate_limit: 3MB
|
|
||||||
per_stream_rate_limit_burst: 15MB
|
|
||||||
max_entries_limit_per_query: 5000
|
|
||||||
max_query_series: 500
|
|
||||||
max_query_length: 721h
|
|
||||||
cardinality_limit: 100000
|
|
||||||
max_streams_matchers_per_query: 1000
|
|
||||||
max_concurrent_tail_requests: 10
|
|
||||||
|
|
||||||
# Configuration du storage
|
|
||||||
storage_config:
|
|
||||||
tsdb_shipper:
|
|
||||||
active_index_directory: /loki/tsdb-index
|
|
||||||
cache_location: /loki/tsdb-cache
|
|
||||||
filesystem:
|
|
||||||
directory: /loki/chunks
|
|
||||||
|
|
||||||
# Configuration du compactor
|
|
||||||
compactor:
|
|
||||||
working_directory: /loki/compactor
|
|
||||||
compaction_interval: 10m
|
|
||||||
retention_enabled: false
|
|
||||||
delete_request_store: filesystem
|
|
||||||
|
|
||||||
# Analytics désactivés
|
|
||||||
analytics:
|
|
||||||
reporting_enabled: false
|
|
@ -1,107 +0,0 @@
|
|||||||
server:
|
|
||||||
http_listen_port: 8090
|
|
||||||
grpc_listen_port: 0
|
|
||||||
|
|
||||||
positions:
|
|
||||||
filename: /tmp/positions.yaml
|
|
||||||
|
|
||||||
clients:
|
|
||||||
- url: http://loki:3100/loki/api/v1/push
|
|
||||||
|
|
||||||
scrape_configs:
|
|
||||||
# Bitcoin Signet Logs
|
|
||||||
- job_name: bitcoin
|
|
||||||
static_configs:
|
|
||||||
- targets:
|
|
||||||
- localhost
|
|
||||||
labels:
|
|
||||||
job: bitcoin
|
|
||||||
service: bitcoin-signet
|
|
||||||
__path__: /home/debian/4NK_env/lecoffre_node/logs/bitcoin/*.log
|
|
||||||
|
|
||||||
# Blindbit Oracle Logs
|
|
||||||
- job_name: blindbit
|
|
||||||
static_configs:
|
|
||||||
- targets:
|
|
||||||
- localhost
|
|
||||||
labels:
|
|
||||||
job: blindbit
|
|
||||||
service: blindbit-oracle
|
|
||||||
__path__: /home/debian/4NK_env/lecoffre_node/logs/blindbit-oracle/*.log
|
|
||||||
|
|
||||||
# SDK Relay Logs
|
|
||||||
- job_name: sdk_relay
|
|
||||||
static_configs:
|
|
||||||
- targets:
|
|
||||||
- localhost
|
|
||||||
labels:
|
|
||||||
job: sdk_relay
|
|
||||||
service: sdk_relay
|
|
||||||
__path__: /home/debian/4NK_env/lecoffre_node/logs/sdk_relay/*.log
|
|
||||||
|
|
||||||
# SDK Storage Logs
|
|
||||||
- job_name: sdk_storage
|
|
||||||
static_configs:
|
|
||||||
- targets:
|
|
||||||
- localhost
|
|
||||||
labels:
|
|
||||||
job: sdk_storage
|
|
||||||
service: sdk_storage
|
|
||||||
__path__: /home/debian/4NK_env/lecoffre_node/logs/sdk_storage/*.log
|
|
||||||
|
|
||||||
# LeCoffre Frontend Logs
|
|
||||||
- job_name: lecoffre-front
|
|
||||||
static_configs:
|
|
||||||
- targets:
|
|
||||||
- localhost
|
|
||||||
labels:
|
|
||||||
job: lecoffre-front
|
|
||||||
service: lecoffre-front
|
|
||||||
__path__: /home/debian/4NK_env/lecoffre_node/logs/lecoffre-front/*.log
|
|
||||||
|
|
||||||
# IHM Client Logs
|
|
||||||
- job_name: ihm_client
|
|
||||||
static_configs:
|
|
||||||
- targets:
|
|
||||||
- localhost
|
|
||||||
labels:
|
|
||||||
job: ihm_client
|
|
||||||
service: ihm_client
|
|
||||||
__path__: /home/debian/4NK_env/lecoffre_node/logs/ihm_client/*.log
|
|
||||||
|
|
||||||
# Miner Logs
|
|
||||||
- job_name: miner
|
|
||||||
static_configs:
|
|
||||||
- targets:
|
|
||||||
- localhost
|
|
||||||
labels:
|
|
||||||
job: miner
|
|
||||||
service: signet_miner
|
|
||||||
__path__: /home/debian/4NK_env/lecoffre_node/logs/miner/*.log
|
|
||||||
|
|
||||||
# Tor Logs
|
|
||||||
- job_name: tor
|
|
||||||
static_configs:
|
|
||||||
- targets:
|
|
||||||
- localhost
|
|
||||||
labels:
|
|
||||||
job: tor
|
|
||||||
service: tor-proxy
|
|
||||||
__path__: /home/debian/4NK_env/lecoffre_node/logs/tor/*.log
|
|
||||||
|
|
||||||
# Docker Container Logs
|
|
||||||
- job_name: docker
|
|
||||||
docker_sd_configs:
|
|
||||||
- host: unix:///var/run/docker.sock
|
|
||||||
refresh_interval: 5s
|
|
||||||
filters:
|
|
||||||
- name: label
|
|
||||||
values: ["com.centurylinklabs.watchtower.enable=true"]
|
|
||||||
relabel_configs:
|
|
||||||
- source_labels: ['__meta_docker_container_name']
|
|
||||||
regex: '/?(.*)'
|
|
||||||
target_label: 'container_name'
|
|
||||||
- source_labels: ['__meta_docker_container_log_stream']
|
|
||||||
target_label: 'logstream'
|
|
||||||
- source_labels: ['__meta_docker_container_label_logging_job_name']
|
|
||||||
target_label: 'job'
|
|
@ -1,51 +0,0 @@
|
|||||||
[supervisord]
|
|
||||||
nodaemon=true
|
|
||||||
user=root
|
|
||||||
logfile=/var/log/supervisor/supervisord.log
|
|
||||||
pidfile=/var/run/supervisord.pid
|
|
||||||
childlogdir=/var/log/supervisor
|
|
||||||
|
|
||||||
[unix_http_server]
|
|
||||||
file=/var/run/supervisor.sock
|
|
||||||
chmod=0700
|
|
||||||
|
|
||||||
[supervisorctl]
|
|
||||||
serverurl=unix:///var/run/supervisor.sock
|
|
||||||
|
|
||||||
[rpcinterface:supervisor]
|
|
||||||
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
|
|
||||||
|
|
||||||
[program:nginx]
|
|
||||||
command=/usr/sbin/nginx -g "daemon off;"
|
|
||||||
autostart=true
|
|
||||||
autorestart=true
|
|
||||||
stderr_logfile=/var/log/supervisor/nginx.err.log
|
|
||||||
stdout_logfile=/var/log/supervisor/nginx.out.log
|
|
||||||
user=root
|
|
||||||
|
|
||||||
[program:docker-compose]
|
|
||||||
command=/app/scripts/startup.sh
|
|
||||||
directory=/app
|
|
||||||
autostart=true
|
|
||||||
autorestart=true
|
|
||||||
stderr_logfile=/var/log/supervisor/docker-compose.err.log
|
|
||||||
stdout_logfile=/var/log/supervisor/docker-compose.out.log
|
|
||||||
user=appuser
|
|
||||||
environment=HOME="/app"
|
|
||||||
|
|
||||||
[program:cron]
|
|
||||||
command=/usr/sbin/cron -f
|
|
||||||
autostart=true
|
|
||||||
autorestart=true
|
|
||||||
stderr_logfile=/var/log/supervisor/cron.err.log
|
|
||||||
stdout_logfile=/var/log/supervisor/cron.out.log
|
|
||||||
user=root
|
|
||||||
|
|
||||||
[program:logrotate]
|
|
||||||
command=/usr/sbin/logrotate /etc/logrotate.d/lecoffre
|
|
||||||
autostart=true
|
|
||||||
autorestart=false
|
|
||||||
startsecs=0
|
|
||||||
exitcodes=0
|
|
||||||
user=root
|
|
||||||
|
|
@ -1,21 +0,0 @@
|
|||||||
# Configuration Tor pour LeCoffre Node
|
|
||||||
# Écoute sur 127.0.0.1 pour la sécurité
|
|
||||||
|
|
||||||
# Port SOCKS pour les connexions sortantes
|
|
||||||
SOCKSPort 127.0.0.1:9050
|
|
||||||
|
|
||||||
# Port de contrôle (désactivé pour la sécurité)
|
|
||||||
# ControlPort 127.0.0.1:9050
|
|
||||||
|
|
||||||
# Configuration de base
|
|
||||||
Log notice file /home/debian/4NK_env/logs/tor/tor.log
|
|
||||||
DataDirectory /home/debian/4NK_env/data/tor
|
|
||||||
|
|
||||||
# Configuration réseau
|
|
||||||
ClientOnly 1
|
|
||||||
SafeLogging 1
|
|
||||||
WarnUnsafeSocks 1
|
|
||||||
|
|
||||||
# Désactiver les services cachés
|
|
||||||
HiddenServiceDir /home/debian/4NK_env/data/tor/hidden_service/
|
|
||||||
HiddenServicePort 80 127.0.0.1:80
|
|
1140
docs/CERTIFICATOR_SPECIFICATION.md
Normal file
1140
docs/CERTIFICATOR_SPECIFICATION.md
Normal file
File diff suppressed because it is too large
Load Diff
@ -189,3 +189,5 @@ Les scripts ont été mis à jour pour utiliser la nouvelle structure :
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -1 +0,0 @@
|
|||||||
Subproject commit 041ff5e98f1236b4e5189f878e957274b383c3e7
|
|
@ -1 +0,0 @@
|
|||||||
Subproject commit 67a1a48fb63cb4d35d61489cf3c341a27a3c94fb
|
|
1
projects/lecoffre/lecoffre-front
Submodule
1
projects/lecoffre/lecoffre-front
Submodule
@ -0,0 +1 @@
|
|||||||
|
Subproject commit 0bed1cecc91505adb5e30bde48e5ff189b078731
|
1
projects/lecoffre/lecoffre_node
Submodule
1
projects/lecoffre/lecoffre_node
Submodule
@ -0,0 +1 @@
|
|||||||
|
Subproject commit 35a209ce8b9109830b4b24e89285f25c0320b9af
|
@ -229,3 +229,5 @@ done
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -112,3 +112,5 @@ echo "Test API: api_test_${TIMESTAMP}.txt"
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -90,3 +90,5 @@ echo -e "${CYAN}========================================${NC}"
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -28,3 +28,5 @@ exit 1
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -28,3 +28,5 @@ exit 1
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
89
scripts/push_modules.sh
Normal file
89
scripts/push_modules.sh
Normal file
@ -0,0 +1,89 @@
|
|||||||
|
#!/usr/bin/env sh
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
# This script prepares and pushes local module sources to their Gitea remotes.
|
||||||
|
# It is idempotent and safe to re-run.
|
||||||
|
|
||||||
|
ROOT="/home/debian/4NK_env"
|
||||||
|
MOD_ROOT="$ROOT/4NK_modules"
|
||||||
|
|
||||||
|
GIT="/usr/bin/git"
|
||||||
|
|
||||||
|
log() { printf "%s\n" "$*"; }
|
||||||
|
|
||||||
|
ensure_dir() {
|
||||||
|
[ -d "$1" ] || mkdir -p "$1"
|
||||||
|
}
|
||||||
|
|
||||||
|
copy_if_exists() {
|
||||||
|
src="$1"; dst="$2"
|
||||||
|
if [ -d "$src" ]; then
|
||||||
|
log "[copy] $src -> $dst"
|
||||||
|
ensure_dir "$dst"
|
||||||
|
# Copy all contents (including dotfiles) without nuking existing .git
|
||||||
|
(cd "$src" && tar cf - .) | (cd "$dst" && tar xpf -)
|
||||||
|
else
|
||||||
|
log "[skip] source not found: $src"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
git_init_and_push() {
|
||||||
|
module_dir="$1" # e.g. /home/debian/4NK_env/4NK_modules/4NK_miner
|
||||||
|
remote_url="$2" # e.g. git@git.4nkweb.com:4nk/4NK_miner.git
|
||||||
|
commit_msg="$3" # commit message
|
||||||
|
|
||||||
|
ensure_dir "$module_dir"
|
||||||
|
cd "$module_dir"
|
||||||
|
|
||||||
|
if [ ! -d .git ]; then
|
||||||
|
$GIT init
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Configure default branch ext
|
||||||
|
$GIT checkout -B ext
|
||||||
|
|
||||||
|
# Set remote
|
||||||
|
$GIT remote remove origin 2>/dev/null || true
|
||||||
|
$GIT remote add origin "$remote_url"
|
||||||
|
|
||||||
|
# Stage changes
|
||||||
|
$GIT add -A
|
||||||
|
|
||||||
|
# Commit if there are changes
|
||||||
|
if ! $GIT diff --cached --quiet; then
|
||||||
|
$GIT commit -m "$commit_msg"
|
||||||
|
else
|
||||||
|
log "[info] no changes to commit in $(basename "$module_dir")"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Push ext
|
||||||
|
$GIT push -u origin ext
|
||||||
|
}
|
||||||
|
|
||||||
|
main() {
|
||||||
|
# 1) Prepare module roots
|
||||||
|
ensure_dir "$MOD_ROOT/4NK_miner"
|
||||||
|
ensure_dir "$MOD_ROOT/4NK_web_status"
|
||||||
|
|
||||||
|
# 2) Copy sources from projects if present
|
||||||
|
copy_if_exists "$ROOT/projects/lecoffre/lecoffre_node/miner" "$MOD_ROOT/4NK_miner"
|
||||||
|
copy_if_exists "$ROOT/projects/lecoffre/lecoffre_node/web" "$MOD_ROOT/4NK_web_status"
|
||||||
|
|
||||||
|
# 3) Push 4NK_miner
|
||||||
|
git_init_and_push \
|
||||||
|
"$MOD_ROOT/4NK_miner" \
|
||||||
|
"git@git.4nkweb.com:4nk/4NK_miner.git" \
|
||||||
|
"chore: initial import from lecoffre_node/miner"
|
||||||
|
|
||||||
|
# 4) Push 4NK_web_status
|
||||||
|
git_init_and_push \
|
||||||
|
"$MOD_ROOT/4NK_web_status" \
|
||||||
|
"git@git.4nkweb.com:4nk/4NK_web_status.git" \
|
||||||
|
"chore: initial import from lecoffre_node/web"
|
||||||
|
|
||||||
|
log "[OK] Modules pushed. Optionally register as submodules in the root repo:"
|
||||||
|
log " cd $ROOT && git submodule add -f git@git.4nkweb.com:4nk/4NK_miner.git 4NK_modules/4NK_miner"
|
||||||
|
log " cd $ROOT && git submodule add -f git@git.4nkweb.com:4nk/4NK_web_status.git 4NK_modules/4NK_web_status"
|
||||||
|
}
|
||||||
|
|
||||||
|
main "$@"
|
1
vault
1
vault
@ -1 +0,0 @@
|
|||||||
Subproject commit 4d314db8898c66f25420824a65b7a71e4fa6e823
|
|
Loading…
x
Reference in New Issue
Block a user