docs: ajouter section Desktop (Tauri) dans README principal + refonte desktop/README.md
CI / lint (push) Successful in 56s
CI / security (push) Successful in 14s
CI / test (push) Successful in 28s
CI / build (push) Successful in 7s
CI / e2e (push) Failing after 28s
Desktop Build / build-windows (push) Has been cancelled
Desktop Build / build-linux (push) Has been cancelled
CI / lint (push) Successful in 56s
CI / security (push) Successful in 14s
CI / test (push) Successful in 28s
CI / build (push) Successful in 7s
CI / e2e (push) Failing after 28s
Desktop Build / build-windows (push) Has been cancelled
Desktop Build / build-linux (push) Has been cancelled
- README.md: nouvelle section Desktop avec install binaires (.deb/.AppImage/.msi), build from source, architecture - desktop/README.md: refonte complète — install binaires, build, démarrage, config vaults, dépannage
This commit is contained in:
@@ -35,6 +35,7 @@
|
||||
- [🔒 Authentification](#-authentification)
|
||||
- [Ajouter une nouvelle vault](#-ajouter-une-nouvelle-vault)
|
||||
- [Build & déploiement avec build.sh](#-build--déploiement-avec-buildsh)
|
||||
- [Desktop (Tauri) — Application native](#-desktop-tauri--application-native)
|
||||
- [Utilisation](#-utilisation)
|
||||
- [API](#-api)
|
||||
- [Performance](#-performance)
|
||||
@@ -495,6 +496,97 @@ curl -X POST http://localhost:2020/api/attachments/rescan/MonVault
|
||||
|
||||
---
|
||||
|
||||
## 🖥️ Desktop (Tauri) — Application native
|
||||
|
||||
ObsiGate Desktop est une application native construite avec [Tauri](https://tauri.app/) (Rust + webview système). Elle embarque le backend Python et le frontend dans un exécutable standalone — zéro Docker, zéro ligne de commande.
|
||||
|
||||
> 🚧 **Version 2.0.0 — binaires en cours de stabilisation.** Pour l'instant, le build depuis les sources est recommandé.
|
||||
|
||||
### Fonctionnalités desktop natives
|
||||
|
||||
| Fonctionnalité | Web | Desktop |
|
||||
|---|---|---|
|
||||
| Accès fichiers local | Via upload | Natif (sélecteur dossier) |
|
||||
| Thème système | Manuel | Auto (suit OS dark/light) |
|
||||
| Notifications | Service Worker | Natif OS |
|
||||
| Associations `.md` | ❌ | ✅ « Ouvrir avec ObsiGate » |
|
||||
| Tray icon | ❌ | ✅ Barre des tâches |
|
||||
| Auto-update | ❌ | ✅ Vérifie les releases Gitea |
|
||||
| Mode hors-ligne | Limité | Complet (backend local) |
|
||||
|
||||
### Téléchargement (binaires pré-buildés)
|
||||
|
||||
Les releases sont publiées sur [Gitea](https://git.dracodev.net/Projets/ObsiGate/releases) :
|
||||
|
||||
| Plateforme | Format |
|
||||
|---|---|
|
||||
| **Linux** | `.deb` + `.AppImage` |
|
||||
| **Windows** | `.msi` + `.exe` (NSIS) |
|
||||
|
||||
#### Linux
|
||||
|
||||
```bash
|
||||
# .deb (Debian/Ubuntu/Deepin)
|
||||
sudo dpkg -i obsigate_2.0.0_amd64.deb
|
||||
# Lancer : ObsiGate depuis le menu applications ou `obsigate-desktop`
|
||||
|
||||
# .AppImage (toute distrib)
|
||||
chmod +x ObsiGate_2.0.0_amd64.AppImage
|
||||
./ObsiGate_2.0.0_amd64.AppImage
|
||||
```
|
||||
|
||||
#### Windows
|
||||
|
||||
```cmd
|
||||
:: Double-cliquer sur ObsiGate_2.0.0_x64.msi
|
||||
:: Ou lancer ObsiGate depuis le menu Démarrer
|
||||
```
|
||||
|
||||
### Démarrage
|
||||
|
||||
1. **Lance l'application** depuis le menu ou la ligne de commande
|
||||
2. Le backend Python démarre automatiquement sur `127.0.0.1:17890`
|
||||
3. La fenêtre s'ouvre et charge l'interface ObsiGate
|
||||
4. **Premier lancement** : sélectionne le dossier de tes vaults Obsidian via le sélecteur natif
|
||||
5. Pour fermer : icône tray → Quitter (arrêt propre du backend)
|
||||
|
||||
### Build depuis les sources
|
||||
|
||||
Voir le [guide détaillé dans desktop/](./desktop/README.md).
|
||||
|
||||
```bash
|
||||
# Linux
|
||||
cd desktop
|
||||
chmod +x build-linux.sh
|
||||
./build-linux.sh
|
||||
# → target/release/bundle/deb/obsigate_2.0.0_amd64.deb
|
||||
# → target/release/bundle/appimage/ObsiGate_2.0.0_amd64.AppImage
|
||||
```
|
||||
|
||||
```cmd
|
||||
REM Windows
|
||||
cd desktop
|
||||
build-windows.bat
|
||||
REM → target/release/bundle/msi/ObsiGate_2.0.0_x64.msi
|
||||
```
|
||||
|
||||
### Architecture Desktop
|
||||
|
||||
```
|
||||
┌────────────────────────────────────────────┐
|
||||
│ Tauri (Rust) │
|
||||
│ ├─ Webview (webview système) │
|
||||
│ │ └─ Frontend (HTML/JS/CSS) │
|
||||
│ └─ Sidecar Python │
|
||||
│ └─ uvicorn backend.main:app │
|
||||
│ └─ port 127.0.0.1:17890 │
|
||||
└────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
Cycle de vie : Tauri spawn le backend Python → health check → ouvre la webview. À la fermeture : SIGTERM → arrêt propre → nettoyage.
|
||||
|
||||
---
|
||||
|
||||
## �📖 Utilisation
|
||||
|
||||
### Interface web
|
||||
|
||||
+219
-36
@@ -1,80 +1,263 @@
|
||||
# ObsiGate Desktop
|
||||
|
||||
Application desktop native pour [ObsiGate](https://git.dracodev.net/Projets/ObsiGate) — construite avec [Tauri](https://tauri.app/).
|
||||
Application desktop native pour [ObsiGate](https://git.dracodev.net/Projets/ObsiGate) — construite avec [Tauri](https://tauri.app/) (Rust + webview système).
|
||||
|
||||
> 🚧 **Phase de conception** — les binaires ne sont pas encore disponibles.
|
||||
> 🚧 **Version 2.0.0 — les binaires sont en cours de stabilisation.** Le build depuis les sources est la méthode recommandée pour le moment.
|
||||
|
||||
## Prérequis
|
||||
## Table des matières
|
||||
|
||||
### Windows
|
||||
- [Rust](https://rustup.rs/) (stable ≥ 1.75)
|
||||
- Tauri CLI : `cargo install tauri-cli`
|
||||
- NSIS (inclus dans le build)
|
||||
- Python 3.11 embed (téléchargé automatiquement)
|
||||
- [Installation (binaires pré-buildés)](#installation-binaires-pré-buildés)
|
||||
- [Build depuis les sources](#build-depuis-les-sources)
|
||||
- [Démarrage](#démarrage)
|
||||
- [Configuration des vaults](#configuration-des-vaults)
|
||||
- [Architecture](#architecture)
|
||||
- [Fonctionnalités natives](#fonctionnalités-desktop-natives)
|
||||
- [Dépannage](#dépannage)
|
||||
|
||||
---
|
||||
|
||||
## Installation (binaires pré-buildés)
|
||||
|
||||
Les releases sont publiées sur [Gitea](https://git.dracodev.net/Projets/ObsiGate/releases).
|
||||
|
||||
### Linux
|
||||
|
||||
```bash
|
||||
sudo apt install libwebkit2gtk-4.1-dev libgtk-3-dev libayatana-appindicator3-dev
|
||||
cargo install tauri-cli
|
||||
# .deb (Debian/Ubuntu/Deepin) — installation système
|
||||
sudo dpkg -i obsigate_2.0.0_amd64.deb
|
||||
# Lancement : menu applications → ObsiGate, ou :
|
||||
obsigate-desktop
|
||||
|
||||
# .AppImage (toute distribution) — portable, pas d'installation
|
||||
chmod +x ObsiGate_2.0.0_amd64.AppImage
|
||||
./ObsiGate_2.0.0_amd64.AppImage
|
||||
```
|
||||
|
||||
## Build
|
||||
Dépendances runtime (normalement déjà présentes) :
|
||||
```bash
|
||||
sudo apt install libwebkit2gtk-4.1-0 libgtk-3-0 libayatana-appindicator3-1
|
||||
```
|
||||
|
||||
### Windows
|
||||
|
||||
```cmd
|
||||
cd desktop
|
||||
build-windows.bat
|
||||
:: .msi — installation standard
|
||||
:: Double-cliquer sur ObsiGate_2.0.0_x64.msi
|
||||
:: → Crée un raccourci bureau + entrée menu Démarrer
|
||||
|
||||
:: .exe NSIS — installateur interactif
|
||||
:: Mêmes options, inclut le raccourci
|
||||
```
|
||||
→ Produit `target/release/bundle/msi/ObsiGate_2.0.0_x64.msi` + `.exe` NSIS
|
||||
|
||||
### macOS
|
||||
|
||||
> Non supporté pour le moment (priorité Linux/Windows).
|
||||
|
||||
---
|
||||
|
||||
## Build depuis les sources
|
||||
|
||||
### Prérequis communs
|
||||
|
||||
- [Rust](https://rustup.rs/) stable ≥ 1.75
|
||||
- Tauri CLI : `cargo install tauri-cli`
|
||||
- Python 3.11+
|
||||
- Git
|
||||
|
||||
### Linux
|
||||
|
||||
```bash
|
||||
cd desktop
|
||||
# 1. Dépendances système
|
||||
sudo apt install libwebkit2gtk-4.1-dev libgtk-3-dev libayatana-appindicator3-dev curl
|
||||
|
||||
# 2. Cloner le projet
|
||||
git clone https://git.dracodev.net/Projets/ObsiGate.git
|
||||
cd ObsiGate/desktop
|
||||
|
||||
# 3. Build (tout-en-un)
|
||||
chmod +x build-linux.sh
|
||||
./build-linux.sh
|
||||
```
|
||||
→ Produit `target/release/bundle/deb/obsigate_2.0.0_amd64.deb` + `.AppImage`
|
||||
|
||||
Le script s'occupe de :
|
||||
1. Vérifier Rust + Tauri CLI + dépendances système
|
||||
2. Créer l'environnement Python (venv + requirements)
|
||||
3. Copier le frontend
|
||||
4. Builder Tauri en mode release
|
||||
|
||||
Produits :
|
||||
- `target/release/bundle/deb/obsigate_2.0.0_amd64.deb`
|
||||
- `target/release/bundle/appimage/ObsiGate_2.0.0_amd64.AppImage`
|
||||
|
||||
### Windows
|
||||
|
||||
```cmd
|
||||
:: 1. Prérequis (PowerShell admin)
|
||||
winget install Rustlang.Rustup
|
||||
cargo install tauri-cli
|
||||
|
||||
:: 2. Cloner
|
||||
git clone https://git.dracodev.net/Projets/ObsiGate.git
|
||||
cd ObsiGate\desktop
|
||||
|
||||
:: 3. Build
|
||||
build-windows.bat
|
||||
```
|
||||
|
||||
Produits :
|
||||
- `target\release\bundle\msi\ObsiGate_2.0.0_x64.msi`
|
||||
- `target\release\bundle\nsis\ObsiGate_2.0.0_x64-setup.exe`
|
||||
|
||||
---
|
||||
|
||||
## Démarrage
|
||||
|
||||
### Premier lancement
|
||||
|
||||
1. **Lance l'application** (menu ou ligne de commande)
|
||||
2. Le backend Python démarre automatiquement → health check sur `127.0.0.1:17890`
|
||||
3. La fenêtre s'ouvre sur l'interface ObsiGate
|
||||
4. **Sélectionne le dossier parent de tes vaults** Obsidian via le sélecteur natif
|
||||
5. L'indexation démarre automatiquement
|
||||
|
||||
### Lancements suivants
|
||||
|
||||
- L'application mémorise le dernier dossier configuré
|
||||
- Le backend démarre en ~2 secondes
|
||||
- Les vaults sont ré-indexées au démarrage (incrémental si inchangé)
|
||||
|
||||
### Arrêt
|
||||
|
||||
- **Icône tray → Quitter** (recommandé) : SIGTERM → arrêt propre du backend → fermeture webview
|
||||
- **Fermeture fenêtre (X)** : minimise dans le tray (backend continue de tourner)
|
||||
- **Ctrl+C** dans le terminal (si lancé en dev) : arrêt immédiat
|
||||
|
||||
### Mode développement
|
||||
|
||||
```bash
|
||||
cd desktop
|
||||
cargo tauri dev
|
||||
# → Lance le backend Python + ouvre la webview avec hot-reload
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Configuration des vaults
|
||||
|
||||
Au premier lancement, le sélecteur de dossier natif te demande le **dossier parent** contenant tes vaults Obsidian. Exemple :
|
||||
|
||||
```
|
||||
/home/bruno/Documents/
|
||||
├── Obsidian-Recettes/ ← vault #1
|
||||
├── Obsidian-IT/ ← vault #2
|
||||
└── Obsidian-Perso/ ← vault #3
|
||||
```
|
||||
|
||||
Tous les sous-dossiers contenant un dossier `.obsidian` sont automatiquement détectés comme vaults.
|
||||
|
||||
### Configuration avancée
|
||||
|
||||
Le fichier de config desktop est stocké dans :
|
||||
- **Linux** : `~/.config/obsigate-desktop/config.json`
|
||||
- **Windows** : `%APPDATA%\ObsiGate\config.json`
|
||||
|
||||
```json
|
||||
{
|
||||
"vaults_path": "/home/bruno/Documents",
|
||||
"backend_port": 17890,
|
||||
"theme": "system"
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Architecture
|
||||
|
||||
```
|
||||
desktop/
|
||||
├── Cargo.toml # Dépendances Rust
|
||||
├── Cargo.toml # Dépendances Rust (Tauri 2, plugins)
|
||||
├── tauri.conf.json # Config Tauri (fenêtre, bundle, plugins)
|
||||
├── build.rs # Script build Tauri
|
||||
├── src/
|
||||
│ └── main.rs # Point d'entrée Rust : spawn backend + webview
|
||||
├── python-embed/
|
||||
│ ├── sidecar.py # Lance uvicorn sur 127.0.0.1:17890
|
||||
│ └── ... # Python 3.11 + site-packages (gelés)
|
||||
├── build-windows.bat # Script build Windows
|
||||
├── build-linux.sh # Script build Linux
|
||||
│ ├── venv/ # Environnement Python isolé
|
||||
│ └── ... # site-packages gelés
|
||||
├── build-linux.sh # Script build Linux (.deb + .AppImage)
|
||||
├── build-windows.bat # Script build Windows (.msi + NSIS)
|
||||
└── icons/ # Icônes desktop (.ico, .png, .icns)
|
||||
```
|
||||
|
||||
## Fonctionnalités desktop natives
|
||||
|
||||
| Fonctionnalité | Web | Desktop |
|
||||
|---|---|---|
|
||||
| Accès fichiers local | Via upload | Natif (sélecteur dossier) |
|
||||
| Thème système | Manuel | Auto (suit OS dark/light) |
|
||||
| Notifications | Service Worker | Natif OS |
|
||||
| Associations `.md` | ❌ | ✅ « Ouvrir avec ObsiGate » |
|
||||
| Tray icon | ❌ | ✅ Barre des tâches |
|
||||
| Auto-update | ❌ | ✅ Vérifie releases Gitea |
|
||||
| Mode hors-ligne | Limité | Complet (backend local) |
|
||||
|
||||
## Cycle de vie
|
||||
### Cycle de vie
|
||||
|
||||
```
|
||||
Démarrage :
|
||||
1. Tauri lance python-embed/python → uvicorn backend.main:app
|
||||
1. Tauri lance python-embed/venv/bin/python → uvicorn backend.main:app
|
||||
2. Health check GET /api/health (timeout 15s)
|
||||
3. Webview ouvre http://127.0.0.1:17890
|
||||
|
||||
Arrêt (tray → Quitter ou fermeture fenêtre) :
|
||||
Arrêt (tray → Quitter ou Ctrl+C) :
|
||||
1. SIGTERM envoyé au processus Python
|
||||
2. Backend s'arrête proprement (10s timeout)
|
||||
3. Tauri ferme la webview
|
||||
4. Processus nettoyé — aucun résidu
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Fonctionnalités desktop natives
|
||||
|
||||
| Fonctionnalité | Web (Docker) | Desktop (Tauri) |
|
||||
|---|---|---|
|
||||
| Accès fichiers local | Via upload | Natif (sélecteur dossier) |
|
||||
| Thème | Manuel (toggle) | Auto (suit OS dark/light) |
|
||||
| Notifications | Service Worker | Natif OS |
|
||||
| Associations `.md` | ❌ | ✅ « Ouvrir avec ObsiGate » |
|
||||
| Tray icon | ❌ | ✅ Barre des tâches |
|
||||
| Auto-update | ❌ (docker pull) | ✅ Vérifie releases Gitea |
|
||||
| Mode hors-ligne | Limité | Complet (backend local) |
|
||||
| RAM au repos | ~150 MB (Docker) | ~80 MB (natif) |
|
||||
| Démarrage à froid | ~5s (Docker) | ~2s |
|
||||
|
||||
---
|
||||
|
||||
## Dépannage
|
||||
|
||||
### Le backend ne démarre pas
|
||||
|
||||
```bash
|
||||
# Vérifier que le port 17890 est libre
|
||||
ss -tlnp | grep 17890
|
||||
|
||||
# Lancer le backend manuellement pour voir les logs
|
||||
cd ObsiGate
|
||||
python -m uvicorn backend.main:app --host 127.0.0.1 --port 17890 --log-level debug
|
||||
```
|
||||
|
||||
### La fenêtre reste blanche
|
||||
|
||||
- Vérifier que le backend répond : `curl http://127.0.0.1:17890/api/health`
|
||||
- Si "connection refused" → le backend n'a pas démarré (voir section précédente)
|
||||
- Si le healthcheck répond mais la webview est blanche → problème CSP ou webview
|
||||
|
||||
### Erreur libwebkit2gtk non trouvé
|
||||
|
||||
```bash
|
||||
# Ubuntu/Debian/Deepin
|
||||
sudo apt install libwebkit2gtk-4.1-0
|
||||
|
||||
# Si l'erreur persiste, installer la version dev
|
||||
sudo apt install libwebkit2gtk-4.1-dev
|
||||
```
|
||||
|
||||
### Build échoue sur Linux
|
||||
|
||||
```bash
|
||||
# Nettoyer et rebuild
|
||||
cargo clean
|
||||
rm -rf python-embed/venv
|
||||
./build-linux.sh
|
||||
|
||||
# Si erreur de linking, vérifier les -dev packages
|
||||
sudo apt install libwebkit2gtk-4.1-dev libgtk-3-dev libayatana-appindicator3-dev libssl-dev
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user