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 |
+55
-5
@@ -1,10 +1,29 @@
|
||||
# À définir pour éviter les problèmes sur les multi-projets Docker
|
||||
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 :
|
||||
# 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
|
||||
CONTAINER_PREFIX=""
|
||||
@@ -16,13 +35,44 @@ PROJECT_URL=""
|
||||
DATABASE_IMAGE="mariadb:12"
|
||||
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_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_ROOT_PATH="/var/www/html"
|
||||
|
||||
# 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_IMAGE="phpmyadmin:5.2-apache"
|
||||
PHPMYADMIN_URL=""
|
||||
PHPMYADMIN_URL=""
|
||||
|
||||
# Mailpit (interface mail en développement)
|
||||
MAILPIT_URL=""
|
||||
|
||||
# Configuration en local
|
||||
VITE_PORT="8888"
|
||||
|
||||
+4
-1
@@ -3,4 +3,7 @@ host/apache/logs/*.log
|
||||
host/database/data/*
|
||||
!host/database/data/.gitkeep
|
||||
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
|
||||
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 <container>
|
||||
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 :
|
||||
docker compose exec database exec
|
||||
mariadb -u<user> -p<password>
|
||||
````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. |
|
||||
@@ -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.httpchallenge.entrypoint=web"
|
||||
volumes:
|
||||
- ./certs/letsencrypt:/letsencrypt
|
||||
- ${PWD}/certs/letsencrypt:/letsencrypt
|
||||
|
||||
server-php:
|
||||
labels:
|
||||
- "traefik.http.routers.${CONTAINER_PREFIX}_server_php.tls.certresolver=letsencrypt"
|
||||
- traefik.http.routers.${CONTAINER_PREFIX}_server_php.tls.certresolver=letsencrypt
|
||||
|
||||
phpmyadmin:
|
||||
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}
|
||||
volumes:
|
||||
# Données
|
||||
- ./host/database/data:/var/lib/mysql
|
||||
- ./host/database/sql:/sql
|
||||
- ./host/database/backups:/backups
|
||||
- ${PWD}/host/database/data:/var/lib/mysql
|
||||
- ${PWD}/host/database/sql:/sql
|
||||
- ${PWD}/host/database/backups:/backups
|
||||
# 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:
|
||||
MARIADB_ROOT_PASSWORD: ${DATABASE_ROOT_PASSWORD}
|
||||
networks:
|
||||
@@ -27,6 +27,14 @@ services:
|
||||
server-php:
|
||||
restart: unless-stopped
|
||||
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:
|
||||
- traefik.enable=true
|
||||
- traefik.docker.network=frontend
|
||||
@@ -40,6 +48,8 @@ services:
|
||||
- frontend
|
||||
- backend
|
||||
|
||||
user: "${UID:-1000}:${GID:-1000}"
|
||||
|
||||
# Configuration de PHPMyAdmin
|
||||
phpmyadmin:
|
||||
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>
|
||||
ServerAdmin ${APACHE_ADMIN_EMAIL}
|
||||
|
||||
<Directory /var/www/html>
|
||||
DocumentRoot ${APACHE_ROOT_PATH}
|
||||
|
||||
<Directory ${APACHE_ROOT_PATH}>
|
||||
Options -Indexes +FollowSymLinks
|
||||
AllowOverride All
|
||||
</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 {
|
||||
root * /app/
|
||||
php_server
|
||||
root * {$FRANKENPHP_ROOT_PATH}
|
||||
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