Files
Yunohost_homePage/README.md
T

205 lines
7.7 KiB
Markdown

# Yunohost_homePage
Page d'accueil YunoHost personnalisée : applications épinglées en haut de
page, groupes repliables/réordonnables, applications sans groupe, bouton
Administration à côté de Déconnexion, et détection automatique du logo de
chaque application (favicon ou logo officiel YunoHost).
Ce dépôt contient le **code générique**, réutilisable par n'importe qui a
une instance YunoHost — toutes les informations spécifiques à un serveur
(domaine, identifiants SSH, mot de passe) vivent uniquement dans un fichier
`.env` local, jamais commité. `src/config.json` (tes apps/groupes) est lui
aussi local et ignoré par git — voir plus bas comment le renseigner.
## Structure du projet
```
src/ sources de la page (index.html, style.css, app.js)
et de l'éditeur visuel (editor.html/css/js)
+ config.json (tes données, ignoré par git — voir ci-dessous)
+ config.example.json (exemple versionné, point de départ)
scripts/ scripts d'outillage (preview, export, sync, déploiement)
output/ généré par "make export" — c'est ce dossier qui est envoyé
sur le serveur YunoHost (ignoré par git)
Makefile regroupe toutes les commandes ci-dessous
.env tes identifiants/domaine (créé par "make config", jamais commité)
```
## Démarrage rapide
```bash
make help # liste toutes les commandes
make config # crée .env et src/config.json (depuis les .example) si absents
```
Édite ensuite :
- `.env` avec les infos de **ton** instance YunoHost (voir les commentaires
dans `.env.example`),
- `src/config.json` avec tes propres applications et groupes — soit à la
main (voir la section dédiée plus bas), soit via l'éditeur visuel une
fois le serveur lancé, soit en copiant un fichier existant si tu en as
déjà un ailleurs (ex. un dépôt séparé où tu gardes tes configs
personnelles).
Puis :
```bash
make serve # lance l'apercu + l'editeur en local
```
## Aperçu et édition en local
```bash
make serve
```
(Ctrl+C arrête le serveur.) Un port différent : `make serve PORT=8080`.
Ça ouvre deux onglets :
- **`http://localhost:8000/editor.html`** — éditeur : glisser-déposer les
applications entre groupes, vers/depuis "Sans groupe" ou vers/depuis
"Épinglées" (tout en haut, en dehors de tout groupe), réordonner les
groupes (poignée `⠿`), les renommer (clic sur le nom), cocher "replié par
défaut", ajouter (`+`) ou supprimer (`✕`) une application ou un groupe.
- Le bouton **Enregistrer** écrit dans `src/config.json`.
- Le bouton **Exporter** enregistre puis copie les fichiers déployables
(`index.html`, `style.css`, `app.js`, `config.json`) dans `output/` —
c'est ce dossier, pas `src/`, qui est envoyé sur le serveur.
- **`http://localhost:8000/`** — aperçu de la page finale (celle de
`src/`), avec rechargement automatique dès qu'un fichier change.
Cette partie ne nécessite aucune information sur ton serveur : tout est
local.
## Récupérer automatiquement les apps installées sur YunoHost
```bash
make sync
```
Se connecte en SSH (`SYNC_SSH_USER@SYNC_SSH_HOST` défini dans `.env`),
récupère la vraie liste des apps installées sur `PORTAL_DOMAIN` avec leur
nom/URL/logo officiels, et ajoute dans `ungrouped` uniquement celles qui
manquent encore (comparaison par URL). N'écrase jamais une app déjà classée
dans un groupe ou épinglée.
⚠️ Nécessite un accès **root** (ou un compte avec sudo, mot de passe requis
à chaque appel) sur le serveur : le fichier lu
(`/etc/yunohost/portal/<domaine>.json`) n'est lisible par aucun compte moins
privilégié, y compris le compte applicatif utilisé pour le déploiement.
## Gérer les applications à la main (optionnel)
Tout se configure aussi directement dans `src/config.json` (voir
`src/config.example.json` pour un point de départ), si tu préfères éditer
le fichier toi-même plutôt que d'utiliser l'éditeur visuel.
### Ajouter une application
```json
{ "id": "monapp", "name": "Mon App", "url": "/monapp/", "color": "#2196f3", "initials": "MA" }
```
- **`id`** : identifiant unique, sans espace.
- **`name`** : nom affiché sous la tuile.
- **`url`** : chemin réel de l'appli sur le domaine (ex. `/navidrome/`). C'est
à partir de cette URL que la page tente de charger `favicon.ico`
automatiquement.
- **`color`** / **`initials`** : filet de sécurité si aucun favicon ne charge
(pastille colorée avec initiales).
- **`icon`** *(optionnel)* : force une image précise plutôt que le favicon
auto-détecté, ex. `"icon": "https://..."`.
Ajoute l'objet dans le tableau `apps` d'un groupe existant, dans le tableau
racine `pinned` (épinglées en haut de page) ou dans `ungrouped` si elle ne
doit appartenir à aucun groupe.
### Supprimer une application
Supprime son objet `{ ... }` dans le tableau où elle se trouve. Attention aux
virgules JSON (pas de virgule surnuméraire).
### Gérer les groupes
- **Créer** : ajoute un objet dans le tableau racine `groups` :
```json
{ "id": "domotique", "name": "Domotique", "collapsed": false, "apps": [] }
```
- **Réordonner** : l'ordre des objets dans `groups` = l'ordre vertical affiché.
- **Renommer** : change le champ `name`.
- **Replié par défaut** : `"collapsed": true` (le choix de chaque visiteur
est ensuite mémorisé dans son navigateur et prend le dessus).
- **Supprimer** : retire l'objet de `groups` — déplace d'abord ses apps
ailleurs, sinon elles disparaissent avec lui.
### Vérifier que le JSON reste valide
```bash
python3 -m json.tool src/config.json > /dev/null && echo "JSON valide"
```
## Déploiement sur YunoHost
Cette page est conçue pour être servie par une app "Custom Webapp"
(`my_webapp`) YunoHost, définie comme application par défaut du domaine
pour être visible à la racine (`https://tondomaine/`) — voir la doc
YunoHost pour installer ce type d'app si ce n'est pas déjà fait.
Le déploiement se fait toujours à partir de `output/`, jamais de `src/`
directement :
```bash
make export # (ou le bouton Exporter de l'éditeur) : src/ -> output/
make deploy # envoie output/ sur le serveur
```
### Configurer `.env`
```bash
make config
```
crée `.env` à partir de `.env.example` (déjà ignoré par git, ne sera jamais
commité). **Toutes** les infos de connexion viennent de ce fichier — sans
lui, `make deploy` et `make sync` s'arrêtent avec un message expliquant quoi
renseigner :
```dotenv
# Déploiement
REMOTE_HOST=tondomaine.exemple
REMOTE_USER=my_webapp__x
REMOTE_PORT=22
REMOTE_PATH=/www/
REMOTE_PASSWORD=le-mot-de-passe-ici
# Synchronisation des apps (make sync)
SYNC_SSH_USER=root
SYNC_SSH_HOST=tondomaine.exemple
PORTAL_DOMAIN=tondomaine.exemple
```
`scripts/deploy.sh` charge ce fichier. Si `REMOTE_PASSWORD` est renseigné,
il utilise `sshpass` (installé via `make install`) pour se connecter sans
invite interactive. Sans mot de passe dans `.env`, `ssh` demandera la
saisie manuelle — utile en terminal interactif, mais ne fonctionne pas dans
un contexte sans terminal (script automatisé), où `ssh` échoue avec une
erreur `ssh_askpass`.
⚠️ Le compte applicatif (`REMOTE_USER`) d'une "Custom Webapp" YunoHost est
en général un compte **SFTP uniquement**, chrooté dans son propre dossier
(`ForceCommand internal-sftp` côté serveur) :
- **`rsync` ne fonctionne pas** (il a besoin d'exécuter un shell distant) —
`scripts/deploy.sh` utilise `scp`.
- `REMOTE_PATH` est **relatif à la racine du chroot** de cette app
(`/var/www/<REMOTE_USER>`), donc `/www/` et pas
`/var/www/<REMOTE_USER>/www/`.
### Authentification par clé SSH (alternative)
Pour ne plus dépendre du mot de passe pour le déploiement :
```bash
ssh-keygen -t ed25519 -C "deploy-yunohost-pageaccueil"
ssh-copy-id -p "$REMOTE_PORT" "$REMOTE_USER@$REMOTE_HOST"
```