Rédigé par Teddy Vermeulin le 13/02/2024
Dernière mise à jour le 30/03/2024
Découvrez comment phpdotenv optimise votre workflow Drupal, en simplifiant la gestion des variables de configurations.
Tout ce qui est susceptible de changer entre les environnements de déploiement – comme les identifiants de la base de données ou le hash salt – ne devrait pas être stocker dans le code directement. Nous allons explorer dans cet article comment éviter cela.
phpdotenv, la solution à un workflow simplifié
Installation de phpdotenv
En utilisant composer, nous allons ajouter phpdotenv à notre projet :
composer require vlucas/phpdotenv
Initialisation de phodotenv
Pour pouvoir utiliser la fonction getenv()
n'importe où dans notre projet, nous devons initialiser phpdotenv. Pour cela, nous allons ajouter à la racine de notre projet Druapl, le fichier load.environment.php
:
load.environment.php
<?php
/**
* This file is included very early. See autoload.files in composer.json and
* https://getcomposer.org/doc/04-schema.md#files
*/
use Dotenv\Dotenv;
/**
* Load any .env file. See /.env.example.
*
* Drupal has no official method for loading environment variables and uses
* getenv() in some places.
*/
$dotenv = Dotenv::createUnsafeImmutable(__DIR__);
$dotenv->safeLoad();
Pour que le fichier load.environment.php
soit chargé, nous allons ensuite ajouter dans notre fichier composer.json
les lignes suivantes :
composer.json
"autoload": {
"files": [
"load.environment.php"
]
},
Création du fichier de variables
À la racine du projet, nous allons ajouter un fichier .env
. C'est dans ce fichier que nous stockerons les variables utiles ensuite dans le code.
.env
# Environment
ENVIRONMENT=local
# Database
DATABASE_NAME=name
DATABASE_USER=user
DATABASE_PASSWORD=password
DATABASE_HOST=localhost
DATABASE_PORT=3306
# Hash Salt
SALT=01Kc0W7iulJ5S_yp-n8x41bUntCFgVt2izA48ULCKi3InYEmhBWJ3U4SW1JCYL1w9L_eYVeXEQ
Il est essentiel, pour des raisons de sécurité, de ne pas partager ces informations. Il faut donc ajouter ces lignes à votre fichier .gitignore
:
.gitignore
# Ignore .env files as they are personal
/.env
/.env*
!.env.example
Comme vous l'avez sans doute remarqué, nous avons ajouté une exclusion particulière pour le fichier .env.example
. En effet, pour permettre à chaque personne qui participe au projet de rapidement le mettre en place, il est important de lui indiquer quelles variables sont requises, mais sans leur donner les valeurs sensibles d'un environnement particulier.
.env.example
# Environment
ENVIRONMENT=
# Database
DATABASE_NAME=
DATABASE_USER=
DATABASE_PASSWORD=
DATABASE_HOST=
DATABASE_PORT=
# Hash Salt
SALT=
Utilisation des variables dans le code
Il est maintenant très facile d'utiliser les variables déclarées dans notre fichier .env
directement dans le code avec la fonction getenv()
:
settings.php
<?php
/**
* Database settings
*/
$databases['default']['default'] = array (
'database' => getenv('DATABASE_NAME'),
'username' => getenv('DATABASE_USER'),
'password' => getenv('DATABASE_PASSWORD'),
'prefix' => '',
'host' => getenv('DATABASE_HOST'),
'port' => getenv('DATABASE_PORT'),
'namespace' => 'Drupal\\mysql\\Driver\\Database\\mysql',
'driver' => 'mysql',
'autoload' => 'core/modules/mysql/src/Driver/Database/mysql/',
'init_commands' => [
'isolation_level' => 'SET SESSION tx_isolation=\'READ-COMMITTED\'',
],
);
/**
* Salt for one-time login links, cancel links, form tokens, etc.
*/
$settings['hash_salt'] = getenv('SALT');
En résumé
La séparation claire entre le code et la configuration, en particulier pour les éléments susceptibles de varier d'un environnement à l'autre, est cruciale pour la sécurité et la flexibilité de votre projet. L'intégration de phpdotenv dans votre workflow Drupal représente une solution élégante et efficace pour gérer ces configurations.
En suivant les étapes décrites pour installer et utiliser phpdotenv, vous avez désormais les outils nécessaires pour sécuriser vos identifiants sensibles et adapter facilement votre projet aux différents environnements de déploiement.
Adopter cette pratique n'est pas seulement une question de sécurité ; c'est aussi un pas vers un développement plus organisé et maintenable.