Change d'interface plus légére, modification side barre
This commit is contained in:
360
EXPORT_GUIDE.md
Normal file
360
EXPORT_GUIDE.md
Normal file
@ -0,0 +1,360 @@
|
||||
# 📤 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 :
|
||||
|
||||
```bash
|
||||
./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
|
||||
|
||||
1. **L'utilisateur clique sur "🔒 Privé"** dans l'éditeur
|
||||
2. 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.html` avec la nouvelle note
|
||||
3. **Le bouton devient "🌐 Public"**
|
||||
|
||||
### Quand une note est retirée
|
||||
|
||||
1. **L'utilisateur clique sur "🌐 Public"**
|
||||
2. Le système :
|
||||
- Supprime le fichier HTML correspondant
|
||||
- Régénère `index.html` sans cette note
|
||||
3. **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
|
||||
|
||||
```bash
|
||||
# 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** :
|
||||
```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** :
|
||||
```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)
|
||||
|
||||
```bash
|
||||
# 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)
|
||||
|
||||
1. Allez sur https://app.netlify.com/drop
|
||||
2. Glissez-déposez le dossier `public/`
|
||||
3. Netlify génère automatiquement une URL
|
||||
|
||||
### Option 4 : Vercel
|
||||
|
||||
```bash
|
||||
cd public/
|
||||
npx vercel
|
||||
```
|
||||
|
||||
## 🔄 Automatisation avec script
|
||||
|
||||
Créez un script pour synchroniser automatiquement :
|
||||
|
||||
```bash
|
||||
#!/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 :
|
||||
```bash
|
||||
chmod +x sync-public.sh
|
||||
./sync-public.sh
|
||||
```
|
||||
|
||||
## 🔄 Automatisation avec Git Hook
|
||||
|
||||
Synchroniser automatiquement après chaque publication :
|
||||
|
||||
```bash
|
||||
# .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 :
|
||||
|
||||
```bash
|
||||
# É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()` :
|
||||
|
||||
```go
|
||||
<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>` :
|
||||
|
||||
```html
|
||||
<!-- 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** :
|
||||
1. Vérifier que le dossier `public/` existe : `ls -la public/`
|
||||
2. Publier au moins une note pour générer le dossier
|
||||
3. Redémarrer le serveur Go
|
||||
|
||||
### Les styles ne s'appliquent pas
|
||||
|
||||
**Problème** : La page s'affiche sans CSS
|
||||
|
||||
**Solutions** :
|
||||
1. Vérifier que `public/static/theme.css` existe
|
||||
2. Les chemins CSS sont relatifs : `../static/theme.css`
|
||||
3. Si vous copiez ailleurs, ajustez les chemins
|
||||
|
||||
### Le HTML contient du Markdown brut
|
||||
|
||||
**Problème** : Le Markdown n'est pas converti
|
||||
|
||||
**Solutions** :
|
||||
1. Vérifier que goldmark est installé : `go mod tidy`
|
||||
2. Republier la note (toggle Private → Public)
|
||||
3. Vérifier les logs du serveur
|
||||
|
||||
## 📝 Workflow recommandé
|
||||
|
||||
### Workflow quotidien
|
||||
|
||||
1. **Écrire** vos notes en Markdown dans l'éditeur
|
||||
2. **Publier** les notes que vous voulez partager (bouton Public)
|
||||
3. **Synchroniser** le dossier `public/` vers votre serveur (manuel ou automatique)
|
||||
|
||||
### Workflow avec Git
|
||||
|
||||
```bash
|
||||
# 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
|
||||
# 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.
|
||||
Reference in New Issue
Block a user