Docker PHP Stack
Ce dépôt permet d'initier un projet PHP avec une stack Docker qui inclut :
- un serveur Apache ou FrankenPHP
- MariaDB
- PHPMyAdmin
- Supercronic (pour les tâches planifiées)
- Mailpit (pour l'envoi de mails en développement)
Prérequis
Initialiser un projet
Configuration d'Apache
Configuration de FrankenPHP
Autres variables d'environnement
Fichiers docker-compose.yml
Prérequis
- Docker
- Docker Compose
Vous aurez besoin de Traefik installé globalement. Pour cela, vous pouvez consulter le dépôt Docker Traefik.
Vérifier que l'utilisateur 1000 et que le groupe 1000 existent bien :
getent passwd 1000
Puis exécuter la commande :
sudo chown -R 1000:1000 ./host
Initialiser un projet
Créer le fichier .env en utilisant la commande cp .env.example .env.
Vous aurez besoin de définir plusieurs variables d'environnement :
| Variable | Description |
|---|---|
COMPOSE_PROJECT_NAME |
Nom unique du projet sans espace ou tiret (-). |
CONTAINER_PREFIX |
Préfixe utilisé pour le nom des conteneurs de la stack. |
PROJECT_URL |
Utilisée pour déterminer l'URL d'accès au projet en HTTP. |
DATABASE_ROOT_PASSWORD |
Mot de passe de l'utilisateur root pour la base de données MariaDB. |
PHPMYADMIN_URL |
URL pour l'accès à PHPMyAdmin. |
MAILPIT_URL |
URL pour la consultation des mails en développement. |
APACHE_ADMIN_EMAIL |
Adresse email utilisée dans la configuration d'Apache pour ServerAdmin. |
Initialement, c'est un serveur Apache qui sera utilisé. Vous pouvez vous reporter à la section FrankenPHP, si vous souhaitez configurer ce type de serveur.
Après avoir édité le fichier .env, vous pouvez exécuter la commande suivante pour démarrer les services :
docker compose up -d
Vous pouvez ensuite vérifier l'état des conteneurs avec la commande docker compose ps.
Si nécessaire, vérifier les logs avec : docker compose logs { service name }.
Pour accéder à MariaDB :
docker compose exec database mariadb -u{ username } -p{ user password }
Configuration d'Apache
Le projet est initialement configuré pour fonctionner avec un serveur Apache. Si vous souhaitez l'utiliser, il vous
suffit de définir la variable d'environnement APACHE_ADMIN_EMAIL dans le fichier .env.
| Variable | Description |
|---|---|
COMPOSE_FILE_SERVER_PHP |
Utiliser la valeur ${COMPOSE_FILE_APACHE} pour utiliser le fichier Docker Compose d'Apache. |
APP_CONTAINER_PATH |
Doit être défini sur /var/www/html. |
APACHE_PHP_IMAGE |
Image Docker d'Apache PHP à utiliser. |
APACHE_ADMIN_EMAIL |
Adresse email de l'administrateur. |
Vous pouvez éditer la configuration du Virtual Host depuis le fichier host/apache/conf/vhost.conf.
Configuration de FrankenPHP
FrankenPHP utilise un chemin d'accès diffèrent d'Apache.
Alors qu'avec un serveur Apache, on utilise régulièrement le chemin /var/www, FrankenPHP utilise quant à lui /app/public/.
Il faut donc redéfinir plusieurs variables d'environnement :
| Variable | Description |
|---|---|
COMPOSE_FILE_SERVER_PHP |
Utiliser la valeur ${COMPOSE_FILE_FRANKENPHP} pour utiliser le fichier Docker Compose de FrankenPHP. |
APP_CONTAINER_PATH |
Doit être défini sur /app. |
FRANKENPHP_ROOT_PATH |
Peut être défini sur /app/ (ou /app/public pour un projet Laravel). Il s'agit du chemin racine de votre fichier index.php. |
FRANKENPHP_IMAGE |
Image Docker de FrankenPHP à utiliser. |
Le fichier de configuration Caddyfile se trouve dans le répertoire host/frankenphp/conf.
Autres variables d'environnement
| Variable | Description |
|---|---|
DATABASE_IMAGE |
Image Docker de la base de données MariaDB. |
MEMCACHED_IMAGE |
Image Docker de Memcached à utiliser. |
REDIS_IMAGE |
Image Docker de Redis. |
OPCACHE_CONFIG_FILE |
Nom du fichier de configuration d'OPcache. Le fichier doit se trouver dans le répertoire host/php/conf. |
VITE_PORT |
Port à utiliser pour Vite en développement (voir le fichier docker/docker-compose.dev.yml). |
Fichiers docker-compose.yml
Nous utilisons la variable d'environnement COMPOSE_FILE pour déterminer les fichiers docker-compose à utiliser.
Les fichiers sont stockés dans le répertoire docker.
Voici une description des diffèrents fichiers :
| Fichier | Description |
|---|---|
| docker-compose.yml | Configuration de base définissant le serveur PHP, la base de données et PHPMyAdmin. |
| docker-compose.apache-php.yml | Configuration spécifique pour un serveur Apache. |
| docker-compose.frankenphp.yml | Configuration spécifique pour un serveur FrankenPHP. |
| docker-compose.cron.yml | Configuration d'un système de crontab utilisant Supercronic. Les tâches planifiées peuvent être définies dans le fichier host/crontab. |
| docker-compose.dev.yml | Configuration spécifique en environnement de développement. |
| docker-compose.mailpit.yml | Configuration de l'application de consultation des mails en développement. |
| docker-compose.memcached.yml | Configuration pour Memcached. |
| docker-compose.redis.yml | Configuration pour Redis. |
| docker-compose.upload.yml | Définit le répertoire upload comme répertoire de stockage. |
| docker-compose.lets-encrypt.yml | Configuration de Let's Encrypt. ⚠️ Cela n'a pas été testé sur un serveur. |