CraftCMS 6 min de lecture

Installer Craft CMS 6 alpha avec DDEV, PHP 8.5 et Laravel

#craftcms#laravel#ddev#php

J'ai testé l'installation de Craft CMS 6 alpha avec DDEV, en suivant la nouvelle direction Laravel du CMS. Voici mon retour d'expérience, les points à surveiller et ce que cette évolution m'inspire.

Installer Craft CMS 6 alpha avec DDEV, PHP 8.5 et Laravel

J'avais envie de tester Craft CMS 6 alpha pour une raison assez simple: Craft fait partie des CMS que j'aime bien utiliser, et Laravel est un framework que je pratique depuis des années. Quand j'ai vu que Craft 6 commençait à s'appuyer beaucoup plus clairement sur Laravel, j'ai voulu regarder ça de près.

Craft, je l'apprécie pour sa façon propre de modéliser du contenu. Laravel, je l'aime pour son confort de développement, son écosystème et cette impression qu'on peut avancer vite sans perdre le fil architectural. Donc forcément, voir Craft prendre cette direction m'a rendu curieux.

La documentation officielle Craft 6 existe déjà et propose une procédure d'installation avec DDEV:

https://craftcms.com/docs/6.x/install.html

Ce billet ne cherche donc pas à remplacer la documentation officielle. C'est plutôt un retour d'expérience: ce que j'ai testé, ce que j'ai vérifié, les petits détails qui m'ont paru importants, et mon avis sur cette nouvelle direction.

Le contexte du test

J'ai testé l'installation avec:

  • DDEV;
  • PHP 8.5;
  • MySQL;
  • Craft CMS 6.0.0-alpha.9;
  • le starter Craft 6 alpha;
  • un projet local accessible via une URL DDEV.

Point important: Craft CMS 6 alpha demande PHP 8.5. Ce n'est pas un détail cosmétique, Composer refusera l'installation si l'environnement PHP ne suit pas.

La commande DDEV recommandée

La documentation Craft 6 recommande de configurer DDEV comme un projet Laravel:

ddev config --project-type=laravel --docroot=public --php-version=8.5 --database=mysql:8.4

C'est assez révélateur de la direction prise par Craft 6: le docroot est public, la structure est plus proche de Laravel, et DDEV doit être configuré en conséquence.

Dans mon premier test, j'avais aussi validé l'installation avec MySQL 8.0. Mais pour coller à la documentation officielle, je partirais maintenant sur MySQL 8.4.

Installer le starter Craft 6 alpha

L'autre point important est de versionner le starter, pas seulement le CMS.

La commande officielle utilise une contrainte sur le starter Craft 6 alpha:

ddev composer create-project "craftcms/craft:^6.0.0-alpha.1"

Dans mes tests, cette contrainte a résolu le CMS en:

craftcms/cms 6.0.0-alpha.9

On peut le vérifier avec:

ddev composer show craftcms/cms

Résultat attendu:

versions : * 6.0.0-alpha.9
requires : php ^8.5

Ce que le starter fournit déjà

Un point que je voulais vérifier: faut-il modifier manuellement craft, bootstrap/app.php, config ou public/index.php?

Réponse courte: non.

Avec le starter Craft 6 alpha, la structure Laravel attendue est déjà présente:

artisan
bootstrap/app.php
bootstrap/providers.php
config/app.php
config/database.php
config/cache.php
config/session.php
craft
public/index.php
routes/web.php
routes/console.php

Le starter publie aussi automatiquement les assets et la configuration Craft pendant l'installation Composer:

@php artisan package:discover --ansi
@php artisan craft:setup:publish --ansi

C'est une bonne nouvelle: pour une installation neuve, on n'a pas besoin de bricoler la structure du projet.

Le détail à surveiller: le fichier `.env`

Le seul point que j'ai vraiment dû ajuster dans mon test concernait le .env.

Le starter peut générer une configuration orientée PostgreSQL local. Si votre projet DDEV est configuré en MySQL, il faut aligner les variables de connexion:

APP_NAME="craftCMS-6"
APP_ENV=local
APP_KEY=base64:...
APP_DEBUG=true
APP_URL=https://craftcms-6.ddev.site

DB_CONNECTION=mysql
DB_HOST=db
DB_PORT=3306
DB_DATABASE=db
DB_USERNAME=db
DB_PASSWORD=db

CACHE_STORE=file
SESSION_DRIVER=file
QUEUE_CONNECTION=sync
MAIL_MAILER=log

Si la clé Laravel n'a pas encore été générée:

ddev exec php artisan key:generate --force

Dans mon test, j'ai aussi préféré utiliser:

QUEUE_CONNECTION=sync

Pour une installation locale, cela évite de dépendre d'une table de queue au tout début du projet.

Lancer l'installation Craft

La commande d'installation est désormais côté Craft 6:

ddev exec php craft craft:install \
  --email=admin@example.test \
  --username=admin \
  --password='Password123!' \
  --siteName='craftCMS-6' \
  --siteUrl='https://craftcms-6.ddev.site' \
  --language=fr \
  --timezone=Europe/Paris \
  --no-interaction

Dans mon test, l'installation s'est terminée correctement:

Craft CMS installed successfully!

Vérifier rapidement

Version Craft:

ddev exec php craft --version

Résultat:

Craft CMS 6.0.0-alpha.9

État DDEV:

ddev describe

Points à vérifier:

PHP: 8.5
Docroot: public
DB: mysql

Admin Craft:

curl -I -k https://craftcms-6.ddev.site/admin

Dans mon cas, l'admin répondait bien avec une redirection vers /admin/login.

Ce que je retiens de l'installation

Ce test m'a surtout confirmé trois choses.

D'abord, Craft 6 assume clairement son rapprochement avec Laravel. Le choix du project-type=laravel, le docroot public, les commandes Artisan, le bootstrap et la structure du starter vont tous dans ce sens.

Ensuite, l'installation est plutôt propre quand on part du bon starter. Le point important est de ne pas raisonner uniquement en version du paquet craftcms/cms, mais aussi en version du starter craftcms/craft.

Enfin, le seul vrai ajustement local concerne l'environnement DDEV: PHP 8.5, base de données, URL locale, queue et variables .env. Ce sont des détails classiques de setup, pas des corrections structurelles.

Mon avis après ce premier test

Ce premier contact avec Craft CMS 6 alpha me laisse plutôt enthousiaste.

Laravel, je l'utilise depuis 2016, à l'époque de Laravel 5. C'est un framework qui m'a accompagné sur beaucoup de projets, et que j'aime toujours autant pour son confort de développement, sa cohérence et son écosystème.

Craft CMS, je l'utilise depuis 2018 environ. C'est un CMS qui m'avait été recommandé par mon ancien CTO et directeur technique à l'époque, et que j'ai particulièrement apprécié au fil des versions 3, 4 et 5. Sa manière de structurer le contenu, son approche plus développeur, sa souplesse côté champs et templates: tout ça m'a toujours parlé.

C'est pour ça que Craft 6 m'intéresse autant. Si Craft arrive à garder ce qui fait sa force côté modélisation de contenu, tout en profitant du confort de Laravel côté développement, ça peut vraiment devenir le meilleur de mes deux mondes.

Il faut évidemment garder en tête que c'est une alpha. Tout n'est pas encore figé, et la documentation Craft 6 indique elle-même que cette version n'est pas encore publiée et que le contenu peut évoluer. Mais justement, c'est ce qui rend le test intéressant: on voit la transition en cours.

En tout cas, j'ai hâte de voir la suite, et surtout hâte de voir Craft CMS 6 sortir en version finale. Je vais clairement continuer à suivre son évolution, parce que ce rapprochement avec Laravel ouvre des pistes très prometteuses pour les projets PHP modernes.