# 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](#prerequisites)
[Initialiser un projet](#initialize)
[Configuration d'Apache](#apache)
[Configuration de FrankenPHP](#frankenphp)
[Autres variables d'environnement](#other-env-variables)
[Fichiers docker-compose.yml](#docker-compose-files) ## Prérequis - Docker - Docker Compose Vous aurez besoin de [Traefik](https://traefik.io/traefik) installé globalement. Pour cela, vous pouvez consulter le dépôt [Docker Traefik](https://gitea.steve-caillault.dev/steve-caillault/docker-traefik). Vérifier que l'utilisateur 1000 et que le groupe 1000 existent bien : ````bash getent passwd 1000 ```` Puis exécuter la commande : ````bash 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 : ```̀ bash 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 : ````bash 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. |