Compare commits
7
Commits
2a7693877d
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
aed16efdfc | ||
|
|
e91d644531 | ||
|
|
585946f2a0 | ||
|
|
ec737536db | ||
|
|
395ba6a756 | ||
|
|
a09a30e515 | ||
|
|
670eb62a78 |
@@ -34,6 +34,13 @@ Modifier `.env.exemple` en `.env`
|
||||
### publish.sh
|
||||
`./script/publish.sh` : Publie le site dans le _PUBLISH_DIR_ de _.env_
|
||||
|
||||
### publish-akbar.sh
|
||||
`./script/publish-akbar.sh` : build (`publish.sh`) puis déploiement de `PUBLISH_DIR` vers akbar via `rclone`/SFTP (`SSH_USER`, `SSH_HOST`, `SSH_PORT`, `SSH_REMOTE_PATH` dans `.env`). Le compte de déploiement est restreint au SFTP côté serveur (YunoHost), d'où `rclone` plutôt que `rsync`/`scp` qui nécessitent un shell distant.
|
||||
|
||||
Ne pas oublier de vérifier que les
|
||||
- dossiers sont en 755 (`find /var/www -type d -exec chmod 755 {} \;`)
|
||||
- fichiers sont en 644 (`find /var/www -type f -exec chmod 644 {} \;`)
|
||||
|
||||
## Spécificités
|
||||
### Page 404 et Yunohost
|
||||
La page 404.html, si l'option _Activer l'utilisation du fichier d'erreur personnalisé_ est activée, doit être déplacée sur www/error/404.html
|
||||
@@ -81,7 +88,6 @@ En mode incognito sur Chromium, <kbd>F12</kbd> puis Lighthouse. Tester smartphon
|
||||
Document does not have a meta description
|
||||
|
||||
|
||||
|
||||
## Idées d'évolutions
|
||||
|
||||
- Témoignages
|
||||
|
||||
@@ -2,32 +2,30 @@
|
||||
|
||||
## À faire
|
||||
|
||||
### Identité visuelle
|
||||
---
|
||||
|
||||
## Fait
|
||||
### Sécurité
|
||||
- [x] Permissions (fichiers : 644 - dossiers : 755)
|
||||
- [x] .htaccess
|
||||
|
||||
### Légal
|
||||
- [x] Rédiger les mentions légales
|
||||
- [x] Rédiger la politique de confidentialité
|
||||
- [x] Vérifier qu'aucun cookie n'est utilisé
|
||||
|
||||
### Identité visuelle (Je n'en veux pas pour le moment)
|
||||
- [ ] Ajouter un logo
|
||||
- [ ] Ajouter un favicon
|
||||
- [ ] Définir l'image de partage (Open Graph)
|
||||
|
||||
### Search Engine Optimization (SEO)
|
||||
- [x] Définir les titres des pages
|
||||
- [x] Définir les descriptions
|
||||
- [x] Vérifier les balises Open Graph
|
||||
- [ ] Ajouter favicon : Je m'en passe
|
||||
- [ ] Ajouter image Open Graph : Je m'en passe
|
||||
|
||||
- [ ] Définir les titres des pages
|
||||
- [ ] Définir les descriptions
|
||||
- [ ] Vérifier les balises Open Graph
|
||||
|
||||
### Légal
|
||||
|
||||
- [ ] Rédiger les mentions légales
|
||||
- [ ] Rédiger la politique de confidentialité
|
||||
- [ ] Vérifier qu'aucun cookie n'est utilisé
|
||||
|
||||
### Sécurité
|
||||
|
||||
- [ ] Permissions (fichiers : 644 - dossiers : 755)
|
||||
- [ ] .htaccess
|
||||
|
||||
---
|
||||
|
||||
## Fait
|
||||
### Accessibilité & performances
|
||||
- [x] Audit Lighthouse
|
||||
- [x] Mesurer l'impact écologique ([Website Carbon](https://www.websitecarbon.com/website/))
|
||||
|
||||
Executable
+56
@@ -0,0 +1,56 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# Build le site (publish.sh) puis déploie le résultat vers akbar en une
|
||||
# seule commande.
|
||||
#
|
||||
# Le compte SSH de déploiement (webapp YunoHost) est restreint au SFTP
|
||||
# (ForceCommand internal-sftp côté serveur) : ni scp, ni rsync-sur-ssh ne
|
||||
# fonctionnent (la commande distante est refusée, la connexion est coupée).
|
||||
# On utilise donc rclone en backend SFTP, qui ne parle que le protocole
|
||||
# SFTP et ne tente jamais d'exécuter de commande shell distante.
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
PROJECT_DIR="$(dirname "${SCRIPT_DIR}")"
|
||||
|
||||
if ! command -v rclone >/dev/null 2>&1; then
|
||||
echo "Erreur : rclone est requis (apt install rclone)."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ ! -f "${PROJECT_DIR}/.env" ]]; then
|
||||
echo "Erreur : fichier .env introuvable."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
set -a
|
||||
source "${PROJECT_DIR}/.env"
|
||||
set +a
|
||||
|
||||
: "${SSH_USER:?Variable SSH_USER manquante dans .env}"
|
||||
: "${SSH_HOST:?Variable SSH_HOST manquante dans .env}"
|
||||
: "${SSH_PORT:=22}"
|
||||
: "${SSH_REMOTE_PATH:?Variable SSH_REMOTE_PATH manquante dans .env}"
|
||||
|
||||
PUBLISH_PATH="${PROJECT_DIR}/${PUBLISH_DIR}"
|
||||
|
||||
echo "=== Étape 1/2 : build du site ==="
|
||||
(cd "${PROJECT_DIR}" && "${SCRIPT_DIR}/publish.sh")
|
||||
|
||||
echo
|
||||
echo "=== Étape 2/2 : déploiement (SFTP) vers ${SSH_USER}@${SSH_HOST}:${SSH_REMOTE_PATH} ==="
|
||||
rclone sync \
|
||||
"${PUBLISH_PATH}" \
|
||||
":sftp:${SSH_REMOTE_PATH}" \
|
||||
--sftp-host "${SSH_HOST}" \
|
||||
--sftp-user "${SSH_USER}" \
|
||||
--sftp-port "${SSH_PORT}" \
|
||||
--sftp-ask-password \
|
||||
--sftp-shell-type none \
|
||||
--sftp-disable-hashcheck \
|
||||
--progress
|
||||
|
||||
echo
|
||||
echo "Déployé. Site visible sur :"
|
||||
echo " https://${SSH_HOST}/"
|
||||
@@ -1,3 +1,13 @@
|
||||
:root {
|
||||
--link: light-dark(#005a9c, #8cc8ff);
|
||||
--link: light-dark(#005fcc, #8ab4f8);
|
||||
/* --link: light-dark(#005a9c, #8cc8ff); */
|
||||
|
||||
a {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
a:hover,
|
||||
a:focus {
|
||||
text-decoration-thickness: 2px;
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,6 @@
|
||||
---
|
||||
title: "Sillycone-village"
|
||||
title: "Sillycone Village"
|
||||
description: "Sillycone Village accompagne les indépendants, associations et projets locaux avec des outils numériques simples, humains, locaux et durables."
|
||||
---
|
||||
|
||||
## Un numérique simple, humain, local et durable.
|
||||
@@ -27,4 +28,4 @@ Privilégier les circuits courts, c'est aussi valable pour vos outils numérique
|
||||
|
||||
---
|
||||
|
||||
<small>*Sillycone-village : Un clin d'oeil à la Silicon Valley, mais avec **des valeurs complètement inverses**. Ici, pas de serveurs géants. Je vise une éco-responsabilité maximale, un ancrage local fort et un numérique accessible à toutes et tous.*</small>
|
||||
<small>*Sillycone Village : Un clin d'oeil à la Silicon Valley, mais avec **des valeurs complètement inverses**. Ici, pas de serveurs géants. Je vise une éco-responsabilité maximale, un ancrage local fort et un numérique accessible à toutes et tous.*</small>
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
---
|
||||
title: 'À propos'
|
||||
title: 'À propos de Sillycone Village'
|
||||
description: "Découvrez la démarche de Sillycone Village : le libre, le Slow Computing et la sobriété numérique au service d'un numérique plus humain."
|
||||
---
|
||||
|
||||
## Qui suis-je?
|
||||
@@ -7,7 +8,7 @@ Passionné par les technologies transparentes et durables, je mets mes compéten
|
||||
|
||||
Vous pouvez découvrir mon parcours complet sur mon [site personnel](https://limonier.be/).
|
||||
|
||||
## Pourquoi Sillycone-village ?
|
||||
## Pourquoi Sillycone Village ?
|
||||
C'est un clin d'oeil humoristique à la célèbre *Silicon Valley* américaine, mais avec **des valeurs complètement inverses**.
|
||||
|
||||
Là-bas, tout est basé sur la croissance infinie, la surconsommation technologique et les serveurs géants et une industrie publicitaire agressive qui pille, utilise et vend vos données personnelles sans votre consentement.
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
---
|
||||
title: "Mes réalisations"
|
||||
title: "Réalisations numériques"
|
||||
description: "Découvrez les projets numériques réalisés par Sillycone Village, des outils pensés pour être simples, utiles et durables."
|
||||
---
|
||||
Découvrez des exemples concrets d'outils, d'infrastructures et d'appareils configurés avec un objectif central : mettre **la technologie au service de l'humain**, sans fioritures et dans le respect de vos données.
|
||||
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
---
|
||||
title: "Contact"
|
||||
description: "Contactez Sillycone Village par courriel pour discuter d'un projet numérique, d'un besoin ou d'une question."
|
||||
---
|
||||
|
||||
## Discutons de votre projet
|
||||
|
||||
@@ -0,0 +1,86 @@
|
||||
---
|
||||
title: "Mentions légales"
|
||||
description: "Informations légales concernant le site Sillycone Village."
|
||||
url: "/mentions-legales/"
|
||||
---
|
||||
|
||||
## Éditeur du site
|
||||
|
||||
Le présent site est édité par :
|
||||
|
||||
**Mathieu Limonier**
|
||||
Sillycone Village
|
||||
Belgique
|
||||
|
||||
**Contact**
|
||||
|
||||
Courriel : [info@sillycone-village.be](mailto:info@sillycone-village.be)
|
||||
|
||||
Le responsable de la publication est Mathieu Limonier.
|
||||
|
||||
## Hébergement
|
||||
|
||||
Le site est hébergé par :
|
||||
|
||||
**OVHcloud**
|
||||
2 rue Kellermann
|
||||
59100 Roubaix
|
||||
France
|
||||
|
||||
Site web : https://www.ovhcloud.com/
|
||||
|
||||
## Objet du site
|
||||
|
||||
Sillycone Village accompagne les indépendants, associations et projets locaux dans la création d'outils numériques simples, durables et respectueux de leurs utilisateurs.
|
||||
|
||||
Les services proposés comprennent notamment :
|
||||
|
||||
* la création de sites web légers ;
|
||||
* l'accompagnement de projets numériques ;
|
||||
* le conseil en sobriété numérique ;
|
||||
* la promotion et l'utilisation de logiciels libres.
|
||||
|
||||
La démarche privilégie des solutions simples, pérennes et adaptées aux besoins réels plutôt qu'une accumulation de technologies.
|
||||
|
||||
## Philosophie
|
||||
|
||||
Ce site reflète les valeurs de Sillycone Village :
|
||||
|
||||
* simplicité ;
|
||||
* proximité ;
|
||||
* logiciels libres ;
|
||||
* sobriété numérique ;
|
||||
* transparence.
|
||||
|
||||
Il a été conçu pour fonctionner avec un minimum de ressources, sans publicité, sans pisteurs et sans dépendances externes inutiles, afin de limiter son impact environnemental tout en restant accessible au plus grand nombre.
|
||||
|
||||
## Propriété intellectuelle
|
||||
|
||||
Les contenus éditoriaux de ce site (textes, organisation des pages et autres contenus rédigés) sont la propriété de Mathieu Limonier.
|
||||
|
||||
Ce site est construit à l'aide de logiciels libres, notamment :
|
||||
|
||||
* **Hugo**, distribué sous licence **Apache License 2.0** ;
|
||||
* le thème **nojs** pour Hugo, développé par Andy Balaam et distribué sous licence **MIT**.
|
||||
|
||||
Sillycone Village utilise ce thème avec des surcharges et des développements spécifiques réalisés pour ce site, conformément aux mécanismes de personnalisation proposés par Hugo.
|
||||
|
||||
Le code spécifique développé pour Sillycone Village, y compris les modifications apportées au thème, est publié sous licence libre **GNU Affero General Public License version 3 (AGPLv3)**.
|
||||
|
||||
Les logiciels et composants tiers utilisés conservent les licences et les droits de leurs auteurs respectifs.
|
||||
|
||||
## Liens externes
|
||||
|
||||
Ce site peut contenir des liens vers des sites externes.
|
||||
|
||||
Sillycone Village ne peut être tenu responsable du contenu, des services ou du fonctionnement de ces sites tiers.
|
||||
|
||||
## Responsabilité
|
||||
|
||||
Les informations publiées sur ce site sont rédigées avec le plus grand soin et reflètent les connaissances disponibles au moment de leur publication.
|
||||
|
||||
Malgré cette attention, des erreurs ou omissions peuvent subsister. Si vous constatez une information inexacte ou souhaitez suggérer une amélioration, vous pouvez me contacter par courriel.
|
||||
|
||||
---
|
||||
|
||||
Dernière mise à jour : juillet 2026
|
||||
@@ -0,0 +1,48 @@
|
||||
---
|
||||
title: "Politique de confidentialité"
|
||||
description: "Politique de confidentialité et protection des données personnelles de Sillycone Village."
|
||||
url: "/confidentialite/"
|
||||
---
|
||||
|
||||
## Respect de la vie privée
|
||||
|
||||
Sillycone Village applique une démarche de sobriété numérique et de respect de la vie privée.
|
||||
|
||||
Ce site est un site statique qui ne collecte aucune donnée personnelle.
|
||||
|
||||
## Données personnelles
|
||||
|
||||
Aucune donnée personnelle n'est collectée automatiquement lors de la consultation du site.
|
||||
|
||||
Le site n'utilise :
|
||||
|
||||
- aucun outil de suivi d'audience ;
|
||||
- aucun système publicitaire ;
|
||||
- aucun outil de profilage ;
|
||||
- aucun traqueur tiers.
|
||||
|
||||
## Cookies
|
||||
|
||||
Ce site n'utilise aucun cookie.
|
||||
|
||||
## Contact par courriel
|
||||
|
||||
Si vous contactez Sillycone Village par courrier électronique, les données que vous choisissez de transmettre dans votre message sont utilisées uniquement afin de répondre à votre demande.
|
||||
|
||||
Ces informations ne sont ni vendues, ni utilisées à des fins commerciales autres que votre échange avec Sillycone Village.
|
||||
|
||||
## Hébergement
|
||||
|
||||
Le site est hébergé par OVHcloud.
|
||||
|
||||
Comme tout serveur web, l'hébergeur peut traiter des informations techniques nécessaires au fonctionnement et à la sécurité de l'infrastructure conformément à ses obligations légales.
|
||||
|
||||
## Vos droits
|
||||
|
||||
Conformément au RGPD, vous disposez de droits concernant vos données personnelles.
|
||||
|
||||
Dans la mesure où Sillycone Village ne collecte pas de données personnelles via ce site, aucune base de données utilisateur n'est constituée.
|
||||
|
||||
Pour toute question : info@sillycone-village.be
|
||||
|
||||
Dernière mise à jour : juillet 2026
|
||||
@@ -1,7 +1,8 @@
|
||||
---
|
||||
title: "Mes services"
|
||||
title: "Services numériques simples et durables"
|
||||
description: "Création de sites vitrines légers, formation au numérique libre, accompagnement de projets et conseil en sobriété numérique."
|
||||
---
|
||||
Découvrez les prestations de Sillycone-village à Silly : création web éco-conçue, outils sur-mesure, migrations GNU/Linux et formations.
|
||||
Découvrez les prestations de Sillycone Village à Silly : création web éco-conçue, outils sur-mesure, migrations GNU/Linux et formations.
|
||||
|
||||
## Conception d'outils numériques personnalisés
|
||||
L'informatique doit s'adapter à l'humain, et non l'inverse. Je développe des applications et des solutions fluides qui vont droit au but, répondent à vos besoins réels et restent utilisables sans fonctionnalités superflues.
|
||||
|
||||
@@ -7,5 +7,13 @@
|
||||
<a href="{{ .Site.Params.copyrightUrl }}" target="_blank">
|
||||
{{.Site.Copyright}}
|
||||
</a>
|
||||
-
|
||||
{{ with site.GetPage "/legal" }}
|
||||
<a href="{{ .RelPermalink }}">Mentions légales</a>
|
||||
{{ end }}
|
||||
-
|
||||
{{ with site.GetPage "/privacy" }}
|
||||
<a href="{{ .RelPermalink }}">Confidentialité</a>
|
||||
{{ end }}
|
||||
</p>
|
||||
</div>
|
||||
|
||||
@@ -6,6 +6,8 @@
|
||||
<meta name="description" content="{{ .Description | plainify }}">
|
||||
{{- end }}
|
||||
|
||||
{{ template "_internal/opengraph.html" . }}
|
||||
|
||||
{{- $styles := slice "css/vars.css" "css/syntax.css" "css/main.css" "css/nav.css" "css/custom.css" -}}
|
||||
{{- range $styles }}
|
||||
{{- with resources.Get . }}
|
||||
|
||||
@@ -0,0 +1,137 @@
|
||||
# =====================================================
|
||||
# Sillycone Village
|
||||
# Configuration Apache sécurisée pour site statique Hugo
|
||||
# =====================================================
|
||||
|
||||
|
||||
# -----------------------------------------------------
|
||||
# 1. Forcer HTTPS
|
||||
# -----------------------------------------------------
|
||||
|
||||
RewriteEngine On
|
||||
|
||||
RewriteCond %{HTTPS} !=on
|
||||
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
|
||||
|
||||
|
||||
# -----------------------------------------------------
|
||||
# 2. Protection contre accès fichiers sensibles
|
||||
# -----------------------------------------------------
|
||||
|
||||
<FilesMatch "(^\.|\.git|\.env|\.bak|\.backup|\.old|\.sql|\.log|composer\.json|package\.json)">
|
||||
Require all denied
|
||||
</FilesMatch>
|
||||
|
||||
|
||||
# Bloquer l'accès au fichier .htaccess lui-même
|
||||
|
||||
<Files ".htaccess">
|
||||
Require all denied
|
||||
</Files>
|
||||
|
||||
|
||||
# -----------------------------------------------------
|
||||
# 3. Headers de sécurité HTTP
|
||||
# -----------------------------------------------------
|
||||
|
||||
<IfModule mod_headers.c>
|
||||
|
||||
# Empêche le navigateur de deviner les types MIME
|
||||
Header always set X-Content-Type-Options "nosniff"
|
||||
|
||||
|
||||
# Protection contre certaines attaques XSS anciennes
|
||||
Header always set X-XSS-Protection "1; mode=block"
|
||||
|
||||
|
||||
# Contrôle des informations envoyées aux sites externes
|
||||
Header always set Referrer-Policy "strict-origin-when-cross-origin"
|
||||
|
||||
|
||||
# Désactive les fonctionnalités navigateur inutiles
|
||||
Header always set Permissions-Policy "geolocation=(), microphone=(), camera=(), payment=(), usb=()"
|
||||
|
||||
|
||||
# Protection contre l'intégration dans une iframe externe
|
||||
Header always set X-Frame-Options "SAMEORIGIN"
|
||||
|
||||
|
||||
# Politique de sécurité du contenu
|
||||
# - pas de JS
|
||||
# - pas de CDN
|
||||
# - pas de police externe
|
||||
# - CSS local uniquement
|
||||
|
||||
Header always set Content-Security-Policy "default-src 'self'; style-src 'self'; img-src 'self' data:; font-src 'self'; object-src 'none'; base-uri 'self'; frame-ancestors 'self'; form-action 'self'"
|
||||
|
||||
</IfModule>
|
||||
|
||||
|
||||
# -----------------------------------------------------
|
||||
# 4. Compression
|
||||
# -----------------------------------------------------
|
||||
|
||||
<IfModule mod_deflate.c>
|
||||
|
||||
AddOutputFilterByType DEFLATE \
|
||||
text/html \
|
||||
text/plain \
|
||||
text/css \
|
||||
text/javascript \
|
||||
application/javascript \
|
||||
application/json \
|
||||
application/xml \
|
||||
image/svg+xml
|
||||
|
||||
</IfModule>
|
||||
|
||||
|
||||
# -----------------------------------------------------
|
||||
# 5. Cache navigateur
|
||||
# -----------------------------------------------------
|
||||
|
||||
<IfModule mod_expires.c>
|
||||
|
||||
ExpiresActive On
|
||||
|
||||
# HTML : court pour faciliter les mises à jour
|
||||
ExpiresByType text/html "access plus 1 hour"
|
||||
|
||||
|
||||
# CSS
|
||||
ExpiresByType text/css "access plus 1 month"
|
||||
|
||||
|
||||
# SVG
|
||||
ExpiresByType image/svg+xml "access plus 1 month"
|
||||
|
||||
|
||||
# Fichiers statiques
|
||||
ExpiresByType application/javascript "access plus 1 month"
|
||||
|
||||
|
||||
</IfModule>
|
||||
|
||||
|
||||
# -----------------------------------------------------
|
||||
# 6. Désactiver le listing des répertoires
|
||||
# -----------------------------------------------------
|
||||
|
||||
Options -Indexes
|
||||
|
||||
|
||||
# -----------------------------------------------------
|
||||
# 7. Bloquer certains robots agressifs
|
||||
# -----------------------------------------------------
|
||||
|
||||
<IfModule mod_setenvif.c>
|
||||
|
||||
SetEnvIfNoCase User-Agent "MJ12bot" bad_bot
|
||||
SetEnvIfNoCase User-Agent "AhrefsBot" bad_bot
|
||||
|
||||
<RequireAll>
|
||||
Require all granted
|
||||
Require not env bad_bot
|
||||
</RequireAll>
|
||||
|
||||
</IfModule>
|
||||
Reference in New Issue
Block a user