CI / lint (push) Failing after 2m59s
CI / test (push) Skipped
CI / build (push) Skipped
CI / e2e (push) Skipped
CI / security (push) Successful in 29s
Desktop Build / build-windows (push) Canceled after 0s
Desktop Build / build-linux (push) Canceled after 0s
Les ancres des tables des matières utilisaient des caractères accentués qui ne correspondaient pas aux identifiants de titres générés par ObsiGate (suppression des accents et normalisation des slugs). Fichiers concernés : - README.md - docs/ANALYSE_REVIEW.md - desktop/README.md
303 lines
8.7 KiB
Markdown
303 lines
8.7 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-pre-buildes)
|
|
- [Build depuis les sources](#build-depuis-les-sources)
|
|
- [Démarrage](#demarrage)
|
|
- [Configuration des vaults](#configuration-des-vaults)
|
|
- [Architecture](#architecture)
|
|
- [Fonctionnalités natives](#fonctionnalites-natives)
|
|
- [Dépannage](#depannage)
|
|
|
|
---
|
|
|
|
## 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 (via Scoop)
|
|
|
|
```powershell
|
|
# 1. Installer Scoop (si pas déjà fait)
|
|
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser -Force
|
|
irm get.scoop.sh | iex
|
|
|
|
# 2. Prérequis via Scoop
|
|
scoop install rustup curl git
|
|
rustup default stable
|
|
cargo install tauri-cli
|
|
|
|
# 3. Cloner
|
|
git clone https://git.dracodev.net/Projets/ObsiGate.git
|
|
cd ObsiGate\desktop
|
|
|
|
# 4. Build
|
|
.\build-windows.bat
|
|
```
|
|
|
|
Le script télécharge automatiquement Python 3.11 embed et les dépendances backend.
|
|
|
|
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)
|
|
- 💡 *Premier lancement recommandé depuis un terminal* pour voir le mot de passe admin généré
|
|
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 (écran de connexion si l'auth est activée)
|
|
4. **Connecte-toi** avec le compte admin créé automatiquement (voir [Compte administrateur](#compte-administrateur))
|
|
5. **Sélectionne le dossier parent de tes vaults** Obsidian via le sélecteur natif
|
|
6. L'indexation démarre automatiquement
|
|
|
|
### Compte administrateur
|
|
|
|
Au premier démarrage, un compte administrateur est créé automatiquement :
|
|
|
|
- **Login** : `admin` (modifiable via la variable d'environnement `OBSIGATE_ADMIN_USER`)
|
|
- **Mot de passe** : généré aléatoirement (16 caractères) et affiché **une seule fois** dans les logs
|
|
|
|
Le mot de passe apparaît dans la sortie du terminal sous cette forme :
|
|
```
|
|
============================================================
|
|
PREMIER DÉMARRAGE — Compte admin créé automatiquement
|
|
Utilisateur : admin
|
|
Mot de passe : XXXXXXXXXXXXXXXX
|
|
CHANGEZ CE MOT DE PASSE dès la première connexion !
|
|
============================================================
|
|
```
|
|
|
|
> ⚠️ **Note le mot de passe immédiatement** — il n'est affiché qu'une seule fois.
|
|
> Si tu rates les logs, supprime le dossier `data/` et relance l'application pour
|
|
> régénérer un nouveau compte.
|
|
|
|
**Prédéfinir le mot de passe** (recommandé) :
|
|
|
|
Avant le premier lancement, définis les variables d'environnement suivantes :
|
|
|
|
- **Windows** (PowerShell) : `$env:OBSIGATE_ADMIN_PASSWORD="MonMotDePasse"`
|
|
- **Linux** : `export OBSIGATE_ADMIN_PASSWORD="MonMotDePasse"`
|
|
|
|
Tu peux aussi définir `OBSIGATE_ADMIN_USER` pour changer le nom d'utilisateur.
|
|
|
|
### 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
|
|
```
|