diff --git a/README.md b/README.md index bc11763..6ceaf5e 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,126 @@ -Nécessite d'avoir installé Traefik globalement : https://github.com/steve-caillault/docker-traefik. +# Docker PHP Stack -Attention avant de démarrer Docker, 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 -Vérifier ensuite après quelques secondes les containeurs avec docker ps. -Si nécessaire, vérifier les logs avec : docker logs +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 : -docker compose exec database exec -mariadb -u -p +````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. | \ No newline at end of file