ONIR CMS
Installation

Installer ONIR CMS

Deux parcours indépendants. Choisissez-en un et suivez-le de A à Z sans mélanger les commandes ni les fichiers d'environnement.

Partie 1 — Build local depuis le dépôt

Ce parcours utilise le dépôt Git, docker-compose.dev.yml et le fichier .env.docker. Il ne faut pas utiliser les commandes de la partie 2.

1. Prérequis

  • Windows : Docker Desktop avec WSL 2, intégration activée pour Ubuntu. Les commandes se lancent dans le terminal Ubuntu.
  • Linux : Docker Engine et le plugin Compose.
  • macOS : Docker Desktop.
  • Git et OpenSSL dans le terminal utilisé.
docker --version
docker compose version
git --version
openssl version

Si votre installation Docker exige sudo, gardez-le dans les commandes ci-dessous. Sous Docker Desktop/WSL, il peut être inutile.

2. Cloner le dépôt

Le projet doit être dans le système de fichiers Linux, par exemple ~/dev/onir-cms, et non sous /mnt/c.

mkdir -p ~/dev
cd ~/dev
git clone https://github.com/RINOHeinrich1/onir-cms.git
cd onir-cms

Si le dépôt est déjà cloné :

cd ~/dev/onir-cms
git pull --ff-only

3. Générer l'environnement local

Le script génère .env.docker, les secrets et le mot de passe du compte administrateur.

cd ~/dev/onir-cms
./scripts/docker-dev-init.sh

4. Builder et démarrer

cd ~/dev/onir-cms
sudo docker compose --env-file .env.docker -f docker-compose.dev.yml up --build -d

Le premier build prend quelques minutes. Les services db, migrate et app sont créés automatiquement.

5. Vérifier

cd ~/dev/onir-cms
sudo docker compose --env-file .env.docker -f docker-compose.dev.yml ps

# Suivre le démarrage
cd ~/dev/onir-cms
sudo docker compose --env-file .env.docker -f docker-compose.dev.yml logs -f app

Attendez que app soit healthy, puis ouvrez http://localhost:3000.

6. Se connecter

  • Email : admin@example.com
  • Mot de passe : affiché par le script ou récupérable ci-dessous.
cd ~/dev/onir-cms
grep '^DEFAULT_ADMIN_PASSWORD=' .env.docker

L'application impose le changement du mot de passe à la première connexion.

7. Arrêter ou mettre à jour

Arrêt en conservant les données :

cd ~/dev/onir-cms
sudo docker compose --env-file .env.docker -f docker-compose.dev.yml down

Mise à jour du code puis rebuild :

cd ~/dev/onir-cms
git pull --ff-only
sudo docker compose --env-file .env.docker -f docker-compose.dev.yml up --build -d

Remise à zéro complète, uniquement en développement :

cd ~/dev/onir-cms
sudo docker compose --env-file .env.docker -f docker-compose.dev.yml down -v

Partie 2 — Images GHCR sans dépôt

Ce parcours utilise uniquement les images publiées sur GitHub Container Registry : ghcr.io/rinoheinrich1/onir-cms. Il ne faut ni dépôt Git, ni build, ni Docker Compose.

Exécutez chaque bloc séparément, dans l'ordre. Les mots de passe sudo ne seront pas avalés par un copier-coller massif : chaque bloc est une unité exécutable.

1. Prérequis

  • Docker opérationnel.
  • OpenSSL disponible.
  • Windows : Docker Desktop avec WSL 2 et intégration Ubuntu. Les commandes se lancent dans le terminal Ubuntu.
  • Linux / macOS : un terminal avec Docker.
docker --version
openssl version
sudo -v

2. Créer le fichier d'environnement

Ce fichier reste en dehors du dépôt, dans ~/.onir-cms.env. Il contient les secrets générés une seule fois. Les quatre secrets applicatifs (SESSION_SECRET, LINK_TOKEN_KEY, AI_PROVIDER_KEY, WEBHOOK_SECRET_KEY) sont générés au premier démarrage puis gérés depuis /configuration.

DB_PASSWORD="$(openssl rand -hex 16)"
CONFIG_MASTER_KEY="$(openssl rand -hex 32)"
ADMIN_PASSWORD="Admin-$(openssl rand -hex 8)"

cat > "$HOME/.onir-cms.env" <<EOF
ONIR_CMS_VERSION=0.1.1
DATABASE_URL=postgres://onir_cms:$DB_PASSWORD@onir-cms-db:5432/onir_cms
CONFIG_MASTER_KEY=$CONFIG_MASTER_KEY
AI_ALLOW_PRIVATE_NETWORKS=false
DEFAULT_ADMIN_EMAIL=admin@example.com
DEFAULT_ADMIN_PASSWORD=$ADMIN_PASSWORD
APP_URL=http://localhost:3000
MEDIA_DIR=/app/var/media
AI_API_TOKEN=
AI_PRODUCT_ID=
AI_MODEL=Qwen/Qwen3.5-122B-A10B-FP8
EOF

chmod 600 "$HOME/.onir-cms.env"
echo "Mot de passe admin : $ADMIN_PASSWORD"

Notez le mot de passe admin affiché. Pour modifier la version ou les secrets plus tard : nano ~/.onir-cms.env.

3. Créer le réseau et les volumes

sudo docker network create onir-cms-net 2>/dev/null || true
sudo docker volume create onir-cms-db-data
sudo docker volume create onir-cms-media

4. Télécharger les images

set -a
. "$HOME/.onir-cms.env"
set +a

sudo docker pull postgres:16
sudo docker pull "ghcr.io/rinoheinrich1/onir-cms:${ONIR_CMS_VERSION}-migrate"
sudo docker pull "ghcr.io/rinoheinrich1/onir-cms:${ONIR_CMS_VERSION}"

5. Démarrer PostgreSQL

set -a
. "$HOME/.onir-cms.env"
set +a

DB_PASSWORD="$(printf '%s' "$DATABASE_URL" | sed -E 's#^[^:]+://[^:]+:([^@]+)@.*#\1#')"
test -n "$DB_PASSWORD" || { echo "Mot de passe introuvable dans DATABASE_URL"; exit 1; }

sudo docker run -d \
  --name onir-cms-db \
  --restart unless-stopped \
  --network onir-cms-net \
  -e POSTGRES_DB=onir_cms \
  -e POSTGRES_USER=onir_cms \
  -e POSTGRES_PASSWORD="$DB_PASSWORD" \
  -v onir-cms-db-data:/var/lib/postgresql/data \
  postgres:16

6. Attendre que PostgreSQL soit prêt

until sudo docker exec onir-cms-db pg_isready -U onir_cms -d onir_cms; do
  sleep 1
done

7. Appliquer les migrations et le seed

Cette commande crée le schéma, l'organisation initiale et le compte administrateur. Le conteneur s'arrête ensuite.

set -a
. "$HOME/.onir-cms.env"
set +a

sudo docker run --rm \
  --network onir-cms-net \
  --env-file "$HOME/.onir-cms.env" \
  "ghcr.io/rinoheinrich1/onir-cms:${ONIR_CMS_VERSION}-migrate"

8. Démarrer l'application

set -a
. "$HOME/.onir-cms.env"
set +a

sudo docker run -d \
  --name onir-cms-app \
  --restart unless-stopped \
  --network onir-cms-net \
  --env-file "$HOME/.onir-cms.env" \
  -p 127.0.0.1:3000:3000 \
  -v onir-cms-media:/app/var/media \
  "ghcr.io/rinoheinrich1/onir-cms:${ONIR_CMS_VERSION}"

9. Vérifier et se connecter

curl http://localhost:3000/api/health
grep '^DEFAULT_ADMIN_PASSWORD=' "$HOME/.onir-cms.env"

Ouvrez http://localhost:3000. Email : admin@example.com. Le mot de passe est celui affiché à l'étape 2 ou récupéré par la commande ci-dessus.

10. Mettre à jour l'instance

Modifier ONIR_CMS_VERSION dans le fichier d'environnement :

nano "$HOME/.onir-cms.env"

Puis télécharger les nouvelles images :

set -a
. "$HOME/.onir-cms.env"
set +a

sudo docker pull postgres:16
sudo docker pull "ghcr.io/rinoheinrich1/onir-cms:${ONIR_CMS_VERSION}-migrate"
sudo docker pull "ghcr.io/rinoheinrich1/onir-cms:${ONIR_CMS_VERSION}"

Appliquer les migrations de la nouvelle version :

set -a
. "$HOME/.onir-cms.env"
set +a

sudo docker run --rm \
  --network onir-cms-net \
  --env-file "$HOME/.onir-cms.env" \
  "ghcr.io/rinoheinrich1/onir-cms:${ONIR_CMS_VERSION}-migrate"

Recréer le conteneur applicatif :

sudo docker rm -f onir-cms-app 2>/dev/null || true

set -a
. "$HOME/.onir-cms.env"
set +a

sudo docker run -d \
  --name onir-cms-app \
  --restart unless-stopped \
  --network onir-cms-net \
  --env-file "$HOME/.onir-cms.env" \
  -p 127.0.0.1:3000:3000 \
  -v onir-cms-media:/app/var/media \
  "ghcr.io/rinoheinrich1/onir-cms:${ONIR_CMS_VERSION}"

11. Arrêter

Arrêt en conservant les volumes :

sudo docker stop onir-cms-app onir-cms-db
sudo docker rm onir-cms-app onir-cms-db

Suppression définitive des données, après l'arrêt des conteneurs :

sudo docker volume rm onir-cms-db-data onir-cms-media

Dépannage

  • Nom de conteneur déjà utilisé : supprimer les anciens conteneurs avec sudo docker rm -f onir-cms-app onir-cms-db.
  • Image introuvable : vérifier que la version existe avec sudo docker pull ghcr.io/rinoheinrich1/onir-cms:0.1.1.
  • Application non healthy : consulter sudo docker logs onir-cms-app.
  • Erreur de migration : consulter sudo docker logs onir-cms-db et relancer l'étape 7.
  • ENOTFOUND onir-cms-db : le conteneur PostgreSQL n'est pas démarré ou n'est pas attaché au réseau onir-cms-net. Vérifier avec sudo docker ps -a puis recréer le conteneur DB.
  • Chat IA indisponible : renseigner AI_API_TOKEN, AI_PRODUCT_ID et éventuellement AI_MODEL dans ~/.onir-cms.env, puis recréer l'application.