9.0 KiB
📤 Export de Notes Publiques - Guide Complet
🎯 Concept
Les notes publiques sont générées en fichiers HTML statiques directement sur le serveur. Cela signifie que vous pouvez copier le dossier public/ et le déployer sur n'importe quel serveur web (Apache, Nginx, GitHub Pages, Netlify, etc.) sans avoir besoin de Go.
🔍 Lister les notes publiques
Vous pouvez lister toutes les notes publiques avec la commande CLI intégrée :
./server list-public
Sortie :
📚 Notes publiques (4):
• Mon Guide
Source: personal/guide.md
Public: public/guide.html
Date: 2025-11-13 20:06:21
Cette commande lit le fichier notes/.public.json et affiche :
- Le titre de chaque note
- Son chemin source
- Son chemin public
- La date de publication
📁 Structure générée
Quand vous publiez une note, le système génère automatiquement :
public/
├── index.html # Liste de toutes les notes publiques
├── ma-note.html # Notes converties en HTML (structure plate)
├── autre.html
└── static/
├── theme.css # Styles CSS copiés
└── themes.css
Note : La structure est plate - toutes les notes publiques sont directement dans public/, peu importe leur emplacement d'origine dans vos dossiers personnels.
🔄 Génération automatique
Quand une note est publiée
- L'utilisateur clique sur "🔒 Privé" dans l'éditeur
- Le système :
- Lit le fichier Markdown
- Extrait le front matter (titre, tags, date)
- Convertit le Markdown en HTML avec goldmark
- Génère un fichier HTML standalone complet
- Copie les CSS nécessaires
- Régénère
index.htmlavec la nouvelle note
- Le bouton devient "🌐 Public"
Quand une note est retirée
- L'utilisateur clique sur "🌐 Public"
- Le système :
- Supprime le fichier HTML correspondant
- Régénère
index.htmlsans cette note
- Le bouton redevient "🔒 Privé"
📋 Emplacement des fichiers
- Source :
notes/(vos fichiers Markdown originaux) - Export :
public/(fichiers HTML générés) - Index :
.public.json(liste des notes publiques)
🚀 Déploiement
Option 1 : Copie manuelle sur serveur web
# Copier le dossier public/ sur votre serveur
scp -r public/ user@server.com:/var/www/html/notes/
# Ou avec rsync
rsync -av public/ user@server.com:/var/www/html/notes/
Configuration Nginx :
server {
listen 80;
server_name notes.example.com;
root /var/www/html/notes;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
Configuration Apache :
<VirtualHost *:80>
ServerName notes.example.com
DocumentRoot /var/www/html/notes
<Directory /var/www/html/notes>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
Option 2 : GitHub Pages (gratuit)
# 1. Créer un repo GitHub
git init public/
cd public/
git add .
git commit -m "Initial public notes"
# 2. Pousser vers GitHub
git remote add origin https://github.com/username/notes-public.git
git push -u origin main
# 3. Activer GitHub Pages
# Settings → Pages → Source: main branch → Save
Vos notes seront disponibles à : https://username.github.io/notes-public/
Option 3 : Netlify Drop (ultra simple)
- Allez sur https://app.netlify.com/drop
- Glissez-déposez le dossier
public/ - Netlify génère automatiquement une URL
Option 4 : Vercel
cd public/
npx vercel
🔄 Automatisation avec script
Créez un script pour synchroniser automatiquement :
#!/bin/bash
# sync-public.sh
# Serveur de destination
REMOTE_USER="user"
REMOTE_HOST="server.com"
REMOTE_PATH="/var/www/html/notes"
# Synchroniser
rsync -av --delete public/ ${REMOTE_USER}@${REMOTE_HOST}:${REMOTE_PATH}
echo "✅ Notes publiques synchronisées !"
Utilisation :
chmod +x sync-public.sh
./sync-public.sh
🔄 Automatisation avec Git Hook
Synchroniser automatiquement après chaque publication :
# .git/hooks/post-commit
#!/bin/bash
# Si le dossier public/ a changé, synchroniser
if git diff --name-only HEAD~1 | grep -q "^public/"; then
./sync-public.sh
fi
📊 Avantages de cette approche
✅ Performance
- HTML pré-généré = temps de chargement instantané
- Pas de backend requis = moins de latence
- Cacheable à 100% par CDN
✅ Sécurité
- Fichiers statiques = surface d'attaque minimale
- Pas de code serveur exécuté côté public
- Isolation complète du système d'édition
✅ Portabilité
- Fonctionne sur n'importe quel serveur web
- Hébergement gratuit possible (GitHub Pages, Netlify)
- Peut être mis sur un CDN (Cloudflare, etc.)
✅ Simplicité
- Pas besoin de Go sur le serveur de destination
- Pas de base de données
- Juste des fichiers HTML à copier
✅ SEO
- HTML pré-rendu = indexation optimale par Google
- Pas de JavaScript requis pour afficher le contenu
- Meta tags facilement ajoutables
🎨 Personnalisation
Modifier les styles
Les fichiers CSS sont dans public/static/. Vous pouvez les modifier directement :
# Éditer le CSS
nano public/static/theme.css
# Ou copier vos propres CSS
cp my-custom.css public/static/custom.css
Ajouter des meta tags
Modifiez internal/api/public.go dans la fonction generateStandaloneHTML() :
<head>
<!-- Meta tags SEO -->
<meta name="description" content="%s">
<meta property="og:title" content="%s">
<meta property="og:type" content="article">
<!-- Votre titre existant -->
<title>%s - PersoNotes</title>
Ajouter Google Analytics
Ajoutez dans generateStandaloneHTML() avant </head> :
<!-- Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=GA_MEASUREMENT_ID"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'GA_MEASUREMENT_ID');
</script>
🐛 Dépannage
Les notes ne s'affichent pas
Problème : /public/ retourne 404
Solutions :
- Vérifier que le dossier
public/existe :ls -la public/ - Publier au moins une note pour générer le dossier
- Redémarrer le serveur Go
Les styles ne s'appliquent pas
Problème : La page s'affiche sans CSS
Solutions :
- Vérifier que
public/static/theme.cssexiste - Les chemins CSS sont relatifs :
../static/theme.css - Si vous copiez ailleurs, ajustez les chemins
Le HTML contient du Markdown brut
Problème : Le Markdown n'est pas converti
Solutions :
- Vérifier que goldmark est installé :
go mod tidy - Republier la note (toggle Private → Public)
- Vérifier les logs du serveur
📝 Workflow recommandé
Workflow quotidien
- Écrire vos notes en Markdown dans l'éditeur
- Publier les notes que vous voulez partager (bouton Public)
- Synchroniser le dossier
public/vers votre serveur (manuel ou automatique)
Workflow avec Git
# 1. Publier des notes via l'interface web
# 2. Commiter les changements
git add public/
git commit -m "Publish new notes"
git push
# 3. Sur le serveur de production
git pull
# Les nouvelles notes sont disponibles !
🔐 Sécurité
Routes publiques (pas d'auth)
- ✅
/public/*- Fichiers HTML statiques accessibles à tous
Routes privées (nécessitent auth)
- 🔒
/- Interface d'édition - 🔒
/api/*- APIs de modification - 🔒
/api/public/toggle- Protéger cet endpoint !
Protection recommandée
Utilisez un reverse proxy avec authentification pour protéger l'édition :
# Nginx
location /public {
# Pas d'auth - accessible à tous
proxy_pass http://localhost:8080;
}
location / {
# Auth requise pour édition
auth_basic "Personotes Admin";
auth_basic_user_file /etc/nginx/.htpasswd;
proxy_pass http://localhost:8080;
}
📚 Ressources
- Goldmark : https://github.com/yuin/goldmark
- GitHub Pages : https://pages.github.com
- Netlify : https://www.netlify.com
- Vercel : https://vercel.com
❓ FAQ
Q: Puis-je personnaliser le design des pages publiques ?
R: Oui ! Modifiez public/static/theme.css ou éditez la fonction generateStandaloneHTML() dans internal/api/public.go.
Q: Les images dans mes notes fonctionnent-elles ?
R: Oui, si vous utilisez des URLs absolues ou si vous copiez les images dans public/static/images/.
Q: Puis-je exporter vers PDF ? R: Les fichiers HTML peuvent être convertis en PDF avec wkhtmltopdf ou un navigateur (Imprimer → PDF).
Q: Comment supprimer toutes les notes publiques d'un coup ?
R: Supprimez le dossier public/ et le fichier .public.json, puis relancez le serveur.
Q: Les modifications des notes sont-elles automatiquement republiées ? R: Non. Si vous modifiez une note Markdown qui est déjà publique, vous devez la republier (toggle Private puis Public) pour régénérer le HTML.