Commit acda2f23 authored by Kourser's avatar Kourser
Browse files

Installation guidée, pour qui n'a que Docker

L'installation demandait Docker, Node et pnpm. Les deux derniers ne servaient
qu'à écrire un .env et à lancer une commande : un prérequis que l'exploitant
n'utilise jamais ensuite. outils/installer.sh pose les questions, écrit le
.env, lève la composition — et rien d'autre.

Pourquoi il n'appelle ni pnpm ni node
  L'artefact est construit dans l'image, et les migrations sont jouées par
  l'application à son démarrage. Rien, dans le chemin de la composition, ne
  réclame une chaîne Node sur l'hôte.

  Conséquence assumée : les secrets sont tirés en shell — openssl, à défaut
  /dev/urandom — et non par outils/preparer-env.mjs, qui reste la voie du
  développement. Les deux outils suivent la même règle : aucune valeur
  d'exemple ne survit, et rien n'est écrit en clair sur le terminal.

Ce que le script refuse de faire
  Il n'écrase pas un .env existant sans le dire. Ce fichier porte peut-être les
  secrets d'une instance en service : il propose de le garder, ou de le
  sauvegarder à côté avant d'en écrire un neuf.

  Il ne demande jamais la clé .p8 d'Apple. Saisie à une invite, elle resterait
  dans l'historique du shell et dans le tampon du terminal — elle se colle dans
  le .env, à la main.

  Il ne lève rien sans un dernier accord, et affiche alors la commande exacte —
  profil et liste de services compris — plutôt qu'une commande générique qui,
  recopiée, lèverait les conteneurs qu'on venait d'écarter.

Le relais est un profil, pas une variable
  Première version : vider KASTELL_RELAIS_POUSSEE pour désactiver le relais. Le
  schéma la valide comme une adresse — une valeur vide n'est donc pas
  « absente » mais invalide, et l'instance refuse de démarrer. La composition
  définit toujours la variable, y compris hors profil : le conteneur aurait reçu
  la même chaîne vide.

  L'adresse reste donc renseignée, comme dans .env.example, et c'est le profil
  docker compose qui décide si le conteneur tourne. Sans conséquence sur
  l'honnêteté du produit : la sonde d'état mesure la joignabilité réelle du
  relais plutôt que de croire une adresse.

Ce qui n'est pas résolu ici
  amorcer-root ne voyage pas dans l'image : qui installe sans Node ne peut pas
  s'accorder le droit root. Le script et la documentation le disent, au lieu de
  laisser buter dessus.

Éprouvé sous expect, dans une copie isolée du dépôt, avec un docker factice :
les deux jeux de réponses complets, les trois chemins d'un .env existant, les
boucles de validation, les avertissements production et contenu mixte, et la
commande composée. Le .env engendré passe chargerEnv(), y compris en
KASTELL_ENV=production où EX-27 refuse toute valeur d'exemple survivante.

Non éprouvé : le « docker compose up » réel — Docker n'est pas installé sur la
machine de travail. Le site se construit pour les deux locales.

Signed-off-by: default avatarKourser <contact@kourser.bzh>
Co-Authored-By: default avatarClaude Opus 5 <noreply@anthropic.com>
parent 3d981ac7
Loading
Loading
Loading
Loading
Loading
+20 −5
Original line number Diff line number Diff line
@@ -43,20 +43,35 @@ rétention, et la pile Docker.

## Démarrage

Prérequis : Docker, Node ≥ 22, pnpm.
### Installation guidée — Docker seul

```bash
cp .env.example .env
# renseigner les valeurs CHANGEZ-MOI : openssl rand -hex 32
pnpm install
pnpm demarrer    # postgres, redis, minio, application
sh outils/installer.sh
```

Le script pose les questions dont la réponse ne se devine pas — port, adresse
publique, visioconférence, analyse antivirale, relais de notification — écrit
`.env` en **tirant au sort tous les secrets**, puis lève la composition et
attend que l'instance réponde. Un `.env` existant n'est jamais écrasé sans votre
accord : il propose de le garder, ou de le sauvegarder à côté.

Il n'appelle ni pnpm ni node, et n'en a pas besoin : l'artefact est construit
dans l'image, et les migrations sont jouées par l'application à son démarrage.

L'interface et l'API sont servies par le **même artefact, sur le même port** :
`http://localhost:8080`. Un seul port, une seule origine — le cookie de session
n'a donc jamais de frontière à franchir, et l'auto-hébergeur n'a pas de reverse
proxy à composer pour que l'application fonctionne.

### Pour développer — Docker, Node ≥ 22, pnpm

```bash
cp .env.example .env
# renseigner les valeurs CHANGEZ-MOI : openssl rand -hex 32
pnpm install
pnpm demarrer    # postgres, redis, minio, application
```

Pour travailler sur le code sans reconstruire l'image à chaque fois :

```bash

outils/installer.sh

0 → 100755
+537 −0

File added.

Preview size limit exceeded, changes collapsed.

+38 −2
Original line number Diff line number Diff line
@@ -8,9 +8,39 @@ sidebar_position: 3

## Prérequis

Docker, Node ≥ 22, pnpm. Rien d'autre.
Docker. Rien d'autre pour installer ; Node ≥ 22 et pnpm en plus si vous
développez sur le code.

## En trois commandes
## Installation guidée

```bash
git clone https://git.cythin.eu/cythin/kastell.git
cd kastell
sh outils/installer.sh
```

Le script pose les questions dont la réponse ne se devine pas — port, adresse
publique, environnement, visioconférence, analyse antivirale, relais de
notification — écrit `.env` en **tirant au sort tous les secrets**, puis lève la
composition et attend que l'instance réponde.

Un `.env` existant n'est jamais écrasé sans votre accord : le script propose de
le garder tel quel, ou de le sauvegarder à côté avant d'en écrire un neuf. Ce
fichier porte peut-être les secrets d'une instance en service.

:::tip Pourquoi il n'appelle ni pnpm ni node
L'artefact est construit dans l'image, et les migrations sont jouées par
l'application à son démarrage. Exiger une chaîne Node sur l'hôte pour lever six
conteneurs ajouterait un prérequis que l'exploitant n'utiliserait jamais ensuite.
:::

:::note La clé Apple ne se saisit pas à une invite
Le script ne demande jamais la clé `.p8` du relais de notification : saisie à une
invite, elle resterait dans l'historique du shell et dans le tampon du terminal.
Elle se colle dans `.env`, à la main.
:::

## En trois commandes, avec pnpm

```bash
git clone https://git.cythin.eu/cythin/kastell.git
@@ -44,6 +74,12 @@ pnpm amorcer-root votre@adresse.fr "Amorçage de l'instance."

La **console root** apparaît alors dans le rail.

:::caution Ce geste demande la chaîne Node
`amorcer-root` ne voyage pas dans l'image. Si vous avez installé par
`outils/installer.sh` sans Node sur l'hôte, il faut Node ≥ 22 et pnpm pour cette
seule commande.
:::

:::note L'ordre n'est pas arbitraire
`amorcer-root` ne crée pas de compte : il **accorde un droit à un compte
existant**. Un script qui créerait le compte devrait choisir un mot de passe,
+38 −2

File changed.

Preview size limit exceeded, changes collapsed.