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.
S
Description
Stack Docker pour initier un projet avec un serveur PHP avec Apache ou FrankenPHP.
Readme 74 KiB
Languages
Dockerfile 97.7%
PHP 2.3%