ncantu 26a53327a4 Enhance: Complete dashboard documentation and new services integration
**Motivations:**
- Complete documentation for dashboard, domains, ports and environment configuration
- Add new services (ClamAV API, Watermark API) to the infrastructure
- Enhance dashboard with new pages and improved functionality
- Improve deployment scripts and service configurations

**Root causes:**
- Missing comprehensive documentation for infrastructure setup
- Need for antivirus scanning service integration
- Need for watermark service integration
- Dashboard required additional pages and features

**Correctifs:**
- Added comprehensive documentation in docs/ (DASHBOARD.md, DOMAINS_AND_PORTS.md, ENVIRONMENT.md)
- Updated systemd service files with proper environment variables
- Enhanced nginx proxy configuration script
- Updated maintenance documentation

**Evolutions:**
- Added new ClamAV API service (api-clamav) for file scanning
- Added new Watermark API service (api-filigrane) for document watermarking
- Enhanced signet-dashboard with new learn.html page
- Improved dashboard UI with better styles and navigation
- Enhanced app.js with new functionality and better error handling
- Updated API documentation page with complete endpoint descriptions
- Added deployment scripts for watermark and nginx configuration
- Updated hash and UTXO lists with latest data
- Enhanced server.js with new routes and improved Bitcoin RPC integration

**Pages affectées:**
- docs/DASHBOARD.md: New comprehensive dashboard documentation
- docs/DOMAINS_AND_PORTS.md: New infrastructure domains and ports documentation
- docs/ENVIRONMENT.md: New environment variables documentation
- docs/MAINTENANCE.md: Updated maintenance procedures
- docs/README.md: Updated main documentation
- signet-dashboard/public/app.js: Enhanced with new features
- signet-dashboard/public/styles.css: Improved styling
- signet-dashboard/public/index.html: Enhanced main page
- signet-dashboard/public/learn.html: New educational page
- signet-dashboard/public/api-docs.html: Enhanced API documentation
- signet-dashboard/public/hash-list.html: Updated hash list page
- signet-dashboard/public/utxo-list.html: Updated UTXO list page
- signet-dashboard/public/join-signet.html: Updated join signet page
- signet-dashboard/src/server.js: Enhanced server with new routes
- signet-dashboard/start.sh: Updated startup script
- signet-dashboard/signet-dashboard.service: Updated systemd service
- api-anchorage/anchorage-api.service: Updated systemd service
- api-faucet/faucet-api.service: Updated systemd service
- configure-nginx-proxy.sh: Enhanced nginx configuration script
- add-watermark-certificate.sh: New watermark certificate script
- deploy-watermark-nginx.sh: New deployment script
- api-clamav/: New ClamAV API service
- api-filigrane/: New Watermark API service
- hash_list.txt, utxo_list.txt: Updated with latest data
- anchor_count.txt: Updated anchor count
2026-01-25 17:43:05 +01:00

441 lines
16 KiB
HTML
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Rejoindre le Réseau Signet Custom - Bitcoin Ancrage</title>
<link rel="stylesheet" href="styles.css">
<script src="https://cdn.jsdelivr.net/npm/qrcode@1.5.3/build/qrcode.min.js"></script>
<script>
// Vérifier que la bibliothèque QRCode est chargée
window.addEventListener('load', function() {
if (typeof QRCode === 'undefined') {
console.error('Bibliothèque QRCode non chargée');
} else {
console.log('Bibliothèque QRCode chargée');
}
});
</script>
<style>
.join-section {
margin-bottom: 40px;
}
.config-section {
background: var(--card-background);
padding: 30px;
border-radius: 10px;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
margin-bottom: 30px;
}
.config-section h2 {
color: var(--primary-color);
margin-bottom: 20px;
font-size: 1.8em;
}
.config-code {
background: #1e1e1e;
color: #d4d4d4;
padding: 20px;
border-radius: 5px;
font-family: 'Courier New', monospace;
font-size: 0.9em;
line-height: 1.6;
overflow-x: auto;
white-space: pre;
margin: 20px 0;
}
.copy-button {
background: var(--primary-color);
color: white;
border: none;
padding: 10px 20px;
border-radius: 5px;
cursor: pointer;
font-size: 1em;
margin-top: 10px;
transition: background 0.3s;
}
.copy-button:hover {
background: #e0820d;
}
.copy-button:active {
transform: scale(0.98);
}
.payment-section {
background: var(--card-background);
padding: 30px;
border-radius: 10px;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
margin-bottom: 30px;
text-align: center;
}
.payment-section h2 {
color: var(--primary-color);
margin-bottom: 20px;
font-size: 1.8em;
}
.payment-info {
margin: 20px 0;
}
.payment-amount {
font-size: 1.5em;
font-weight: bold;
color: var(--primary-color);
margin: 10px 0;
}
.payment-address {
font-family: 'Courier New', monospace;
background: #f5f5f5;
padding: 15px;
border-radius: 5px;
margin: 15px 0;
word-break: break-all;
font-size: 0.9em;
}
.qr-code-container {
margin: 30px 0;
display: flex;
justify-content: center;
align-items: center;
flex-direction: column;
}
#qrcode {
background: white;
padding: 20px;
border-radius: 10px;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
}
.wallet-section {
background: var(--card-background);
padding: 30px;
border-radius: 10px;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
margin-bottom: 30px;
}
.wallet-section h2 {
color: var(--primary-color);
margin-bottom: 20px;
font-size: 1.8em;
}
.wallet-checkbox {
display: flex;
align-items: center;
margin: 20px 0;
padding: 15px;
background: #f5f5f5;
border-radius: 5px;
}
.wallet-checkbox input[type="checkbox"] {
width: 20px;
height: 20px;
margin-right: 15px;
cursor: pointer;
}
.wallet-checkbox label {
cursor: pointer;
font-size: 1.1em;
}
.info-box {
background: #e7f3ff;
border-left: 4px solid #2196F3;
padding: 15px;
margin: 20px 0;
border-radius: 5px;
}
.info-box p {
margin: 5px 0;
}
.success-message {
background: #d4edda;
border-left: 4px solid var(--success-color);
padding: 15px;
margin: 20px 0;
border-radius: 5px;
color: #155724;
display: none;
}
.back-link {
display: inline-block;
margin-bottom: 20px;
color: var(--primary-color);
text-decoration: none;
font-weight: bold;
}
.back-link:hover {
text-decoration: underline;
}
</style>
</head>
<body>
<div class="container">
<a href="/" class="back-link">← Retour au Dashboard</a>
<header>
<h1>Rejoindre le Réseau Signet Custom</h1>
<p class="subtitle">Configuration et accès au réseau Bitcoin Signet personnalisé</p>
</header>
<main>
<!-- Section Configuration -->
<section class="join-section">
<div class="config-section">
<h2>📋 Configuration bitcoin.conf</h2>
<p>Copiez cette configuration dans votre fichier <code>bitcoin.conf</code> pour rejoindre le réseau Signet custom :</p>
<div class="config-code" id="bitcoin-config">signet=1
txindex=1
blockfilterindex=1
peerblockfilters=1
coinstatsindex=1
dnsseed=0
persistmempool=1
uacomment=CustomSignet
[signet]
daemon=1
listen=1
server=1
discover=1
signetchallenge=5121028b8d4cea1b3d8582babc8405bc618fbbb281c0f64e6561aa85968251931cd0a651ae
rpcbind=0.0.0.0:38332
rpcallowip=0.0.0.0/0
whitelist=0.0.0.0/0
fallbackfee=0.0002
addnode=anchorage.certificator.4nkweb.com:38333</div>
<button class="copy-button" onclick="copyConfig()">📋 Copier la configuration</button>
<div class="info-box">
<p><strong>Note importante :</strong></p>
<p>• Remplacez <code>rpcuser</code> et <code>rpcpassword</code> par vos propres identifiants RPC</p>
<p>• Le port P2P par défaut est <code>38333</code></p>
<p>• Le port RPC par défaut est <code>38332</code></p>
<p>• L'adresse <code>anchorage.certificator.4nkweb.com:38333</code> est le nœud principal du réseau</p>
</div>
</div>
</section>
<!-- Section Paiement -->
<section class="join-section">
<div class="payment-section">
<h2>💳 Accès au Wallet de Mining</h2>
<p>Pour recevoir le wallet de mining et les clés nécessaires pour miner sur le réseau, effectuez un paiement de :</p>
<div class="payment-amount">0,0065 BTC</div>
<p>à l'adresse suivante :</p>
<div class="payment-address" id="payment-address">bc1qerauk5yhqytl6z93ckvwkylup8s0256uenzg9y</div>
<button class="copy-button" onclick="copyAddress()">📋 Copier l'adresse</button>
<div class="qr-code-container">
<div id="qrcode"></div>
</div>
<div class="wallet-checkbox">
<input type="checkbox" id="wallet-request" onchange="updatePaymentMessage()">
<label for="wallet-request">Je souhaite recevoir le wallet de mining après le paiement</label>
</div>
<div class="info-box" id="payment-info">
<p><strong>Instructions :</strong></p>
<p>1. Effectuez le paiement de 0,0065 BTC à l'adresse ci-dessus</p>
<p>2. Cochez la case ci-dessus si vous souhaitez recevoir le wallet de mining</p>
<p>3. Après confirmation du paiement, vous recevrez les informations nécessaires</p>
</div>
<div class="success-message" id="payment-success">
<p><strong>✅ Paiement reçu !</strong></p>
<p>Votre demande a été enregistrée. Vous recevrez le wallet de mining sous peu.</p>
</div>
</div>
</section>
<!-- Section Informations Supplémentaires -->
<section class="join-section">
<div class="wallet-section">
<h2> Informations Supplémentaires</h2>
<div class="info-box">
<p><strong>Qu'est-ce que le wallet de mining ?</strong></p>
<p>Le wallet de mining contient :</p>
<ul style="margin-left: 20px; margin-top: 10px;">
<li>La clé privée (PRIVKEY) nécessaire pour miner des blocs</li>
<li>Les paramètres de configuration pour le mining (NBITS, BLOCKPRODUCTIONDELAY)</li>
<li>Les instructions complètes pour configurer votre nœud en mode mining</li>
</ul>
</div>
<div class="info-box">
<p><strong>Que se passe-t-il après le paiement ?</strong></p>
<p>Une fois le paiement confirmé (généralement après 1 confirmation), vous recevrez par email :</p>
<ul style="margin-left: 20px; margin-top: 10px;">
<li>Les fichiers de configuration complets</li>
<li>La clé privée du signet (si vous avez coché la case)</li>
<li>Les instructions détaillées pour démarrer votre nœud</li>
</ul>
</div>
<div class="info-box">
<p><strong>Besoin d'aide ?</strong></p>
<p>Pour toute question, consultez la documentation complète dans le dépôt GitHub ou contactez l'équipe.</p>
</div>
</div>
</section>
</main>
<footer>
<p>Bitcoin Ancrage Dashboard - Équipe 4NK</p>
<a href="https://git.4nkweb.com/4nk/anchorage_layer_simple.git" target="_blank" rel="noopener noreferrer" class="git-link" title="Voir le code source sur Git">
<svg class="git-icon" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<path d="M12 0c-6.626 0-12 5.373-12 12 0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 1.983-.399 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576 4.765-1.589 8.199-6.086 8.199-11.386 0-6.627-5.373-12-12-12z"/>
</svg>
</a>
</footer>
</div>
<script>
const PAYMENT_ADDRESS = 'bc1qerauk5yhqytl6z93ckvwkylup8s0256uenzg9y';
const PAYMENT_AMOUNT = 0.0065;
// Générer le QR code au chargement de la page
function initQRCode() {
// Attendre que le DOM soit prêt et que la bibliothèque soit chargée
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', generateQRCode);
} else {
// Si le DOM est déjà chargé, attendre un peu pour la bibliothèque
setTimeout(generateQRCode, 100);
}
}
function generateQRCode() {
const qrElement = document.getElementById('qrcode');
if (!qrElement) {
console.error('Élément QR code non trouvé');
return;
}
// Vérifier que la bibliothèque QRCode est disponible
if (typeof QRCode === 'undefined') {
console.error('Bibliothèque QRCode non disponible, réessai...');
setTimeout(generateQRCode, 500);
return;
}
const paymentURI = `bitcoin:${PAYMENT_ADDRESS}?amount=${PAYMENT_AMOUNT}`;
// Vider l'élément avant de générer le QR code
qrElement.innerHTML = '';
// Utiliser toDataURL pour générer une image
QRCode.toDataURL(paymentURI, {
width: 300,
margin: 2,
color: {
dark: '#000000',
light: '#FFFFFF'
}
}, (error, url) => {
if (error) {
console.error('Erreur lors de la génération du QR code:', error);
qrElement.innerHTML = '<p style="color: red; padding: 20px;">Erreur lors de la génération du QR code. Veuillez recharger la page.</p>';
} else {
// Créer une image avec le data URL
const img = document.createElement('img');
img.src = url;
img.alt = 'QR Code pour paiement Bitcoin';
img.style.display = 'block';
img.style.margin = '0 auto';
qrElement.appendChild(img);
console.log('QR code généré avec succès');
}
});
}
// Initialiser le QR code
initQRCode();
function copyConfig() {
const configText = document.getElementById('bitcoin-config')?.textContent || '';
navigator.clipboard.writeText(configText).then(() => {
const button = event?.target;
if (button) {
const originalText = button.textContent;
button.textContent = '✅ Copié !';
setTimeout(() => {
button.textContent = originalText;
}, 2000);
}
}).catch(err => {
console.error('Erreur lors de la copie:', err);
alert('Erreur lors de la copie. Veuillez sélectionner et copier manuellement.');
});
}
function copyAddress() {
navigator.clipboard.writeText(PAYMENT_ADDRESS).then(() => {
const button = event?.target;
if (button) {
const originalText = button.textContent;
button.textContent = '✅ Copié !';
setTimeout(() => {
button.textContent = originalText;
}, 2000);
}
}).catch(err => {
console.error('Erreur lors de la copie:', err);
alert('Erreur lors de la copie. Veuillez sélectionner et copier manuellement.');
});
}
function updatePaymentMessage() {
const checkbox = document.getElementById('wallet-request');
const paymentInfo = document.getElementById('payment-info');
if (checkbox && paymentInfo) {
if (checkbox.checked) {
paymentInfo.innerHTML = `
<p><strong>Instructions :</strong></p>
<p>1. Effectuez le paiement de 0,0065 BTC à l'adresse ci-dessus</p>
<p>2. ✅ Vous recevrez le wallet de mining après confirmation du paiement</p>
<p>3. Les informations vous seront envoyées par email</p>
`;
} else {
paymentInfo.innerHTML = `
<p><strong>Instructions :</strong></p>
<p>1. Effectuez le paiement de 0,0065 BTC à l'adresse ci-dessus</p>
<p>2. Cochez la case ci-dessus si vous souhaitez recevoir le wallet de mining</p>
<p>3. Après confirmation du paiement, vous recevrez les informations nécessaires</p>
`;
}
}
}
</script>
</body>
</html>