Files
ObsiGate/desktop/README.md
T
bruno cf30dfb48c
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
docs: ajouter section Desktop (Tauri) dans README principal + refonte desktop/README.md
- 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
2026-07-26 10:01:36 -04:00

264 lines
7.0 KiB
Markdown

# ObsiGate Desktop
Application desktop native pour [ObsiGate](https://git.dracodev.net/Projets/ObsiGate) — construite avec [Tauri](https://tauri.app/) (Rust + webview système).
> 🚧 **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.
## Table des matières
- [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
# .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
```
Dépendances runtime (normalement déjà présentes) :
```bash
sudo apt install libwebkit2gtk-4.1-0 libgtk-3-0 libayatana-appindicator3-1
```
### Windows
```cmd
:: .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
```
### 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
# 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
```
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 (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/
│ ├── 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)
```
### Cycle de vie
```
Démarrage :
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 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
```