Publication IA: - 4 templates (magazine, brief, essay, simple) avec CSS riche - Rewrite IA (article/exercises/tutorial/reference/mixed) - Modération avec timeout 12s + fallback safe - Quotas publish_enhance par tier (basic=2, pro=15, business=100) - Détection contenu stale (hash) - Migration DB publishedContent/publishedTemplate/publishedSourceHash Fixes: - cheerio v1.2: Element -> AnyNode (domhandler), decodeEntities cast - _isShared ajouté au type Note (champ virtuel serveur) - callout colors PDF export: extraction fonction pure testable - admin/published: guard note.userId null - Cmd+S fonctionne en mode dialog (pas seulement fullPage) i18n: - 23 clés publish* traduites dans les 15 locales - Extension Web Clipper: 13 locales mise à jour Tests: - callout-colors.test.ts (6 tests) - note-visible-in-view.test.ts (5 tests) - entitlements.test.ts + byok-entitlements.test.ts: mock usageLog + unstubAllEnvs - 199/199 tests passent Tracker: user-stories.md sync avec sprint-status.yaml
6.3 KiB
6.3 KiB
Configuration Gitea Actions — Memento
Ce document explique comment configurer le déploiement automatique via Gitea Actions.
Architecture
Push sur main
│
▼
Gitea (gitea.parsanet.org)
│ notifie
▼
Runner Proxmox (ubuntu-24.04)
│ SSH
▼
Serveur Docker (192.168.1.190)
├── Met à jour .env.docker
├── git pull origin main
├── docker compose build memento-note
└── docker compose up -d
Variables (non-sensibles)
Aller sur : Memento → Settings → Actions → Variables
| Nom | Exemple | Description |
|---|---|---|
APP_URL |
http://192.168.1.190:3000 |
URL publique de l'app (NEXTAUTH_URL) |
ADMIN_EMAIL |
admin@example.com |
Email promu ADMIN à l'inscription |
ALLOW_REGISTRATION |
true |
Autoriser les inscriptions publiques |
POSTGRES_USER |
memento |
Utilisateur PostgreSQL |
POSTGRES_DB |
memento |
Nom de la base de données |
POSTGRES_PORT |
5432 |
Port PostgreSQL exposé sur l'hôte |
AI_PROVIDER_TAGS |
custom |
Fournisseur IA pour les étiquettes (ollama, openai, custom) |
AI_MODEL_TAGS |
google/gemma-3-27b-it |
Modèle pour les étiquettes |
AI_PROVIDER_EMBEDDING |
custom |
Fournisseur IA pour les embeddings |
AI_MODEL_EMBEDDING |
text-embedding-3-small |
Modèle pour les embeddings |
AI_PROVIDER_CHAT |
custom |
Fournisseur IA pour le chat |
AI_MODEL_CHAT |
google/gemma-3-27b-it |
Modèle pour le chat |
CUSTOM_OPENAI_BASE_URL |
https://openrouter.ai/api/v1 |
URL de base du fournisseur custom |
OLLAMA_BASE_URL |
http://ollama:11434 |
URL du serveur Ollama |
EMAIL_PROVIDER |
resend |
Fournisseur email (resend ou smtp) |
SMTP_FROM |
noreply@example.com |
Adresse expéditeur (obligatoire pour Resend en prod) |
SMTP_HOST |
smtp.gmail.com |
Serveur SMTP |
SMTP_PORT |
587 |
Port SMTP |
SMTP_USER |
user@gmail.com |
Identifiant SMTP |
SMTP_SECURE |
false |
Forcer TLS/SSL |
SMTP_IGNORE_CERT |
false |
Ignorer les erreurs de certificat |
MCP_MODE |
sse |
Mode du serveur MCP |
MCP_PORT |
3001 |
Port du serveur MCP |
WEB_SEARCH_PROVIDER |
searxng |
Fournisseur de recherche web |
SEARXNG_URL |
http://localhost:8080 |
URL du serveur SearXNG |
Secrets (sensibles)
Aller sur : Memento → Settings → Actions → Secrets
| Nom | Description |
|---|---|
SSH_PRIVATE_KEY |
Clé SSH privée pour accéder à 192.168.1.190 |
NEXTAUTH_SECRET |
Clé secrète NextAuth (générer avec openssl rand -base64 32) |
POSTGRES_PASSWORD |
Mot de passe PostgreSQL |
CUSTOM_OPENAI_API_KEY |
Clé API du fournisseur custom (OpenRouter, etc.) |
OPENAI_API_KEY |
Clé API OpenAI (si fournisseur = openai) |
RESEND_API_KEY |
Clé API Resend pour l'envoi d'emails |
SMTP_PASS |
Mot de passe SMTP |
BRAVE_SEARCH_API_KEY |
Clé API Brave Search (optionnel) |
JINA_API_KEY |
Clé API Jina (optionnel) |
Comportement
- Si une variable/secret est vide dans Gitea → la valeur dans
.env.dockersur le serveur est conservée. - Si une variable/secret est renseignée dans Gitea → elle écrase la valeur dans
.env.docker. - Le fichier
.env.dockern'est jamais supprimé, seulement mis à jour ligne par ligne.
Email avec Resend
Comment ça fonctionne
Resend est un service d'envoi d'emails transactionnels (reset de mot de passe, notifications...).
Étape 1 — Créer un compte Resend
- Aller sur resend.com → Sign up
- Copier la clé API :
re_xxxxxxxxxxxx - Ajouter comme secret Gitea :
RESEND_API_KEY = re_xxxxxxxxxxxx
Étape 2 — Vérifier votre domaine (obligatoire pour envoyer à tout le monde)
Sans domaine vérifié : Resend ne peut envoyer qu'à l'adresse email du compte Resend. Cela bloque les emails de reset de mot de passe pour les autres utilisateurs.
- Aller sur resend.com/domains → Add Domain
- Entrer votre domaine, ex:
mondomaine.com - Resend affiche des enregistrements DNS à ajouter chez votre registrar/Cloudflare :
Type Nom Valeur
TXT _dmarc.mondomaine.com v=DMARC1; p=none;
TXT mondomaine.com v=spf1 include:amazonses.com ~all
CNAME resend._domainkey resend._domainkey.mondomaine.com → (valeur fournie par Resend)
MX bounce.mondomaine.com feedback-smtp.us-east-1.amazonses.com
- Attendre 1-5 minutes → le statut passe à "Verified" ✅
Étape 3 — Configurer l'adresse expéditeur
Dans les variables Gitea :
SMTP_FROM = noreply@mondomaine.com
Ou dans l'interface admin : Admin → Settings → Configuration Email → Resend
Résumé
| Situation | Comportement |
|---|---|
| Pas de domaine vérifié | Envoi uniquement vers l'email du compte Resend |
Domaine vérifié + SMTP_FROM configuré |
Envoi vers n'importe qui ✅ |
SMTP_FROM vide |
Utilise noreply@mondomaine.com si domaine vérifié, sinon onboarding@resend.dev |
Déclencher un déploiement
Automatique
Chaque git push sur la branche main déclenche automatiquement le déploiement.
Manuel (depuis Gitea)
Memento → Actions → "Deploy to Production" → Run workflow → Run workflow
Manuel (depuis le terminal)
cd D:/dev1405/Memento
git commit --allow-empty -m "ci: trigger deploy"
git push origin main
Vérifier le déploiement
- Gitea → Actions : suivre les logs en temps réel
- Sur le serveur :
docker compose -f /opt/memento/docker-compose.yml ps docker logs memento-web --tail=50 - Dans le navigateur :
http://192.168.1.190:3000
Premier déploiement sur un nouveau serveur
# Sur 192.168.1.190 :
mkdir -p /opt/memento
cd /opt/memento
git clone https://gitea.parsanet.org/sepehr/Memento.git .
# Générer les secrets si pas encore configurés dans Gitea :
# openssl rand -base64 32 → NEXTAUTH_SECRET
# openssl rand -hex 16 → POSTGRES_PASSWORD
# Lancer le premier déploiement manuellement depuis Gitea Actions
Après le premier déploiement, promouvoir l'admin :
docker exec memento-postgres psql -U memento -d memento \
-c "UPDATE \"User\" SET role='ADMIN' WHERE email='VOTRE_EMAIL';"