{"id":8841,"date":"2026-09-21T15:01:14","date_gmt":"2026-09-21T14:01:14","guid":{"rendered":"https:\/\/workboot.fr\/ciela\/?page_id=8841"},"modified":"2026-09-21T15:29:44","modified_gmt":"2026-09-21T14:29:44","slug":"docker-nginx-php-mariadb","status":"publish","type":"page","link":"https:\/\/workboot.fr\/ciela\/docker-nginx-php-mariadb\/","title":{"rendered":"Docker Nginx\/php\/mariadb"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">\ud83d\udcc1 Structure des fichiers<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>~\/Works\/docker-web\/\n\u251c\u2500\u2500 docker-compose.yml\n\u251c\u2500\u2500 .env\n\u251c\u2500\u2500 .gitignore\n\u251c\u2500\u2500 www\/                 \n\u251c\u2500\u2500 php\/\n\u2502   \u251c\u2500\u2500 Dockerfile\n\u2502   \u2514\u2500\u2500 php.ini\n\u251c\u2500\u2500 nginx\/\n\u2502   \u2514\u2500\u2500 default.conf\n\u2514\u2500\u2500 mariadb\/\n    \u251c\u2500\u2500 init\/\n    \u2502   \u2514\u2500\u2500 01-init.sql\n    \u2514\u2500\u2500 data\/<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Le r\u00e9pertoire\u00a0<code>~\/Works\/docker-web\/www<\/code>\u00a0restera sur ta machine h\u00f4te et sera mont\u00e9 dans les conteneurs<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">cr\u00e9ations du projet ,  les r\u00e9pertoires sur la machine hote:<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>mkdir -p ~\/Works\/docker-web\/php\nmkdir -p ~\/Works\/docker-web\/nginx\nmkdir -p ~\/Works\/docker-web\/mariadb\/init\nmkdir -p ~\/Works\/docker-web\/mariadb\/data\nmkdir -p ~\/Works\/docker-web\/www\n\n# V\u00e9rification\nfind ~\/Works\/docker-web -type d | sort<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">fichier .env<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>COMPOSE_PROJECT_NAME=webstack\n\nHTTP_PORT=8080\nMARIADB_PORT=3306\n\nMYSQL_ROOT_PASSWORD=change-me-root\nMYSQL_DATABASE=mydb\nMYSQL_USER=dev\nMYSQL_PASSWORD=change-me-user\n\nTZ=Europe\/Paris\nUID=1000\nGID=1000<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\"><code>docker-compose.yml<\/code><\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>services:\n  mariadb:\n    image: mariadb:11.4\n    container_name: ${COMPOSE_PROJECT_NAME}-mariadb\n    restart: unless-stopped\n    environment:\n      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}\n      MYSQL_DATABASE: ${MYSQL_DATABASE}\n      MYSQL_USER: ${MYSQL_USER}\n      MYSQL_PASSWORD: ${MYSQL_PASSWORD}\n      TZ: ${TZ}\n    volumes:\n      - .\/mariadb\/data:\/var\/lib\/mysql\n      - .\/mariadb\/init:\/docker-entrypoint-initdb.d:ro\n    ports:\n      - \"${MARIADB_PORT}:3306\"\n    networks:\n      - backend\n    healthcheck:\n      test: &#91;\"CMD\", \"healthcheck.sh\", \"--connect\", \"--innodb_initialized\"]\n      interval: 10s\n      timeout: 5s\n      retries: 5\n\n  php:\n    build:\n      context: .\/php\n      args:\n        UID: ${UID}\n        GID: ${GID}\n    container_name: ${COMPOSE_PROJECT_NAME}-php\n    restart: unless-stopped\n    volumes:\n      - .\/www:\/var\/www\/html\n      - .\/php\/php.ini:\/usr\/local\/etc\/php\/conf.d\/custom.ini:ro\n    environment:\n      TZ: ${TZ}\n    networks:\n      - backend\n    depends_on:\n      mariadb:\n        condition: service_healthy\n\n  nginx:\n    image: nginx:1.27-alpine\n    container_name: ${COMPOSE_PROJECT_NAME}-nginx\n    restart: unless-stopped\n    ports:\n      - \"${HTTP_PORT}:80\"\n    volumes:\n      - .\/www:\/var\/www\/html:ro\n      - .\/nginx\/default.conf:\/etc\/nginx\/conf.d\/default.conf:ro\n    environment:\n      TZ: ${TZ}\n    networks:\n      - backend\n    depends_on:\n      - php\n\nnetworks:\n  backend:\n    driver: bridge<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Le fichier \/php\/Dockerfile<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>FROM php:8.3-fpm-alpine\n\nARG UID=1000\nARG GID=1000\n\nRUN apk add --no-cache \\\n        bash git curl unzip \\\n        icu-dev libzip-dev libpng-dev libjpeg-turbo-dev freetype-dev oniguruma-dev \\\n        mariadb-client $PHPIZE_DEPS \\\n    &amp;&amp; docker-php-ext-configure gd --with-freetype --with-jpeg \\\n    &amp;&amp; docker-php-ext-install -j$(nproc) \\\n        pdo pdo_mysql mysqli gd zip intl mbstring opcache \\\n    &amp;&amp; apk del $PHPIZE_DEPS \\\n    &amp;&amp; rm -rf \/var\/cache\/apk\/*\n\nCOPY --from=composer:2 \/usr\/bin\/composer \/usr\/bin\/composer\n\nRUN addgroup -g ${GID} dev \\\n    &amp;&amp; adduser -u ${UID} -G dev -s \/bin\/bash -D dev\n\nWORKDIR \/var\/www\/html\nUSER dev\n\nEXPOSE 9000\nCMD &#91;\"php-fpm\"]<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">le fichier \/php\/php.ini<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>display_errors = On\nerror_reporting = E_ALL\nlog_errors = On\n\nupload_max_filesize = 100M\npost_max_size = 100M\nmax_execution_time = 300\nmemory_limit = 512M\n\nopcache.enable = 0\nopcache.validate_timestamps = 1\n\ndate.timezone = Europe\/Paris<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\"><code>le fichier  nginx\/default.conf<\/code><\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>server {\n    listen 80;\n    server_name localhost;\n    root \/var\/www\/html;\n    index index.php index.html;\n\n    client_max_body_size 100M;\n\n    location \/ {\n        try_files $uri $uri\/ \/index.php?$query_string;\n    }\n\n    location ~ \\.php$ {\n        try_files $uri =404;\n        fastcgi_pass php:9000;\n        fastcgi_index index.php;\n        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;\n        include fastcgi_params;\n        fastcgi_read_timeout 300;\n    }\n\n    location ~ \/\\.ht {\n        deny all;\n    }\n}<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">le fichier mariadb\/init\/01-init.sql<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>SET NAMES utf8mb4;\n\nCREATE DATABASE IF NOT EXISTS `mydb`\n    CHARACTER SET utf8mb4\n    COLLATE utf8mb4_unicode_ci;\n\nGRANT ALL PRIVILEGES ON `mydb`.* TO 'dev'@'%';\nFLUSH PRIVILEGES;<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">le fichier .gitignore<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>.env\nmariadb\/data\/\n*.log<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>\ud83d\udcc1 Structure des fichiers Le r\u00e9pertoire\u00a0~\/Works\/docker-web\/www\u00a0restera sur ta machine h\u00f4te et sera mont\u00e9 dans les conteneurs cr\u00e9ations du projet , les r\u00e9pertoires sur la machine hote: fichier .env docker-compose.yml Le fichier \/php\/Dockerfile le fichier \/php\/php.ini le fichier nginx\/default.conf le fichier mariadb\/init\/01-init.sql le fichier .gitignore<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_uag_custom_page_level_css":"","footnotes":""},"class_list":["post-8841","page","type-page","status-publish","hentry"],"uagb_featured_image_src":{"full":false,"thumbnail":false,"medium":false,"medium_large":false,"large":false,"1536x1536":false,"2048x2048":false},"uagb_author_info":{"display_name":"admin","author_link":"https:\/\/workboot.fr\/ciela\/author\/admin\/"},"uagb_comment_info":0,"uagb_excerpt":"\ud83d\udcc1 Structure des fichiers Le r\u00e9pertoire\u00a0~\/Works\/docker-web\/www\u00a0restera sur ta machine h\u00f4te et sera mont\u00e9 dans les conteneurs cr\u00e9ations du projet , les r\u00e9pertoires sur la machine hote: fichier .env docker-compose.yml Le fichier \/php\/Dockerfile le fichier \/php\/php.ini le fichier nginx\/default.conf le fichier mariadb\/init\/01-init.sql le fichier .gitignore","_links":{"self":[{"href":"https:\/\/workboot.fr\/ciela\/wp-json\/wp\/v2\/pages\/8841","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/workboot.fr\/ciela\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/workboot.fr\/ciela\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/workboot.fr\/ciela\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/workboot.fr\/ciela\/wp-json\/wp\/v2\/comments?post=8841"}],"version-history":[{"count":9,"href":"https:\/\/workboot.fr\/ciela\/wp-json\/wp\/v2\/pages\/8841\/revisions"}],"predecessor-version":[{"id":8851,"href":"https:\/\/workboot.fr\/ciela\/wp-json\/wp\/v2\/pages\/8841\/revisions\/8851"}],"wp:attachment":[{"href":"https:\/\/workboot.fr\/ciela\/wp-json\/wp\/v2\/media?parent=8841"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}