Files

126 lines
8.8 KiB
Markdown

# 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) <br>
[Initialiser un projet](#initialize) <br>
[Configuration d'Apache](#apache) <br>
[Configuration de FrankenPHP](#frankenphp) <br>
[Autres variables d'environnement](#other-env-variables) <br>
[Fichiers docker-compose.yml](#docker-compose-files)
## Prérequis <a id="prerequisites"></a>
- 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 <a id="initialize"></a>
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 <a href="#frankenphp" title="Configuration de FrankenPHP">FrankenPHP</a>,
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 <a id="apache"></a>
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 <a id="frankenphp"></a>
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 <a id="other-env-variables"></a>
| 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 <a id="docker-compose-files"></a>
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. |