feat(packaging) : package YunoHost veille-ia_ynh (packaging v2, helpers 2.1)
- manifest.toml validé contre le schéma officiel manifest.v2.schema.json (sources par tag forge avec placeholder sha256 assumé, nodejs 24, ports, system_user, install_dir, data_dir, permission privée all_users, SSO) - Scripts install/remove/upgrade/backup/restore/change_url (bash -n OK) : build au fil de l'eau avec BASE_PATH, ALERTS_TOKEN généré à l'install, .env chmod 400, logs journald - conf/nginx.conf : proxy_params_with_auth (header Ynh-User), conf/systemd.service : node via __NODEJS_DIR__, sandboxing modéré, conf/env : DATA_DIR/OLLAMA_URL/ALERTS_TOKEN - tests.toml minimal, doc DESCRIPTION/ADMIN fr+en - README racine : dev local, variables d'env, procédure de release, Ollama
This commit is contained in:
@@ -0,0 +1,86 @@
|
|||||||
|
# veille-ia
|
||||||
|
|
||||||
|
Observatoire personnel de veille sur les modèles IA génératifs (sorties, licences, classements), avec moteur de recommandation par profils de projets. Application privée, self-hosted, packagée pour YunoHost. Licence AGPL-3.0.
|
||||||
|
|
||||||
|
- **Spécification fonctionnelle** : [`plan_prd_veille_ia.md`](plan_prd_veille_ia.md)
|
||||||
|
- **Conventions frontend (prioritaires)** : [`SPECS_SVELTE.md`](SPECS_SVELTE.md)
|
||||||
|
|
||||||
|
## Structure du dépôt
|
||||||
|
|
||||||
|
| Chemin | Contenu |
|
||||||
|
|---|---|
|
||||||
|
| `app/` | Application SvelteKit (Svelte 5 runes, TypeScript strict, adapter-node) |
|
||||||
|
| `veille-ia_ynh/` | Package YunoHost (packaging v2, helpers 2.1) |
|
||||||
|
| `nodered-flows/` | Flows Node-RED exportés (phase 2 — à venir) |
|
||||||
|
|
||||||
|
## Développement local (hors YunoHost)
|
||||||
|
|
||||||
|
Prérequis : Node 24 LTS, npm.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd app
|
||||||
|
cp .env.example .env # DEV_USER=dev simule un utilisateur SSO connecté
|
||||||
|
npm ci
|
||||||
|
npm run dev
|
||||||
|
```
|
||||||
|
|
||||||
|
Sans `DEV_USER`, l'accueil public minimal est affiché et toute autre route renvoie 401 — comme en production sans header SSO.
|
||||||
|
|
||||||
|
### Variables d'environnement
|
||||||
|
|
||||||
|
| Variable | Défaut | Rôle |
|
||||||
|
|---|---|---|
|
||||||
|
| `DATA_DIR` | `./data` (relatif à `app/`) | Dossier persistant : YAML + git interne. En prod : `/home/yunohost.app/veille-ia` |
|
||||||
|
| `OLLAMA_URL` | `http://127.0.0.1:11434` | Endpoint Ollama. Optionnel : dégradation gracieuse si injoignable |
|
||||||
|
| `ALERTS_TOKEN` | *(aucun)* | Token Bearer de `POST /api/alerts`. Généré à l'install YNH, jamais commité |
|
||||||
|
| `SSO_HEADER` | `ynh-user` | Header HTTP injecté par SSOwat portant l'utilisateur authentifié |
|
||||||
|
| `DEV_USER` | *(aucun)* | Dev uniquement : simule un utilisateur SSO. Ignoré en production |
|
||||||
|
| `BASE_PATH` | *(aucun)* | Build uniquement : sous-chemin de montage (ex. `/veille`) pour `paths.base` |
|
||||||
|
|
||||||
|
### Qualité (à faire passer avant chaque commit)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
npm run check # svelte-check : 0 erreur, 0 warning
|
||||||
|
npm run lint # prettier + eslint
|
||||||
|
npm run test # vitest
|
||||||
|
npm run build # build adapter-node
|
||||||
|
```
|
||||||
|
|
||||||
|
## Packaging YunoHost (`veille-ia_ynh/`)
|
||||||
|
|
||||||
|
Packaging v2 vérifié contre la documentation officielle (août 2026) et le schéma
|
||||||
|
`manifest.v2.schema.json`. Helpers 2.1 (`ynh_config_add_nginx`, `ynh_config_add_systemd`…).
|
||||||
|
Ressources : `ports`, `nodejs` (24), `system_user`, `install_dir` (`/var/www/veille-ia`),
|
||||||
|
`data_dir` (`/home/yunohost.app/veille-ia`). App privée : permission `all_users`,
|
||||||
|
identité transmise via le header `Ynh-User` (`proxy_params_with_auth`).
|
||||||
|
|
||||||
|
### Procédure de release (à suivre avant toute installation)
|
||||||
|
|
||||||
|
Le package consomme une **archive de tag** publiée sur la forge :
|
||||||
|
|
||||||
|
1. Pousser le dépôt sur `https://labola.o-k-i.net/cyber-mawonaj/veille-ia` (procédure : `doc2sveltekit-transition/GITEA.md` — dépôt créé **sans** initialisation).
|
||||||
|
2. Taguer : `git tag v0.1.0 && git push gitea v0.1.0`.
|
||||||
|
3. Télécharger `https://labola.o-k-i.net/cyber-mawonaj/veille-ia/archive/v0.1.0.tar.gz` et calculer son sha256.
|
||||||
|
4. Mettre à jour `veille-ia_ynh/manifest.toml` : `version = "0.1.0~ynh1"`, `resources.sources.main.url` et `sha256` (le placeholder `TODO_…` actuel bloque volontairement toute installation).
|
||||||
|
5. Vérifier avec `package_check` (sur une machine YunoHost de test) : viser niveau ≥ 7.
|
||||||
|
|
||||||
|
### Installation (sur le serveur)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
yunohost app install /chemin/vers/veille-ia_ynh
|
||||||
|
# ou une fois publié : yunohost app install https://labola.o-k-i.net/cyber-mawonaj/veille-ia_ynh
|
||||||
|
```
|
||||||
|
|
||||||
|
L'install : déploie l'archive, `npm ci` + build (avec `BASE_PATH` = chemin d'install), génère `ALERTS_TOKEN`, écrit `/var/www/veille-ia/app/.env` (chmod 400), configure nginx + systemd (logs journald).
|
||||||
|
|
||||||
|
### Ollama
|
||||||
|
|
||||||
|
Optionnel. Si le paquet `ollama_ynh` est indisponible : Ollama sur la machine locale du porteur, exposé au serveur via wireguard/LAN — renseigner `OLLAMA_URL` à l'install (question du manifest) ou dans `/var/www/veille-ia/app/.env`. L'app démarre et fonctionne sans (dégradation gracieuse).
|
||||||
|
|
||||||
|
## État d'avancement
|
||||||
|
|
||||||
|
- [x] **Phase 0** — socle SvelteKit (SSO, thème OKI, CSP) + packaging YNH + dev local
|
||||||
|
- [ ] **Phase 1** — registre + profils + moteur de recommandation + export markdown
|
||||||
|
- [ ] **Phase 2** — inbox alertes + flows Node-RED
|
||||||
|
- [ ] **Phase 3** — templates ComfyUI + smoke tests
|
||||||
|
- [ ] **Phase 4** — durcissement (i18n gcf/en, niveau 8 package_check)
|
||||||
+10
-39
@@ -1,42 +1,13 @@
|
|||||||
# sv
|
# veille-ia — application SvelteKit
|
||||||
|
|
||||||
Everything you need to build a Svelte project, powered by [`sv`](https://github.com/sveltejs/cli).
|
Voir le [README racine](../README.md) pour la vue d'ensemble, le dev local et les variables d'environnement, et [SPECS_SVELTE.md](../SPECS_SVELTE.md) pour les conventions de code (prioritaires sur tout choix frontend).
|
||||||
|
|
||||||
## Creating a project
|
```bash
|
||||||
|
npm ci
|
||||||
If you're seeing this, you've probably already done this step. Congrats!
|
npm run dev # dev (DEV_USER=dev dans .env simule le SSO)
|
||||||
|
npm run check # svelte-check — 0 erreur / 0 warning exigé
|
||||||
```sh
|
npm run lint # prettier + eslint
|
||||||
# create a new project
|
npm run test # vitest
|
||||||
npx sv create my-app
|
npm run build # build adapter-node (BASE_PATH=/veille pour un sous-chemin)
|
||||||
|
node build/index.js
|
||||||
```
|
```
|
||||||
|
|
||||||
To recreate this project with the same configuration:
|
|
||||||
|
|
||||||
```sh
|
|
||||||
# recreate this project
|
|
||||||
npx sv@0.17.0 create --template minimal --types ts --add prettier eslint vitest="usages:unit" sveltekit-adapter="adapter:node" --install npm app
|
|
||||||
```
|
|
||||||
|
|
||||||
## Developing
|
|
||||||
|
|
||||||
Once you've created a project and installed dependencies with `npm install` (or `pnpm install` or `yarn`), start a development server:
|
|
||||||
|
|
||||||
```sh
|
|
||||||
npm run dev
|
|
||||||
|
|
||||||
# or start the server and open the app in a new browser tab
|
|
||||||
npm run dev -- --open
|
|
||||||
```
|
|
||||||
|
|
||||||
## Building
|
|
||||||
|
|
||||||
To create a production version of your app:
|
|
||||||
|
|
||||||
```sh
|
|
||||||
npm run build
|
|
||||||
```
|
|
||||||
|
|
||||||
You can preview the production build with `npm run preview`.
|
|
||||||
|
|
||||||
> To deploy your app, you may need to install an [adapter](https://svelte.dev/docs/kit/adapters) for your target environment.
|
|
||||||
|
|||||||
@@ -0,0 +1,11 @@
|
|||||||
|
# Environnement applicatif de veille-ia (chargé par systemd via EnvironmentFile).
|
||||||
|
# Régénéré par les scripts du package (ynh_config_add) — ne pas éditer à la main.
|
||||||
|
|
||||||
|
# Dossier de données persistant : registre/profils YAML + dépôt git interne.
|
||||||
|
DATA_DIR=__DATA_DIR__
|
||||||
|
|
||||||
|
# Endpoint Ollama (optionnel : dégradation gracieuse si injoignable).
|
||||||
|
OLLAMA_URL=__OLLAMA_URL__
|
||||||
|
|
||||||
|
# Token Bearer protégeant POST /api/alerts (généré à l'install — secret).
|
||||||
|
ALERTS_TOKEN=__ALERTS_TOKEN__
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
#sub_path_only rewrite ^__PATH__$ __PATH__/ permanent;
|
||||||
|
location __PATH__/ {
|
||||||
|
|
||||||
|
# Reverse proxy vers le serveur Node (adapter-node).
|
||||||
|
# Pas de '/' final à proxy_pass : l'URI complète (avec le sous-chemin) est
|
||||||
|
# transmise, ce qui correspond au paths.base configuré au build de l'app.
|
||||||
|
proxy_pass http://127.0.0.1:__PORT__;
|
||||||
|
|
||||||
|
# Transmet l'identité SSO (Ynh-User…) après authentification SSOwat, et vide
|
||||||
|
# ces headers pour les requêtes client (non spoofable).
|
||||||
|
include proxy_params_with_auth;
|
||||||
|
|
||||||
|
client_max_body_size 10M;
|
||||||
|
}
|
||||||
@@ -0,0 +1,41 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Veille IA — observatoire de veille sur les modèles IA (SvelteKit)
|
||||||
|
After=network.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
User=__APP__
|
||||||
|
Group=__APP__
|
||||||
|
WorkingDirectory=__INSTALL_DIR__/app
|
||||||
|
|
||||||
|
Environment="PATH=__PATH_WITH_NODEJS__"
|
||||||
|
Environment="NODE_ENV=production"
|
||||||
|
Environment="HOST=127.0.0.1"
|
||||||
|
Environment="PORT=__PORT__"
|
||||||
|
Environment="ORIGIN=https://__DOMAIN____PATH__"
|
||||||
|
# DATA_DIR, OLLAMA_URL, ALERTS_TOKEN (fichier posé à l'install, chmod 400)
|
||||||
|
EnvironmentFile=__INSTALL_DIR__/app/.env
|
||||||
|
|
||||||
|
ExecStart=__NODEJS_DIR__/node build/index.js
|
||||||
|
|
||||||
|
# Logs vers journald : yunohost service log __APP__
|
||||||
|
StandardOutput=journal
|
||||||
|
StandardError=journal
|
||||||
|
SyslogIdentifier=__APP__
|
||||||
|
|
||||||
|
# Sandboxing (niveau modéré : le service doit pouvoir lancer git dans le data_dir,
|
||||||
|
# phase 1 — simple-git — et joindre Ollama en HTTP sortant).
|
||||||
|
NoNewPrivileges=yes
|
||||||
|
PrivateTmp=yes
|
||||||
|
ProtectSystem=full
|
||||||
|
ProtectKernelModules=yes
|
||||||
|
ProtectKernelTunables=yes
|
||||||
|
ProtectControlGroups=yes
|
||||||
|
RestrictRealtime=yes
|
||||||
|
RestrictAddressFamilies=AF_UNIX AF_INET AF_INET6 AF_NETLINK
|
||||||
|
LockPersonality=yes
|
||||||
|
SystemCallArchitectures=native
|
||||||
|
CapabilityBoundingSet=
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
## Administration de Veille IA
|
||||||
|
|
||||||
|
### Ollama (optionnel)
|
||||||
|
|
||||||
|
L'app fonctionne sans Ollama (dégradation gracieuse). Pour activer le classifieur LLM, indiquez l'URL de votre endpoint Ollama à l'install (ou éditez `/var/www/veille-ia/app/.env` puis `systemctl restart veille-ia`). Ollama peut tourner sur une autre machine joignable en HTTP (LAN, wireguard).
|
||||||
|
|
||||||
|
### Données
|
||||||
|
|
||||||
|
Registre et profils (YAML + git interne) : `/home/yunohost.app/veille-ia`. Sauvegardés par le script de backup standard. Non supprimés à la désinstallation sauf `--purge`.
|
||||||
|
|
||||||
|
### Alertes (webhook)
|
||||||
|
|
||||||
|
`POST /api/alerts` est protégé par un token Bearer généré à l'install, visible dans `/var/www/veille-ia/app/.env` (`ALERTS_TOKEN`). À configurer côté Node-RED (flows fournis dans le dépôt source, dossier `nodered-flows/`).
|
||||||
|
|
||||||
|
### Journaux
|
||||||
|
|
||||||
|
`yunohost service log veille-ia` (journald).
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
Veille IA is a personal watchtower for generative AI models: releases, licenses, rankings, with a recommendation engine based on project profiles.
|
||||||
|
|
||||||
|
- **Model registry**: single source of truth (git-versioned YAML), anti-hallucination rule (unverified field = "to be checked")
|
||||||
|
- **Project profiles**: legal constraints per production context
|
||||||
|
- **Recommendation engine**: ranked, justified shortlist with warnings
|
||||||
|
- **Alert inbox**: events classified by a local LLM (Ollama), pushed from Node-RED
|
||||||
|
- **Markdown export**: guides and rankings regenerated from the registry
|
||||||
|
|
||||||
|
Private application (YunoHost SSO), 100% open source (AGPL-3.0), no paid API.
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
Veille IA est un observatoire personnel de veille sur les modèles IA génératifs : sorties, licences, classements, avec un moteur de recommandation par profils de projets.
|
||||||
|
|
||||||
|
- **Registre des modèles** : source de vérité unique (YAML versionné git), règle anti-hallucination (champ non vérifié = « à vérifier »)
|
||||||
|
- **Profils de projets** : contraintes juridiques par contexte de production
|
||||||
|
- **Moteur de recommandation** : shortlist classée et justifiée, avec warnings
|
||||||
|
- **Inbox d'alertes** : événements classifiés par un LLM local (Ollama), poussés depuis Node-RED
|
||||||
|
- **Export markdown** : guides et classements régénérés depuis le registre
|
||||||
|
|
||||||
|
Application privée (SSO YunoHost), 100 % open-source (AGPL-3.0), aucune API payante.
|
||||||
@@ -0,0 +1,69 @@
|
|||||||
|
#:schema https://raw.githubusercontent.com/YunoHost/apps/main/schemas/manifest.v2.schema.json
|
||||||
|
|
||||||
|
packaging_format = 2
|
||||||
|
|
||||||
|
id = "veille-ia"
|
||||||
|
name = "Veille IA"
|
||||||
|
description.en = "Personal watchtower for generative AI models (releases, licenses, rankings)"
|
||||||
|
description.fr = "Observatoire personnel de veille sur les modèles IA génératifs (sorties, licences, classements)"
|
||||||
|
|
||||||
|
version = "0.1.0~ynh1"
|
||||||
|
|
||||||
|
maintainers = ["cyber-mawonaj"]
|
||||||
|
|
||||||
|
[upstream]
|
||||||
|
license = "AGPL-3.0-or-later"
|
||||||
|
code = "https://labola.o-k-i.net/cyber-mawonaj/veille-ia"
|
||||||
|
|
||||||
|
[integration]
|
||||||
|
yunohost = ">= 12.1"
|
||||||
|
helpers_version = "2.1"
|
||||||
|
architectures = "all"
|
||||||
|
multi_instance = false
|
||||||
|
ldap = false
|
||||||
|
sso = true
|
||||||
|
disk = "300M"
|
||||||
|
ram.build = "1G"
|
||||||
|
ram.runtime = "150M"
|
||||||
|
|
||||||
|
[install]
|
||||||
|
[install.domain]
|
||||||
|
type = "domain"
|
||||||
|
|
||||||
|
[install.path]
|
||||||
|
type = "path"
|
||||||
|
default = "/veille"
|
||||||
|
|
||||||
|
[install.init_main_permission]
|
||||||
|
# App privée : "all_users" = SSO requis (remplace l'ancienne question is_public).
|
||||||
|
type = "group"
|
||||||
|
default = "all_users"
|
||||||
|
|
||||||
|
[install.ollama_url]
|
||||||
|
ask.fr = "URL de l'endpoint Ollama (optionnel — l'app fonctionne sans, en mode dégradé)"
|
||||||
|
ask.en = "Ollama endpoint URL (optional — the app works without it, in degraded mode)"
|
||||||
|
type = "string"
|
||||||
|
default = "http://127.0.0.1:11434"
|
||||||
|
optional = true
|
||||||
|
|
||||||
|
[resources]
|
||||||
|
# Archive de l'app, publiée par tag sur la forge (procédure de release : README racine).
|
||||||
|
# ⚠️ sha256 à recalculer après chaque tag : sha256sum vX.Y.Z.tar.gz
|
||||||
|
[resources.sources.main]
|
||||||
|
url = "https://labola.o-k-i.net/cyber-mawonaj/veille-ia/archive/v0.1.0.tar.gz"
|
||||||
|
sha256 = "TODO_SHA256_A_CALCULER_APRES_LE_TAG_v0.1.0"
|
||||||
|
autoupdate.strategy = "latest_forgejo_tag"
|
||||||
|
|
||||||
|
[resources.system_user]
|
||||||
|
|
||||||
|
[resources.install_dir]
|
||||||
|
|
||||||
|
[resources.data_dir]
|
||||||
|
|
||||||
|
[resources.permissions]
|
||||||
|
main.url = "/"
|
||||||
|
|
||||||
|
[resources.ports]
|
||||||
|
|
||||||
|
[resources.nodejs]
|
||||||
|
version = "24"
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# Variables et fonctions communes aux scripts du package veille-ia_ynh.
|
||||||
|
|
||||||
|
# Normalise le chemin YNH pour paths.base de SvelteKit ("/" -> "" ; sinon "/veille").
|
||||||
|
veille_ia_base_path() {
|
||||||
|
if [ "$path" = "/" ]; then
|
||||||
|
echo ""
|
||||||
|
else
|
||||||
|
echo "$path"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Installe les dépendances, build l'app (avec le bon sous-chemin), puis élague
|
||||||
|
# les devDependencies pour ne garder que le runtime.
|
||||||
|
veille_ia_build_app() {
|
||||||
|
pushd "$install_dir/app"
|
||||||
|
ynh_hide_warnings ynh_exec_as_app npm ci
|
||||||
|
ynh_hide_warnings ynh_exec_as_app env BASE_PATH="$(veille_ia_base_path)" npm run build
|
||||||
|
ynh_hide_warnings ynh_exec_as_app npm prune --omit=dev
|
||||||
|
popd
|
||||||
|
}
|
||||||
|
|
||||||
|
# (Re)génère le fichier d'environnement applicatif et verrouille ses droits.
|
||||||
|
veille_ia_write_env() {
|
||||||
|
ynh_config_add --template="env" --destination="$install_dir/app/.env"
|
||||||
|
chmod 400 "$install_dir/app/.env"
|
||||||
|
chown "$app:$app" "$install_dir/app/.env"
|
||||||
|
}
|
||||||
Executable
+19
@@ -0,0 +1,19 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
source ../settings/scripts/_common.sh
|
||||||
|
source /usr/share/yunohost/helpers
|
||||||
|
|
||||||
|
ynh_print_info "Déclaration des fichiers à sauvegarder..."
|
||||||
|
|
||||||
|
# Code + build + .env (reconstruisible, mais sauvegardé pour une restauration rapide).
|
||||||
|
ynh_backup "$install_dir"
|
||||||
|
|
||||||
|
# Données : registre/profils YAML + dépôt git interne.
|
||||||
|
# (Ignoré par le backup de sécurité pré-upgrade — comportement standard du cœur.)
|
||||||
|
ynh_backup "$data_dir"
|
||||||
|
|
||||||
|
ynh_backup "/etc/nginx/conf.d/$domain.d/$app.conf"
|
||||||
|
|
||||||
|
ynh_backup "/etc/systemd/system/$app.service"
|
||||||
|
|
||||||
|
ynh_print_info "Sauvegarde de veille-ia terminée"
|
||||||
Executable
+42
@@ -0,0 +1,42 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
source _common.sh
|
||||||
|
source /usr/share/yunohost/helpers
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# STOP SYSTEMD SERVICE
|
||||||
|
#=================================================
|
||||||
|
ynh_script_progression "Arrêt du service systemd de veille-ia..."
|
||||||
|
|
||||||
|
ynh_systemctl --service="$app" --action="stop"
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# UPDATE NGINX CONFIGURATION
|
||||||
|
#=================================================
|
||||||
|
ynh_script_progression "Mise à jour de la configuration nginx de veille-ia..."
|
||||||
|
|
||||||
|
# $domain/$path pointent déjà vers les nouvelles valeurs ($old_domain/$old_path
|
||||||
|
# et $change_domain/$change_path sont disponibles si besoin).
|
||||||
|
ynh_config_change_url_nginx
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# RE-BUILD THE APP WITH THE NEW BASE PATH
|
||||||
|
#=================================================
|
||||||
|
ynh_script_progression "Re-build de veille-ia pour le nouveau chemin..."
|
||||||
|
|
||||||
|
# paths.base est figé au build (SvelteKit) : le changement de chemin impose
|
||||||
|
# un re-build avec le nouveau BASE_PATH.
|
||||||
|
veille_ia_build_app
|
||||||
|
|
||||||
|
# .env : régénéré pour rester cohérent (ORIGIN systemd suit __DOMAIN____PATH__
|
||||||
|
# via ynh_config_change_url_nginx ; le .env ne contient pas le domaine).
|
||||||
|
veille_ia_write_env
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# START SYSTEMD SERVICE
|
||||||
|
#=================================================
|
||||||
|
ynh_script_progression "Démarrage du service systemd de veille-ia..."
|
||||||
|
|
||||||
|
ynh_systemctl --service="$app" --action="start"
|
||||||
|
|
||||||
|
ynh_script_progression "Changement d'URL de veille-ia terminé"
|
||||||
Executable
+58
@@ -0,0 +1,58 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
source _common.sh
|
||||||
|
source /usr/share/yunohost/helpers
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# RETRIEVE ARGUMENTS FROM THE MANIFEST AND GENERATE SETTINGS
|
||||||
|
#=================================================
|
||||||
|
ynh_script_progression "Récupération des paramètres de veille-ia..."
|
||||||
|
|
||||||
|
# Token protégeant POST /api/alerts (webhook Node-RED) — secret généré à l'install.
|
||||||
|
alerts_token="$(ynh_string_random 48)"
|
||||||
|
ynh_app_setting_set --key=alerts_token --value="$alerts_token"
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# DEPLOY APP FILES
|
||||||
|
#=================================================
|
||||||
|
ynh_script_progression "Déploiement des fichiers de veille-ia..."
|
||||||
|
|
||||||
|
# Archive du tag de la forge (ressource sources.main du manifest), pré-téléchargée.
|
||||||
|
ynh_setup_source --dest_dir="$install_dir"
|
||||||
|
|
||||||
|
# L'app SvelteKit vit dans le sous-dossier app/ du dépôt.
|
||||||
|
chown -R "$app:$app" "$install_dir"
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# BUILD THE APP
|
||||||
|
#=================================================
|
||||||
|
ynh_script_progression "Installation des dépendances et build de veille-ia..."
|
||||||
|
|
||||||
|
veille_ia_build_app
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# APP CONFIGURATION
|
||||||
|
#=================================================
|
||||||
|
ynh_script_progression "Ajout de la configuration de veille-ia..."
|
||||||
|
|
||||||
|
veille_ia_write_env
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# SYSTEM CONFIGURATION
|
||||||
|
#=================================================
|
||||||
|
ynh_script_progression "Ajout de la configuration système pour veille-ia..."
|
||||||
|
|
||||||
|
ynh_config_add_nginx
|
||||||
|
|
||||||
|
ynh_config_add_systemd
|
||||||
|
|
||||||
|
yunohost service add "$app" --description="Observatoire de veille sur les modèles IA"
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# START SYSTEMD SERVICE
|
||||||
|
#=================================================
|
||||||
|
ynh_script_progression "Démarrage du service systemd de veille-ia..."
|
||||||
|
|
||||||
|
ynh_systemctl --service="$app" --action="start"
|
||||||
|
|
||||||
|
ynh_script_progression "Installation de veille-ia terminée"
|
||||||
Executable
+18
@@ -0,0 +1,18 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
source _common.sh
|
||||||
|
source /usr/share/yunohost/helpers
|
||||||
|
|
||||||
|
ynh_script_progression "Suppression de la configuration système de veille-ia..."
|
||||||
|
|
||||||
|
# Les ressources (user, dossiers, port, nodejs, permissions) sont déprovisionnées
|
||||||
|
# automatiquement par le cœur après ce script. Le data_dir est conservé sauf --purge.
|
||||||
|
|
||||||
|
if ynh_hide_warnings yunohost service status "$app" >/dev/null; then
|
||||||
|
yunohost service remove "$app"
|
||||||
|
fi
|
||||||
|
ynh_config_remove_systemd
|
||||||
|
|
||||||
|
ynh_config_remove_nginx
|
||||||
|
|
||||||
|
ynh_script_progression "Suppression de veille-ia terminée"
|
||||||
Executable
+54
@@ -0,0 +1,54 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
source ../settings/scripts/_common.sh
|
||||||
|
source /usr/share/yunohost/helpers
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# RESTORE THE APP MAIN DIRECTORY
|
||||||
|
#=================================================
|
||||||
|
ynh_script_progression "Restauration du dossier principal de veille-ia..."
|
||||||
|
|
||||||
|
# Les ressources (user, dossiers, port, nodejs) sont re-provisionnées par le cœur
|
||||||
|
# AVANT ce script. $domain, $path, $install_dir, $data_dir… sont rechargés.
|
||||||
|
ynh_restore "$install_dir"
|
||||||
|
chown -R "$app:$app" "$install_dir"
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# RE-BUILD THE APP
|
||||||
|
#=================================================
|
||||||
|
ynh_script_progression "Réinstallation des dépendances et build de veille-ia..."
|
||||||
|
|
||||||
|
# Le build restauré est régénéré proprement (version de node, sous-chemin).
|
||||||
|
veille_ia_build_app
|
||||||
|
|
||||||
|
veille_ia_write_env
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# RESTORE THE DATA DIRECTORY
|
||||||
|
#=================================================
|
||||||
|
ynh_script_progression "Restauration du dossier de données de veille-ia..."
|
||||||
|
|
||||||
|
ynh_restore "$data_dir"
|
||||||
|
chown -R "$app:$app" "$data_dir"
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# RESTORE SYSTEM CONFIGURATIONS
|
||||||
|
#=================================================
|
||||||
|
ynh_script_progression "Restauration de la configuration système de veille-ia..."
|
||||||
|
|
||||||
|
ynh_restore "/etc/nginx/conf.d/$domain.d/$app.conf"
|
||||||
|
|
||||||
|
ynh_restore "/etc/systemd/system/$app.service"
|
||||||
|
systemctl enable "$app.service" --quiet
|
||||||
|
|
||||||
|
yunohost service add "$app" --description="Observatoire de veille sur les modèles IA"
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# RELOAD NGINX AND START THE APP
|
||||||
|
#=================================================
|
||||||
|
ynh_script_progression "Rechargement de nginx et démarrage de veille-ia..."
|
||||||
|
|
||||||
|
ynh_systemctl --service="$app" --action="start"
|
||||||
|
ynh_systemctl --service=nginx --action=reload
|
||||||
|
|
||||||
|
ynh_script_progression "Restauration de veille-ia terminée"
|
||||||
Executable
+67
@@ -0,0 +1,67 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
source _common.sh
|
||||||
|
source /usr/share/yunohost/helpers
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# STOP SYSTEMD SERVICE
|
||||||
|
#=================================================
|
||||||
|
ynh_script_progression "Arrêt du service systemd de veille-ia..."
|
||||||
|
|
||||||
|
ynh_systemctl --service="$app" --action="stop"
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# ENSURE DOWNWARD COMPATIBILITY
|
||||||
|
#=================================================
|
||||||
|
ynh_script_progression "Vérification des paramètres de veille-ia..."
|
||||||
|
|
||||||
|
# Token d'alertes : créé à l'install ; le régénère si absent (installs anciennes).
|
||||||
|
if [ -z "${alerts_token:-}" ]; then
|
||||||
|
alerts_token="$(ynh_string_random 48)"
|
||||||
|
ynh_app_setting_set --key=alerts_token --value="$alerts_token"
|
||||||
|
fi
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# UPGRADE SOURCE FILES
|
||||||
|
#=================================================
|
||||||
|
ynh_script_progression "Mise à jour des fichiers de veille-ia..."
|
||||||
|
|
||||||
|
# Un backup de sécurité a déjà été réalisé par le cœur. Remplacement complet :
|
||||||
|
# le .env est régénéré juste après depuis les settings persistants.
|
||||||
|
ynh_setup_source --dest_dir="$install_dir" --full_replace
|
||||||
|
|
||||||
|
chown -R "$app:$app" "$install_dir"
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# RE-BUILD THE APP
|
||||||
|
#=================================================
|
||||||
|
ynh_script_progression "Installation des dépendances et build de veille-ia..."
|
||||||
|
|
||||||
|
veille_ia_build_app
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# UPDATE APP CONFIGURATION
|
||||||
|
#=================================================
|
||||||
|
ynh_script_progression "Mise à jour de la configuration de veille-ia..."
|
||||||
|
|
||||||
|
veille_ia_write_env
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# UPDATE SYSTEM CONFIGURATION
|
||||||
|
#=================================================
|
||||||
|
ynh_script_progression "Mise à jour de la configuration système pour veille-ia..."
|
||||||
|
|
||||||
|
ynh_config_add_nginx
|
||||||
|
|
||||||
|
ynh_config_add_systemd
|
||||||
|
|
||||||
|
yunohost service add "$app" --description="Observatoire de veille sur les modèles IA"
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# START SYSTEMD SERVICE
|
||||||
|
#=================================================
|
||||||
|
ynh_script_progression "Démarrage du service systemd de veille-ia..."
|
||||||
|
|
||||||
|
ynh_systemctl --service="$app" --action="start"
|
||||||
|
|
||||||
|
ynh_script_progression "Mise à jour de veille-ia terminée"
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
#:schema https://raw.githubusercontent.com/YunoHost/apps/main/schemas/tests.v1.schema.json
|
||||||
|
|
||||||
|
test_format = 1.0
|
||||||
|
|
||||||
|
# Le minimum suffit : les tests (install.root, install.subdir, backup_restore,
|
||||||
|
# upgrade, change_url…) sont déduits automatiquement du manifest.
|
||||||
|
[default]
|
||||||
Reference in New Issue
Block a user