Syncing with actual files from host

This commit is contained in:
2026-10-23 11:28:43 +02:00
parent 685a1406c8
commit 30fb1a6493
7 changed files with 161 additions and 129 deletions

View File

@@ -6,36 +6,36 @@ const prices = {
users: [0.66,1.16,1.76,2.16],
options: {
lxc: {
basePrice: 31,
factor: 1.217
basePrice: 17,
factor: 1.131
},
dedicated: {
basePrice: 64,
factor: 1.753
},
onprem: {
basePrice: 111,
factor: 1.498
},
vol: [75,90,105,120]
// dedicated: {
// basePrice: 64,
// factor: 1.753
// },
// onprem: {
// basePrice: 111,
// factor: 1.498
// },
vol: [45,70,95,110]
}
},
wh: {
storage: storage_price,
sites: [3.6,4.7,6.9,9.1],
sites: [2.6,3.7,4.9,6.1],
options: {
preinstall: {
basePrice: 3.773,
basePrice: 2.773,
factor: 1.168
}
}
},
mail: {
storage: storage_price,
users: [2.1,4.2,7.3,11.4],
users: [2.1,4.2,7.3,9.4],
options: {
catchall: {
basePrice: 3.787,
basePrice: 2.787,
factor: 1.196
}
}
@@ -88,7 +88,7 @@ const ConfigurationManager = {
min: 0,
max: 250,
step: 1,
restrictedLabels: [0, 5, 10, 25, 50, 75, 100, 250]
restrictedLabels: [0, 5, 10, 25, 50, 75, 125, 250]
},
sites: {
id: 'wh_sites_source',
@@ -104,9 +104,9 @@ const ConfigurationManager = {
id: 'mail_stockage_source',
displayId: 'mail_stockage_display',
min: 0,
max: 500,
max: 250,
step: 1,
restrictedLabels: [0, 5, 10, 25, 50, 75, 150, 250, 500]
restrictedLabels: [0, 5, 10, 25, 50, 75, 125, 250]
},
users: {
id: 'mail_users_source',
@@ -154,21 +154,21 @@ const ConfigurationManager = {
lxc: {
id: 'nc_opt_lxc',
class: 'nc_opt_lxc',
enables: ['dedicated'],
enables: [], // ['dedicated'],
defaultDisabled: false
},
dedicated: {
id: 'nc_opt_decicated',
class: 'nc_opt_decicated',
enables: ['onprem'],
defaultDisabled: true
},
onprem: {
id: 'nc_opt_onprem',
class: 'nc_opt_onprem',
enables: [],
defaultDisabled: true
},
// dedicated: {
// id: 'nc_opt_decicated',
// class: 'nc_opt_decicated',
// enables: ['onprem'],
// defaultDisabled: true
// },
// onprem: {
// id: 'nc_opt_onprem',
// class: 'nc_opt_onprem',
// enables: [],
// defaultDisabled: true
// },
vol: {
id: 'nc_opt_vol',
class: 'nc_opt_vol',
@@ -238,8 +238,8 @@ const StateManager = {
storage: 0,
users: 0,
opt_lxc: false,
opt_dedicated: false,
opt_onprem: false,
// opt_dedicated: false,
// opt_onprem: false,
opt_vol: false,
opt_vol_val: 1
},
@@ -384,7 +384,7 @@ const StateManager = {
field = fieldMapping[field];
}
// Gérer les options (qui ne sont pas dans le mapping)
else if (['lxc', 'dedicated', 'onprem', 'vol', 'preinstall', 'catchall', 'ip4'].includes(field)) {
else if (['lxc', /* 'dedicated', 'onprem', */ 'vol', 'preinstall', 'catchall', 'ip4'].includes(field)) {
field = 'opt_' + field;
}
// Gérer vol_val spécifiquement
@@ -428,19 +428,19 @@ const PriceEngine = {
if (ncState.opt_lxc) {
optionMultiplier = prices.nc.options.lxc;
}
if (ncState.opt_lxc && ncState.opt_dedicated) {
optionMultiplier = prices.nc.options.dedicated;
}
if (ncState.opt_lxc && ncState.opt_dedicated && ncState.opt_onprem) {
optionMultiplier = prices.nc.options.onprem;
}
// if (ncState.opt_lxc && ncState.opt_dedicated) {
// optionMultiplier = prices.nc.options.dedicated;
// }
// if (ncState.opt_lxc && ncState.opt_dedicated && ncState.opt_onprem) {
// optionMultiplier = prices.nc.options.onprem;
// }
// Appliquer le multiplicateur d'option
price = (price + optionMultiplier.basePrice) * optionMultiplier.factor;
// Ajouter l'option gros volume si activée
if (ncState.opt_vol && ncState.opt_vol_val > 0) {
const volPrice = Math.max(100, Math.pow(ncState.opt_vol_val, 0.7) * prices.nc.options.vol[tierIndex]);
const volPrice = Math.max(40, Math.pow(ncState.opt_vol_val, 0.7) * prices.nc.options.vol[tierIndex]);
price += volPrice;
}
@@ -772,8 +772,8 @@ const UIController = {
StateManager.set('nc', 'storage', $('#nextcloud_stockage_source').slider('get value'));
StateManager.set('nc', 'users', $('#nextcloud_users_source').slider('get value'));
StateManager.set('nc', 'opt_lxc', $('.ui.toggle.checkbox.nc_opt_lxc').checkbox('is checked'));
StateManager.set('nc', 'opt_dedicated', $('.ui.toggle.checkbox.nc_opt_decicated').checkbox('is checked'));
StateManager.set('nc', 'opt_onprem', $('.ui.toggle.checkbox.nc_opt_onprem').checkbox('is checked'));
// StateManager.set('nc', 'opt_dedicated', $('.ui.toggle.checkbox.nc_opt_decicated').checkbox('is checked'));
// StateManager.set('nc', 'opt_onprem', $('.ui.toggle.checkbox.nc_opt_onprem').checkbox('is checked'));
StateManager.set('nc', 'opt_vol', $('.ui.checkbox.nc_opt_vol').checkbox('is checked'));
StateManager.set('nc', 'opt_vol_val', parseInt($('#nc_opt_vol_val').val()) || 1);
@@ -809,26 +809,26 @@ const UIController = {
$('#nc_opt_vol_val').val(state.nc.opt_vol_val);
this.setCheckboxState('nc_opt_lxc', state.nc.opt_lxc);
this.setCheckboxState('nc_opt_decicated', state.nc.opt_dedicated);
this.setCheckboxState('nc_opt_onprem', state.nc.opt_onprem);
// this.setCheckboxState('nc_opt_decicated', state.nc.opt_dedicated);
// this.setCheckboxState('nc_opt_onprem', state.nc.opt_onprem);
this.setCheckboxState('nc_opt_vol', state.nc.opt_vol);
// Gérer l'état enabled/disabled des checkboxes hiérarchiques Nextcloud
if (state.nc.opt_lxc) {
// Si lxc est coché, activer dedicated
$('.ui.toggle.checkbox.nc_opt_decicated').checkbox('set enabled');
if (state.nc.opt_dedicated) {
// Si dedicated est coché, activer onprem
$('.ui.toggle.checkbox.nc_opt_onprem').checkbox('set enabled');
} else {
// Sinon, désactiver onprem
$('.ui.toggle.checkbox.nc_opt_onprem').checkbox('set disabled');
}
} else {
// Si lxc n'est pas coché, désactiver dedicated et onprem
$('.ui.toggle.checkbox.nc_opt_decicated').checkbox('set disabled');
$('.ui.toggle.checkbox.nc_opt_onprem').checkbox('set disabled');
}
// if (state.nc.opt_lxc) {
// // Si lxc est coché, activer dedicated
// $('.ui.toggle.checkbox.nc_opt_decicated').checkbox('set enabled');
// if (state.nc.opt_dedicated) {
// // Si dedicated est coché, activer onprem
// $('.ui.toggle.checkbox.nc_opt_onprem').checkbox('set enabled');
// } else {
// // Sinon, désactiver onprem
// $('.ui.toggle.checkbox.nc_opt_onprem').checkbox('set disabled');
// }
// } else {
// // Si lxc n'est pas coché, désactiver dedicated et onprem
// $('.ui.toggle.checkbox.nc_opt_decicated').checkbox('set disabled');
// $('.ui.toggle.checkbox.nc_opt_onprem').checkbox('set disabled');
// }
// Gérer l'affichage du shape pour Nextcloud users
const $ncShape = $('#ncusers');
@@ -1033,13 +1033,13 @@ const SummaryGenerator = {
items.push(`<span class="ui label">Utilisateurs illimités</span>`);
}
if (nc.opt_dedicated) {
items.push(`<span class="ui label blue">Serveur dédié</span>`);
}
// if (nc.opt_dedicated) {
// items.push(`<span class="ui label blue">Serveur dédié</span>`);
// }
if (nc.opt_onprem) {
items.push(`<span class="ui label blue">Sur site</span>`);
}
// if (nc.opt_onprem) {
// items.push(`<span class="ui label blue">Sur site</span>`);
// }
if (nc.opt_vol && nc.opt_vol_val > 0) {
items.push(`<span class="ui label violet">${nc.opt_vol_val} To de volume supplémentaire</span>`);
@@ -1067,13 +1067,13 @@ const SummaryGenerator = {
items.push(`Instance privée (utilisateurs illimités)`);
}
if (nc.opt_dedicated) {
items.push(`Serveur dédié`);
}
// if (nc.opt_dedicated) {
// items.push(`Serveur dédié`);
// }
if (nc.opt_onprem) {
items.push(`Sur site (on-premise)`);
}
// if (nc.opt_onprem) {
// items.push(`Sur site (on-premise)`);
// }
if (nc.opt_vol && nc.opt_vol_val > 0) {
items.push(`Gros volume: ${nc.opt_vol_val} To supplémentaires`);
@@ -1383,37 +1383,37 @@ const SummaryGenerator = {
const ExampleFormulas = {
formulas: {
solo: {
nc: { storage: 50, users: 1, opt_lxc: false, opt_dedicated: false, opt_onprem: false, opt_vol: false, opt_vol_val: 1 },
nc: { storage: 50, users: 1, opt_lxc: false, /* opt_dedicated: false, opt_onprem: false, */ opt_vol: false, opt_vol_val: 1 },
wh: { storage: 0, sites: 0, opt_preinstall: false },
mail: { storage: 20, users: 1, opt_catchall: true },
vps: { storage: 0, cpu: 0, ram: 0, opt_ip4: false }
},
team: {
nc: { storage: 150, users: 5, opt_lxc: false, opt_dedicated: false, opt_onprem: false, opt_vol: false, opt_vol_val: 1 },
nc: { storage: 150, users: 5, opt_lxc: false, /* opt_dedicated: false, opt_onprem: false, */ opt_vol: false, opt_vol_val: 1 },
wh: { storage: 10, sites: 1, opt_preinstall: false },
mail: { storage: 25, users: 5, opt_catchall: false },
vps: { storage: 0, cpu: 0, ram: 0, opt_ip4: false }
},
company: {
nc: { storage: 0, users: 0, opt_lxc: true, opt_dedicated: false, opt_onprem: false, opt_vol: true, opt_vol_val: 2 },
nc: { storage: 0, users: 0, opt_lxc: true, /* opt_dedicated: false, opt_onprem: false, */ opt_vol: true, opt_vol_val: 2 },
wh: { storage: 50, sites: 3, opt_preinstall: false },
mail: { storage: 100, users: 20, opt_catchall: false },
vps: { storage: 0, cpu: 0, ram: 0, opt_ip4: false }
},
storage: {
nc: { storage: 0, users: 0, opt_lxc: true, opt_dedicated: true, opt_onprem: false, opt_vol: true, opt_vol_val: 10 },
nc: { storage: 0, users: 0, opt_lxc: true, /* opt_dedicated: true, opt_onprem: false, */ opt_vol: true, opt_vol_val: 10 },
wh: { storage: 0, sites: 0, opt_preinstall: false },
mail: { storage: 0, users: 0, opt_catchall: false },
vps: { storage: 0, cpu: 0, ram: 0, opt_ip4: false }
},
developer: {
nc: { storage: 0, users: 0, opt_lxc: false, opt_dedicated: false, opt_onprem: false, opt_vol: false, opt_vol_val: 1 },
nc: { storage: 0, users: 0, opt_lxc: false, /* opt_dedicated: false, opt_onprem: false, */ opt_vol: false, opt_vol_val: 1 },
wh: { storage: 0, sites: 0, opt_preinstall: false },
mail: { storage: 0, users: 0, opt_catchall: false },
vps: { storage: 50, cpu: 2, ram: 4, opt_ip4: false }
},
devteam: {
nc: { storage: 0, users: 0, opt_lxc: false, opt_dedicated: false, opt_onprem: false, opt_vol: false, opt_vol_val: 1 },
nc: { storage: 0, users: 0, opt_lxc: false, /* opt_dedicated: false, opt_onprem: false, */ opt_vol: false, opt_vol_val: 1 },
wh: { storage: 0, sites: 0, opt_preinstall: false },
mail: { storage: 0, users: 0, opt_catchall: false },
vps: { storage: 250, cpu: 8, ram: 16, opt_ip4: false }

View File

@@ -1,16 +1,3 @@
<script src="dist/library/jquery-3.6.0.min.js"></script>
<script src="dist/library/fomantic/semantic.min.js"></script>
<script>
$(document)
.ready(function() {
// fix menu when passed
$('.masthead')
.visibility({
once: false,
onBottomPassed: function() { $('.fixed.menu').transition('fade in'); },
onBottomPassedReverse: function() { $('.fixed.menu').transition('fade out'); }
});
// create sidebar and attach to menu open
$('.ui.sidebar').sidebar('attach events', '.toc.item');
});
</script>
<script src="assets/script.js"></script>

View File

@@ -21,11 +21,7 @@
<a href="https://chatons.org/" class="item" target="_blank">chatons.org</a>
</div>
</div>
<div class="four wide column">
<h1 class="ui header clawdlogo centered">CLAWD.FR</h1>
<h3 class="ui header centered">Hébergeur engagé</h3>
</div>
<div class="three wide column">
<div class="eight wide column">
<div class="ui center aligned container">
<strong>clawd.fr est membre du</strong><br>
<a href="https://chatons.org/" class="item" target="_blank"><img src="/assets/img/logo_chatons.png" alt="chatons" /></a>

View File

@@ -34,37 +34,86 @@ $currentPage = $pages["interventions"];
<div class="ui vertical stripe segment interventions">
<div class="ui text container">
<h2>Incidents en cours, interventions planifiées ou en cours</h2>
<h2>Incidents et interventions planifiées ou en cours</h2>
<p>Aucun incident en cours. Dernier incident le <a href="#incident-241027">27 Octobre 2024</a>.</p>
<p>Aucune intervention planifiée. Dernière intervention le <a href="#interv-250919">19 Septembre 2025</a>.</p>
<!-- <p>Prochaine intervention planifiée le <a href="#interv-241020">20 Octobre 2024</a>.</p>-->
<p>Aucune intervention planifiée. Dernière intervention le <a href="#interv-260726">26 Juillet 2026</a>.</p>
<!-- <p>Prochaine intervention planifiée le <a href="#interv-260726">26 Juillet 2026</a>.</p>-->
</div>
</div>
<!--
<div class="ui vertical stripe segment interventions">
<div class="ui text container">
<h2>Interventions planifiées</h2>
<a name="interv-260726"></a>
<div class="ui raised segment">
<div class="ui clearing basic segment">
<h4 class="ui left floated header">Mise à jour OS & Proxmox</h4>
<h4 class="ui right floated header dimmed">le 26/07/2026</h4>
</div>
<div class="ui basic segment">
<h4 class="ui header impact-important">Impact: interruption planifiée des services</h4>
<p><strong>Intervention terminée</strong></p>
<p>Une intervention sur le serveur 'atreides' est planifiée pour le dimanche 26 Juillet 2026, la fenêtre d'intervention commence à 18h et se termine à 20h.
Cette intervention vise à mettre à jour le système d'exploitation du serveur (Debian) et l'hyperviseur (Proxmox). Ces mises à jour sont majeures et impliquent un redémarrage du serveur, donc une coupure des services hébergés.<br>
Les services impactés sont:
</p>
<ul>
<li>Tous les sites web (wh1)</li>
<li>Toutes les boîtes mail (mx1 & mx2)</li>
<li>L'instance Nextcloud mutualisée (nc.clawd.fr)</li>
<li>Le webmail (webmail.clawd.fr)</li>
<li>L'interface d'administration (ispc)</li>
</ul>
<p>
Des ralentissements et perturbations sont à prévoir pendant toute la fenêtre d'intervention, ainsi qu'une coupure totale pendant les quelques minutes qu'il faudra au serveur pour redémarrer.<br>
</p>
</div>
</div>
<!-- <div class="ui vertical stripe segment interventions">-->
<!-- <div class="ui text container">-->
<!-- <h2>Interventions planifiées</h2>-->
<!---->
<!-- <a name="interv-241020"></a>-->
<!-- <div class="ui raised segment">-->
<!-- <div class="ui clearing basic segment">-->
<!-- <h4 class="ui left floated header">Adresse IP publique pour le serveur de mails</h4>-->
<!-- <h4 class="ui right floated header dimmed">le 20/10/2024</h4>-->
<!-- </div>-->
<!-- <div class="ui basic segment">-->
<!-- <h4 class="ui header impact-important">Impact: interruption planifiée des services</h4>-->
<!-- <p><strong>Intervention terminée</strong></p>-->
<!-- <p>Une intervention sur l'infrastructure est planifiée pour le dimanche 20 Octobre 2024, la fenêtre d'intervention commence à 16h et se termine à 21. Le but de cette intervention est d'attribuer une adresse IP publique dédiée au serveur de mails. Cette intervention demandera une reconfiguration complète et donc une suspension du réseau pour toute l'infrastructure. Les services seront indisponibles pendant la suspension du réseau, qui sera limitée au maximum.</p>-->
<!-- </div>-->
<!-- </div>-->
<!---->
<!-- </div>-->
<!-- </div>-->
</div>
</div>
-->
<div class="ui vertical stripe segment interventions">
<div class="ui text container">
<h2>Incidents & interventions passés</h2>
<a name="interv-260726"></a>
<div class="ui raised segment">
<div class="ui clearing basic segment">
<h4 class="ui left floated header">Mise à jour OS & Proxmox</h4>
<h4 class="ui right floated header dimmed">le 26/07/2026</h4>
</div>
<div class="ui basic segment">
<h4 class="ui header impact-important">Impact: interruption planifiée des services</h4>
<p><strong>Intervention terminée</strong></p>
<p>Une intervention sur le serveur 'atreides' est planifiée pour le dimanche 26 Juillet 2026, la fenêtre d'intervention commence à 18h et se termine à 20h.
Cette intervention vise à mettre à jour le système d'exploitation du serveur (Debian) et l'hyperviseur (Proxmox). Ces mises à jour sont majeures et impliquent un redémarrage du serveur, donc une coupure des services hébergés.<br>
Les services impactés sont:
</p>
<ul>
<li>Tous les sites web (wh1)</li>
<li>Toutes les boîtes mail (mx1 & mx2)</li>
<li>L'instance Nextcloud mutualisée (nc.clawd.fr)</li>
<li>Le webmail (webmail.clawd.fr)</li>
<li>L'interface d'administration (ispc)</li>
</ul>
<p>
Des ralentissements et perturbations sont à prévoir pendant toute la fenêtre d'intervention, ainsi qu'une coupure totale pendant les quelques minutes qu'il faudra au serveur pour redémarrer.<br>
</p>
</div>
</div>
<a name="interv-260204"></a>
<div class="ui raised segment">
<div class="ui clearing basic segment">
<h4 class="ui left floated header">Modifications de textes sur le site</h4>
<h4 class="ui right floated header dimmed">le 04/02/2026</h4>
</div>
<div class="ui basic segment">
<p>Une reformulation des textes sur l'ensemble du site a été faite aujourd'hui. L'adresse de l'entreprise a été modifié. Une page de liens vers le services a été ajoutée.</p>
</div>
</div>
<a name="interv-250919"></a>
<div class="ui raised segment">
<div class="ui clearing basic segment">

View File

@@ -39,9 +39,9 @@ $currentPage = $pages['mentions'];
<div class="wide column">
<h3>IDENTIFICATION</h3>
<p>Le site <a href="https://clawd.fr/" target="_self">clawd.fr</a> est édité par la micro-entreprise enregistrée au nom de:<br>
M. WEISKOPFF Adrien<br>
Belvezet - La viale<br>
48190 MONT-LOZÈRE-ET-GOULET, FRANCE<br>
M. WEISKOPFF Adrien - clawd.fr<br>
46 Avenue de Lattre de Tassigny<br>
43300 LANGEAC, FRANCE<br>
SIRET 85324082800014<br>
<a href="mailto:admin@clawd.fr" target="_blank">admin@clawd.fr</a></p>
<p>Le serveur physique hébergeant le site <a href="https://clawd.fr/" target="_self">clawd.fr</a> est hébergé par la société <a href="https://www.hetzner.com/" target="_blank">Hetzner Online GmbH</a> en Allemagne.</p>

View File

@@ -189,17 +189,16 @@ $currentPage = $pages['services'];
<div class="row">
<div class="column">
<h2>Hébergement VPS</h2>
<p>Si vos besoins en hébergement sont spécifiques ou que vous avez tout simplement besoin d'avoir un accès root sur un serveur, c'est la solution.</p>
<p>
Si vous avez des besoins spécifiques ou si vous souhaitez disposer
d’un accès complet à votre serveur, l’hébergement VPS est la solution adaptée.
Je vous laisse le choix entre un VPS administré ou non administré.
Vous avez le choix entre un VPS administré ou non administré.
</p>
<p>
Les VPS sont livrés prêts à l’emploi, avec un système Debian 13 par défaut
(autres systèmes possibles sur demande),
une connectivité IPv6 publique (IPv4 via NAT),
une connectivité IPv6 publique,
un accès de secours via KVM,
et un système de sauvegardes préconfiguré.
</p>

View File

@@ -718,12 +718,13 @@ $currentPage = $pages["tarifs"];
<input type="checkbox" name="nc_opt_lxc" id="nc_opt_lxc">
<label for="nc_opt_lxc"><strong>Privé</strong>: votre propre instance Nextcloud privée, administrable et configurable.</label>
</div>
<br>
<div class="ui toggle checkbox nc_opt_vol">
<input type="checkbox" name="nc_opt_vol" id="nc_opt_vol">
<label for="nc_opt_vol"><strong>Gros volume</strong>: ajouter
<input id="nc_opt_vol_val" name="nc_opt_vol_val" type="number" placeholder="1" value="1" min="1" max="150" step="1" style="width: 60px; text-align: center;">
To d'espace supplémentaire. Entre <span id="teraeurolow">-</span> et <span id="teraeurohigh">-</span> € par To.</label>
<label for="nc_opt_vol" style="display: inline"><strong>Gros volume</strong>:</label>
</div>
<span>Ajouter <input id="nc_opt_vol_val" name="nc_opt_vol_val" type="number" placeholder="1" value="1" min="1" max="150" step="1" style="width: 60px; text-align: center;">
To d'espace supplémentaire. Entre <span id="teraeurolow">-</span> et <span id="teraeurohigh">-</span> € par To.</span>
<!-- <div class="ui toggle checkbox nc_opt_decicated">-->
<!-- <input type="checkbox" name="nc_opt_decicated" id="nc_opt_decicated">-->
<!-- <label for="nc_opt_decicated"><strong>Dédié</strong>: sur un serveur dédié à votre structure (serveur inclus).</label>-->