diff --git a/.env.example b/.env.example index 6149085..9e19548 100644 --- a/.env.example +++ b/.env.example @@ -1,10 +1,11 @@ # À définir pour éviter les problèmes sur les multi-projets Docker COMPOSE_PROJECT_NAME="" -# Raccourcie pour les fichier docker-compose +# 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_CRON="docker/docker-compose.cron.yml" COMPOSE_FILE_UPLOAD="docker/docker-compose.upload.yml" COMPOSE_FILE_MAILOG="docker/docker-compose.mailhog.yml" COMPOSE_FILE_DEV="docker/docker-compose.dev.yml" @@ -18,7 +19,7 @@ COMPOSE_FILE=${COMPOSE_FILE_BASE} COMPOSE_FILE_SERVER_PHP=${COMPOSE_FILE_APACHE} # Exemple complet en local -# COMPOSE_FILE=${COMPOSE_FILE_BASE}:${COMPOSE_FILE_SERVER_PHP}:${COMPOSE_FILE_UPLOAD}:${COMPOSE_FILE_MAILOG}:${COMPOSE_FILE_DEV} +# COMPOSE_FILE=${COMPOSE_FILE_BASE}:${COMPOSE_FILE_SERVER_PHP}:${COMPOSE_FILE_CRON}:${COMPOSE_FILE_UPLOAD}:${COMPOSE_FILE_MAILOG}:${COMPOSE_FILE_DEV} # Pour utiliser Let's Encrypt : # COMPOSE_FILE=${COMPOSE_FILE_BASE}:${COMPOSE_FILE_LETS_ENCRYPT} @@ -50,6 +51,9 @@ APACHE_ROOT_PATH="/var/www/html" FRANKENPHP_IMAGE="dunglas/frankenphp:1.11.2-php8.5" FRANKENPHP_ROOT_PATH="/app/" +# Image du serveur PHP +PHP_IMAGE=${APACHE_PHP_IMAGE} + # Nom du fichier de configuration OPcache à utiliser OPCACHE_CONFIG_FILE="opcache.dev.ini" diff --git a/docker/Dockerfile.server-php b/docker/Dockerfile.server-php index ddf4ad8..e4f3585 100644 --- a/docker/Dockerfile.server-php +++ b/docker/Dockerfile.server-php @@ -17,6 +17,7 @@ RUN if echo "$SERVER_PHP_IMAGE" | grep -qi apache; then \ fi RUN apt-get update && apt-get install -y \ + nano \ git \ mariadb-client \ npm \ @@ -35,6 +36,17 @@ RUN apt-get update && apt-get install -y \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* +# Configuration de cron +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 + RUN usermod -u 1000 www-data && groupmod -g 1000 www-data # Configuration pour Composer @@ -43,6 +55,4 @@ ENV COMPOSER_CACHE_DIR=/var/www/.cache/composer # Configuration de NPM RUN mkdir -p /var/www/.npm && chown -R www-data:www-data /var/www/.npm -ENV NPM_CONFIG_CACHE=/var/www/.npm - -USER www-data \ No newline at end of file +ENV NPM_CONFIG_CACHE=/var/www/.npm \ No newline at end of file diff --git a/docker/docker-compose.apache-php.yml b/docker/docker-compose.apache-php.yml index 096a4f8..97e0c53 100644 --- a/docker/docker-compose.apache-php.yml +++ b/docker/docker-compose.apache-php.yml @@ -1,11 +1,6 @@ services: server-php: - build: - context: . - args: - SERVER_PHP_IMAGE: ${APACHE_PHP_IMAGE} - dockerfile: ${PWD}/docker/Dockerfile.server-php environment: APACHE_ADMIN_EMAIL: ${APACHE_ADMIN_EMAIL} @@ -20,5 +15,3 @@ services: - ${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 - - user: "${UID:-1000}:${GID:-1000}" \ No newline at end of file diff --git a/docker/docker-compose.cron.yml b/docker/docker-compose.cron.yml new file mode 100644 index 0000000..534a176 --- /dev/null +++ b/docker/docker-compose.cron.yml @@ -0,0 +1,26 @@ +services: + + cron: + restart: unless-stopped + container_name: ${CONTAINER_PREFIX}_cron + + build: + context: ${PWD} + args: + SERVER_PHP_IMAGE: ${SERVER_PHP_IMAGE} + dockerfile: ${PWD}/docker/Dockerfile.server-php + + 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 \ No newline at end of file diff --git a/docker/docker-compose.frankenphp.yml b/docker/docker-compose.frankenphp.yml index d321926..b183bf4 100644 --- a/docker/docker-compose.frankenphp.yml +++ b/docker/docker-compose.frankenphp.yml @@ -1,11 +1,6 @@ services: server-php: - build: - context: . - args: - SERVER_PHP_IMAGE: ${FRANKENPHP_IMAGE} - dockerfile: ${PWD}/docker/Dockerfile.server-php environment: FRANKENPHP_ROOT_PATH: ${FRANKENPHP_ROOT_PATH} @@ -18,11 +13,5 @@ services: - ${PWD}/host/php/conf/${OPCACHE_CONFIG_FILE:-opcache.default.ini}:/usr/local/etc/php/conf.d/opcache.ini - ${PWD}/upload:/app/public/upload - user: "${UID:-1000}:${GID:-1000}" - healthcheck: - test: [ "CMD-SHELL", "curl -s http://localhost/server-php-test.php || exit 1" ] - interval: 30s - timeout: 1s - retries: 10 - start_period: 1s + disable: true diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml index 23b46da..fb1413f 100644 --- a/docker/docker-compose.yml +++ b/docker/docker-compose.yml @@ -27,6 +27,13 @@ services: server-php: restart: unless-stopped container_name: ${CONTAINER_PREFIX}_server_php + + build: + context: ${PWD} + args: + SERVER_PHP_IMAGE: ${SERVER_PHP_IMAGE} + dockerfile: ${PWD}/docker/Dockerfile.server-php + labels: - traefik.enable=true - traefik.docker.network=frontend @@ -40,6 +47,8 @@ services: - frontend - backend + user: "${UID:-1000}:${GID:-1000}" + # Configuration de PHPMyAdmin phpmyadmin: restart: unless-stopped diff --git a/host/crontab b/host/crontab new file mode 100644 index 0000000..019bb23 --- /dev/null +++ b/host/crontab @@ -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 \ No newline at end of file