Compare commits
31 Commits
frankenphp
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| b570a0a664 | |||
| 06c4b5a052 | |||
| 676144a793 | |||
| b9a956a288 | |||
| 0f81951a59 | |||
| 6ac2bd51eb | |||
| 85bc2ced1b | |||
| 559e71abb7 | |||
| eabfbb07e7 | |||
| b78801ba4e | |||
| d4666dc12d | |||
| 286ab9fa28 | |||
| 0f5fc818c6 | |||
| 519f5ee4cb | |||
| f09491f786 | |||
| 1f8a3b1ccb | |||
| e13bf5c8e4 | |||
| fd486390f7 | |||
| cebf1ce759 | |||
| a7f9717b02 | |||
| d19d3eed63 | |||
| 8e10fdf3e2 | |||
| 9c813a3aae | |||
| 0e61f5cf67 | |||
| a9f904060e | |||
| 502fa49d24 | |||
| 77122f5f6c | |||
| 2854d3bb19 | |||
| b0ac4a0a2c | |||
| e999b5c7ce | |||
| 4e158e5485 |
+54
-4
@@ -1,10 +1,29 @@
|
|||||||
# À définir pour éviter les problèmes sur les multi-projets Docker
|
# À définir pour éviter les problèmes sur les multi-projets Docker
|
||||||
COMPOSE_PROJECT_NAME=""
|
COMPOSE_PROJECT_NAME=""
|
||||||
|
|
||||||
COMPOSE_FILE=docker-compose.yml
|
# Raccourcis pour les fichier docker-compose
|
||||||
|
COMPOSE_FILE_BASE="docker/docker-compose.yml"
|
||||||
|
COMPOSE_FILE_APACHE="docker/docker-compose.apache-php.yml"
|
||||||
|
COMPOSE_FILE_FRANKENPHP="docker/docker-compose.frankenphp.yml"
|
||||||
|
COMPOSE_FILE_MEMCACHED="docker/docker-compose.memcached.yml"
|
||||||
|
COMPOSE_FILE_REDIS="docker/docker-compose.redis.yml"
|
||||||
|
COMPOSE_FILE_CRON="docker/docker-compose.cron.yml"
|
||||||
|
COMPOSE_FILE_UPLOAD="docker/docker-compose.upload.yml"
|
||||||
|
COMPOSE_FILE_MAILPIT="docker/docker-compose.mailpit.yml"
|
||||||
|
COMPOSE_FILE_DEV="docker/docker-compose.dev.yml"
|
||||||
|
COMPOSE_FILE_LETS_ENCRYPT="docker/docker-compose.lets-encrypt.yml"
|
||||||
|
|
||||||
|
# docker-compose de base
|
||||||
|
COMPOSE_FILE="${COMPOSE_FILE_BASE}"
|
||||||
|
|
||||||
|
# docker-compose pour le serveur PHP
|
||||||
|
# COMPOSE_FILE_SERVER_PHP="${COMPOSE_FILE_FRANKENPHP}"
|
||||||
|
COMPOSE_FILE_SERVER_PHP="${COMPOSE_FILE_APACHE}"
|
||||||
|
|
||||||
|
# Exemple complet en local
|
||||||
|
# COMPOSE_FILE="${COMPOSE_FILE_BASE}:${COMPOSE_FILE_SERVER_PHP}:${COMPOSE_FILE_MEMCACHED}:{COMPOSE_FILE_REDIS}:${COMPOSE_FILE_CRON}:${COMPOSE_FILE_UPLOAD}:${COMPOSE_FILE_MAILPIT}:${COMPOSE_FILE_DEV}"
|
||||||
# Pour utiliser Let's Encrypt :
|
# Pour utiliser Let's Encrypt :
|
||||||
# COMPOSE_FILE=docker-compose.yml:docker-compose.lets-encrypt.yml
|
# COMPOSE_FILE="${COMPOSE_FILE_BASE}:${COMPOSE_FILE_LETS_ENCRYPT}"
|
||||||
|
|
||||||
# Préfixe pour les noms des conteneurs et des labels dans les fichiers docker-compose
|
# Préfixe pour les noms des conteneurs et des labels dans les fichiers docker-compose
|
||||||
CONTAINER_PREFIX=""
|
CONTAINER_PREFIX=""
|
||||||
@@ -16,13 +35,44 @@ PROJECT_URL=""
|
|||||||
DATABASE_IMAGE="mariadb:12"
|
DATABASE_IMAGE="mariadb:12"
|
||||||
DATABASE_ROOT_PASSWORD=""
|
DATABASE_ROOT_PASSWORD=""
|
||||||
|
|
||||||
|
# Chemin de l'application pour les volumes
|
||||||
|
# APP_HOST_PATH est relatif à ${PWD}
|
||||||
|
APP_HOST_PATH="www"
|
||||||
|
# Pour FrankenPHP
|
||||||
|
# APP_CONTAINER_PATH="/app"
|
||||||
|
# Pour Apache
|
||||||
|
APP_CONTAINER_PATH="/var/www/html"
|
||||||
|
|
||||||
# Apache et PHP
|
# Apache et PHP
|
||||||
APACHE_PHP_VERSION="php:8.5-apache"
|
APACHE_PHP_IMAGE="gitea.steve-caillault.dev/steve-caillault/docker-php-image:8.5-apache-2.4"
|
||||||
APACHE_ADMIN_EMAIL=""
|
APACHE_ADMIN_EMAIL=""
|
||||||
|
APACHE_ROOT_PATH="/var/www/html"
|
||||||
|
|
||||||
# FrankenPHP
|
# FrankenPHP
|
||||||
FRANKENPHP_VERSION="dunglas/frankenphp:1.11.2-php8.5"
|
FRANKENPHP_IMAGE="gitea.steve-caillault.dev/steve-caillault/docker-php-image:8.5-frankenphp-1.11.2"
|
||||||
|
FRANKENPHP_ROOT_PATH="/app/"
|
||||||
|
|
||||||
|
# Image du serveur PHP
|
||||||
|
SERVER_PHP_IMAGE="${APACHE_PHP_IMAGE}"
|
||||||
|
#SERVER_PHP_IMAGE="${FRANKENPHP_IMAGE}"
|
||||||
|
|
||||||
|
# Image pour Memcached
|
||||||
|
MEMCACHED_IMAGE="memcached:latest"
|
||||||
|
MEMCACHED_PORT="11211:11211"
|
||||||
|
|
||||||
|
# Image pour Redis
|
||||||
|
REDIS_IMAGE="redis:latest"
|
||||||
|
REDIS_PORT="6379:6379"
|
||||||
|
|
||||||
|
# Nom du fichier de configuration OPcache à utiliser
|
||||||
|
OPCACHE_CONFIG_FILE="opcache.dev.ini"
|
||||||
|
|
||||||
# PHPMyAdmin
|
# PHPMyAdmin
|
||||||
PHPMYADMIN_IMAGE="phpmyadmin:5.2-apache"
|
PHPMYADMIN_IMAGE="phpmyadmin:5.2-apache"
|
||||||
PHPMYADMIN_URL=""
|
PHPMYADMIN_URL=""
|
||||||
|
|
||||||
|
# Mailpit (interface mail en développement)
|
||||||
|
MAILPIT_URL=""
|
||||||
|
|
||||||
|
# Configuration en local
|
||||||
|
VITE_PORT="8888"
|
||||||
|
|||||||
@@ -4,3 +4,6 @@ host/database/data/*
|
|||||||
!host/database/data/.gitkeep
|
!host/database/data/.gitkeep
|
||||||
host/database/backups/*
|
host/database/backups/*
|
||||||
!host/database/backups/.gitkeep
|
!host/database/backups/.gitkeep
|
||||||
|
upload/*
|
||||||
|
!upload/.gitkeep
|
||||||
|
.idea
|
||||||
@@ -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
|
Ce dépôt permet d'initier un projet PHP avec une stack Docker qui inclut :
|
||||||
Puis exécuter la commande : sudo chown -R 1000:1000 ./host
|
- un serveur Apache ou FrankenPHP
|
||||||
Vérifier ensuite après quelques secondes les containeurs avec docker ps.
|
- MariaDB
|
||||||
Si nécessaire, vérifier les logs avec : docker logs <container>
|
- 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 :
|
Pour accéder à MariaDB :
|
||||||
docker compose exec database exec
|
````bash
|
||||||
mariadb -u<user> -p<password>
|
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. |
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
services:
|
|
||||||
|
|
||||||
server-php:
|
|
||||||
image: ${APACHE_PHP_VERSION}
|
|
||||||
|
|
||||||
environment:
|
|
||||||
- APACHE_ADMIN_EMAIL=${APACHE_ADMIN_EMAIL}
|
|
||||||
|
|
||||||
volumes:
|
|
||||||
- ./www:/var/www/html
|
|
||||||
- ./host/apache/logs:/var/log/apache2
|
|
||||||
- ./host/apache/conf/vhost.conf:/etc/apache2/sites-available/000-default.conf
|
|
||||||
- ./host/apache/conf/apache2.conf:/etc/apache2/conf-enabled/docker.conf
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
services:
|
|
||||||
|
|
||||||
server-php:
|
|
||||||
image: ${FRANKENPHP_VERSION}
|
|
||||||
|
|
||||||
volumes:
|
|
||||||
- ./www:/app
|
|
||||||
- ./host/frankenphp/conf/Caddyfile:/etc/frankenphp/Caddyfile
|
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
ARG IMAGE=unknown
|
||||||
|
|
||||||
|
FROM ${IMAGE}
|
||||||
|
|
||||||
|
# Installation des dépendances
|
||||||
|
RUN apt-get update && apt-get install -y curl \
|
||||||
|
&& apt-get clean \
|
||||||
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
|
# Configuration de Supercronic pour la gestion des tâches planifiées
|
||||||
|
ENV SUPERCRONIC_URL=https://github.com/aptible/supercronic/releases/download/v0.2.44/supercronic-linux-amd64 \
|
||||||
|
SUPERCRONIC_SHA1SUM=6eb0a8e1e6673675dc67668c1a9b6409f79c37bc \
|
||||||
|
SUPERCRONIC=supercronic-linux-amd64
|
||||||
|
|
||||||
|
RUN curl -fsSLO "$SUPERCRONIC_URL" \
|
||||||
|
&& echo "${SUPERCRONIC_SHA1SUM} ${SUPERCRONIC}" | sha1sum -c - \
|
||||||
|
&& chmod +x "$SUPERCRONIC" \
|
||||||
|
&& mv "$SUPERCRONIC" "/usr/local/bin/${SUPERCRONIC}" \
|
||||||
|
&& ln -s "/usr/local/bin/${SUPERCRONIC}" /usr/local/bin/supercronic
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
services:
|
||||||
|
|
||||||
|
server-php:
|
||||||
|
|
||||||
|
environment:
|
||||||
|
APACHE_ADMIN_EMAIL: ${APACHE_ADMIN_EMAIL}
|
||||||
|
APACHE_ROOT_PATH: ${APACHE_ROOT_PATH}
|
||||||
|
# Configuration en local
|
||||||
|
VITE_PORT: ${VITE_PORT}
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
- ${PWD}/${APP_HOST_PATH}:${APP_CONTAINER_PATH}
|
||||||
|
- ${PWD}/host/apache/logs:/var/log/apache2
|
||||||
|
- ${PWD}/host/apache/conf/vhost.conf:/etc/apache2/sites-available/000-default.conf
|
||||||
|
- ${PWD}/host/apache/conf/apache2.conf:/etc/apache2/conf-enabled/docker.conf
|
||||||
|
- ${PWD}/host/php/conf/${OPCACHE_CONFIG_FILE:-opcache.default.ini}:/usr/local/etc/php/conf.d/opcache.ini
|
||||||
|
- ${PWD}/upload:/app/public/upload
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
services:
|
||||||
|
|
||||||
|
cron:
|
||||||
|
restart: unless-stopped
|
||||||
|
container_name: ${CONTAINER_PREFIX}_cron
|
||||||
|
|
||||||
|
build:
|
||||||
|
context: ${PWD}
|
||||||
|
args:
|
||||||
|
IMAGE: ${SERVER_PHP_IMAGE}
|
||||||
|
dockerfile: ${PWD}/docker/cron.dockerfile
|
||||||
|
|
||||||
|
command: supercronic /etc/crontab
|
||||||
|
|
||||||
|
environment:
|
||||||
|
APP_PATH: ${APP_CONTAINER_PATH}
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
- ${PWD}/${APP_HOST_PATH}:${APP_CONTAINER_PATH}
|
||||||
|
- ${PWD}/host/crontab:/etc/crontab
|
||||||
|
|
||||||
|
depends_on:
|
||||||
|
- server-php
|
||||||
|
|
||||||
|
healthcheck:
|
||||||
|
disable: true
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
services:
|
||||||
|
server-php:
|
||||||
|
# Pour Vite notamment
|
||||||
|
ports:
|
||||||
|
- "${VITE_PORT}:${VITE_PORT}"
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
services:
|
||||||
|
|
||||||
|
server-php:
|
||||||
|
|
||||||
|
environment:
|
||||||
|
FRANKENPHP_ROOT_PATH: ${FRANKENPHP_ROOT_PATH}
|
||||||
|
# Configuration en local
|
||||||
|
VITE_PORT: ${VITE_PORT}
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
- ${PWD}/${APP_HOST_PATH}:${APP_CONTAINER_PATH}
|
||||||
|
- ${PWD}/host/frankenphp/conf/Caddyfile:/etc/frankenphp/Caddyfile
|
||||||
|
- ${PWD}/host/php/conf/${OPCACHE_CONFIG_FILE:-opcache.default.ini}:/usr/local/etc/php/conf.d/opcache.ini
|
||||||
|
- ${PWD}/upload:/app/public/upload
|
||||||
|
|
||||||
|
healthcheck:
|
||||||
|
disable: true
|
||||||
@@ -6,12 +6,12 @@ services:
|
|||||||
- "--certificatesresolvers.letsencrypt.acme.storage=/letsencrypt/acme.json"
|
- "--certificatesresolvers.letsencrypt.acme.storage=/letsencrypt/acme.json"
|
||||||
- "--certificatesresolvers.letsencrypt.acme.httpchallenge.entrypoint=web"
|
- "--certificatesresolvers.letsencrypt.acme.httpchallenge.entrypoint=web"
|
||||||
volumes:
|
volumes:
|
||||||
- ./certs/letsencrypt:/letsencrypt
|
- ${PWD}/certs/letsencrypt:/letsencrypt
|
||||||
|
|
||||||
server-php:
|
server-php:
|
||||||
labels:
|
labels:
|
||||||
- "traefik.http.routers.${CONTAINER_PREFIX}_server_php.tls.certresolver=letsencrypt"
|
- traefik.http.routers.${CONTAINER_PREFIX}_server_php.tls.certresolver=letsencrypt
|
||||||
|
|
||||||
phpmyadmin:
|
phpmyadmin:
|
||||||
labels:
|
labels:
|
||||||
- "traefik.http.routers.${CONTAINER_PREFIX}_pma.tls.certresolver=letsencrypt"
|
- traefik.http.routers.${CONTAINER_PREFIX}_pma.tls.certresolver=letsencrypt
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
services:
|
||||||
|
|
||||||
|
mailpit:
|
||||||
|
restart: unless-stopped
|
||||||
|
container_name: ${CONTAINER_PREFIX}_mailpit
|
||||||
|
image: axllent/mailpit:latest
|
||||||
|
logging:
|
||||||
|
driver: "none"
|
||||||
|
labels:
|
||||||
|
- traefik.enable=true
|
||||||
|
- traefik.http.routers.${CONTAINER_PREFIX}_mailpit.rule=Host(`${MAILPIT_URL}`)
|
||||||
|
- traefik.http.routers.${CONTAINER_PREFIX}_mailpit.entrypoints=websecure
|
||||||
|
- traefik.http.services.${CONTAINER_PREFIX}_mailpit.loadbalancer.server.port=8025
|
||||||
|
networks:
|
||||||
|
- frontend
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
services:
|
||||||
|
|
||||||
|
memcached:
|
||||||
|
restart: unless-stopped
|
||||||
|
container_name: ${CONTAINER_PREFIX}_memcached
|
||||||
|
image: ${MEMCACHED_IMAGE}
|
||||||
|
ports:
|
||||||
|
- ${MEMCACHED_PORT}
|
||||||
|
networks:
|
||||||
|
- backend
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
services:
|
||||||
|
|
||||||
|
redis:
|
||||||
|
restart: unless-stopped
|
||||||
|
container_name: ${CONTAINER_PREFIX}_redis
|
||||||
|
image: ${REDIS_IMAGE}
|
||||||
|
ports:
|
||||||
|
- ${REDIS_PORT}
|
||||||
|
networks:
|
||||||
|
- backend
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
services:
|
||||||
|
|
||||||
|
uploads:
|
||||||
|
image: nginx:alpine
|
||||||
|
container_name: ${CONTAINER_PREFIX}_uploads
|
||||||
|
restart: unless-stopped
|
||||||
|
volumes:
|
||||||
|
- ${PWD}/upload:/usr/share/nginx/html:ro
|
||||||
|
labels:
|
||||||
|
- traefik.enable=true
|
||||||
|
- traefik.docker.network=frontend
|
||||||
|
- traefik.http.routers.${CONTAINER_PREFIX}_uploads.rule=Host(`upload.${PROJECT_URL}`)
|
||||||
|
- traefik.http.routers.${CONTAINER_PREFIX}_uploads.entrypoints=websecure
|
||||||
|
- traefik.http.routers.${CONTAINER_PREFIX}_uploads.tls=true
|
||||||
|
- traefik.http.services.${CONTAINER_PREFIX}_uploads.loadbalancer.server.port=80
|
||||||
|
networks:
|
||||||
|
- frontend
|
||||||
@@ -13,11 +13,11 @@ services:
|
|||||||
image: ${DATABASE_IMAGE}
|
image: ${DATABASE_IMAGE}
|
||||||
volumes:
|
volumes:
|
||||||
# Données
|
# Données
|
||||||
- ./host/database/data:/var/lib/mysql
|
- ${PWD}/host/database/data:/var/lib/mysql
|
||||||
- ./host/database/sql:/sql
|
- ${PWD}/host/database/sql:/sql
|
||||||
- ./host/database/backups:/backups
|
- ${PWD}/host/database/backups:/backups
|
||||||
# Configuration
|
# Configuration
|
||||||
- ./host/database/conf/my.cnf:/etc/mysql/mariadb.conf.d/my.cnf
|
- ${PWD}/host/database/conf/my.cnf:/etc/mysql/mariadb.conf.d/my.cnf
|
||||||
environment:
|
environment:
|
||||||
MARIADB_ROOT_PASSWORD: ${DATABASE_ROOT_PASSWORD}
|
MARIADB_ROOT_PASSWORD: ${DATABASE_ROOT_PASSWORD}
|
||||||
networks:
|
networks:
|
||||||
@@ -27,6 +27,14 @@ services:
|
|||||||
server-php:
|
server-php:
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
container_name: ${CONTAINER_PREFIX}_server_php
|
container_name: ${CONTAINER_PREFIX}_server_php
|
||||||
|
hostname: ${PROJECT_URL}
|
||||||
|
|
||||||
|
build:
|
||||||
|
context: ${PWD}
|
||||||
|
args:
|
||||||
|
SERVER_PHP_IMAGE: ${SERVER_PHP_IMAGE}
|
||||||
|
dockerfile: ${PWD}/docker/server-php.dockerfile
|
||||||
|
|
||||||
labels:
|
labels:
|
||||||
- traefik.enable=true
|
- traefik.enable=true
|
||||||
- traefik.docker.network=frontend
|
- traefik.docker.network=frontend
|
||||||
@@ -40,6 +48,8 @@ services:
|
|||||||
- frontend
|
- frontend
|
||||||
- backend
|
- backend
|
||||||
|
|
||||||
|
user: "${UID:-1000}:${GID:-1000}"
|
||||||
|
|
||||||
# Configuration de PHPMyAdmin
|
# Configuration de PHPMyAdmin
|
||||||
phpmyadmin:
|
phpmyadmin:
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
ARG SERVER_PHP_IMAGE=unknown
|
||||||
|
|
||||||
|
# Image du serveur PHP à utiliser (Apache, FrankenPHP...)
|
||||||
|
FROM ${SERVER_PHP_IMAGE}
|
||||||
@@ -1,7 +1,9 @@
|
|||||||
<VirtualHost *:80>
|
<VirtualHost *:80>
|
||||||
ServerAdmin ${APACHE_ADMIN_EMAIL}
|
ServerAdmin ${APACHE_ADMIN_EMAIL}
|
||||||
|
|
||||||
<Directory /var/www/html>
|
DocumentRoot ${APACHE_ROOT_PATH}
|
||||||
|
|
||||||
|
<Directory ${APACHE_ROOT_PATH}>
|
||||||
Options -Indexes +FollowSymLinks
|
Options -Indexes +FollowSymLinks
|
||||||
AllowOverride All
|
AllowOverride All
|
||||||
</Directory>
|
</Directory>
|
||||||
|
|||||||
@@ -0,0 +1,4 @@
|
|||||||
|
# Utilisation de Supercronic pour la gestion des tâches planifiées
|
||||||
|
# https://github.com/aptible/supercronic
|
||||||
|
|
||||||
|
# * * * * * php $APP_PATH/artisan my-test
|
||||||
@@ -3,6 +3,10 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
:80 {
|
:80 {
|
||||||
root * /app/
|
root * {$FRANKENPHP_ROOT_PATH}
|
||||||
php_server
|
file_server
|
||||||
|
php_server {
|
||||||
|
resolve_root_symlink false
|
||||||
|
try_files {path} index.php
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
# Configuration de OPcache pour un environnement de production
|
||||||
|
# JIT est activé et OPcache vérifie les modifications toutes les 60 secondes
|
||||||
|
|
||||||
|
opcache.enable=1
|
||||||
|
opcache.enable_cli=1
|
||||||
|
opcache.memory_consumption=128
|
||||||
|
opcache.interned_strings_buffer=8
|
||||||
|
opcache.max_accelerated_files=4000
|
||||||
|
opcache.revalidate_freq=60
|
||||||
|
opcache.jit=1255
|
||||||
|
opcache.jit_buffer_size=128M
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
# Configuration de OPcache pour un environnement de développement
|
||||||
|
# JIT est désactivé et OPcache vérifie les modifications à chaque requête
|
||||||
|
|
||||||
|
opcache.enable=1
|
||||||
|
opcache.enable_cli=1
|
||||||
|
opcache.memory_consumption=128
|
||||||
|
opcache.interned_strings_buffer=8
|
||||||
|
opcache.max_accelerated_files=4000
|
||||||
|
opcache.validate_timestamps=1
|
||||||
|
opcache.revalidate_freq=0
|
||||||
|
opcache.jit=0
|
||||||
|
opcache.jit_buffer_size=0
|
||||||
Reference in New Issue
Block a user