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.
Cloner le dépôt, builder l'image et développer l'application avec Docker Compose.
Aller à la partie 1 →Partie 2 — Images GHCRUtiliser uniquement les images publiées, sans dépôt Git, sans build et sans Compose.
Aller à la partie 2 →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 versionSi 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-cmsSi le dépôt est déjà cloné :
cd ~/dev/onir-cms
git pull --ff-only3. 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.sh4. Builder et démarrer
cd ~/dev/onir-cms
sudo docker compose --env-file .env.docker -f docker-compose.dev.yml up --build -dLe 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 appAttendez 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.dockerL'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 downMise à 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 -dRemise à 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 -vPartie 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 -v2. 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-media4. 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:166. Attendre que PostgreSQL soit prêt
until sudo docker exec onir-cms-db pg_isready -U onir_cms -d onir_cms; do
sleep 1
done7. 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-dbSuppression définitive des données, après l'arrêt des conteneurs :
sudo docker volume rm onir-cms-db-data onir-cms-mediaDé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-dbet 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 avecsudo docker ps -apuis recréer le conteneur DB. - Chat IA indisponible : renseigner
AI_API_TOKEN,AI_PRODUCT_IDet éventuellementAI_MODELdans~/.onir-cms.env, puis recréer l'application.