Accueil Blog A propos Contact Connexion
Retour à la liste des articles Symfony 7 avec Docker

Symfony 7 avec Docker

Olivier Prieur | il y a 1 mois | il y a 4 jours Développement web | 4 | 9450


Retrouvez le tuto complet sur Youtube !

Ce que nous voulons : docker-compose, PHP 8.3-fpm, Nginx, MariaDB, PhpMyAdmin, Mailpit

Avec ces applis, nous aurons un environnement de travail quasi complet (serveur web, PHP, MySQL, Mail)

Je pars du principe que docker et docker compose sont disponibles sur votre machine.

1. Créons premièrement un nouveau dossier : MonApp (ou ce que vous voulez :D )

2. On se place dans MonApp/ et on crée un fichier docker-compose.yaml avec "plein de choses" dedans, à savoir : PHP, MariaDB, Mailpit, Nginx, PhpMyAdmin

services:

  php:

    image: php:8.3-fpm

    build: .

    container_name: php

    volumes:

      - ./app:/var/www/html

      - ./php.ini:/usr/local/etc/php/php.ini

    environment:

      - SYMFONY_ENV=dev

    ports:

      - "9000:9000"

    depends_on:

      - mariadb


  mariadb:

    image: mariadb:latest

    container_name: mariadb

    environment:

      MYSQL_ROOT_PASSWORD: root

      MYSQL_DATABASE: symfony

      MYSQL_USER: symfony

      MYSQL_PASSWORD: symfony

    ports:

      - "3307:3306" # Le port local est maintenant 3307

    volumes:

      - db_data:/var/lib/mysql


  mailpit:

    image: axllent/mailpit:latest

    container_name: mailpit

    ports:

      - "1025:1025"

      - "8025:8025"

    environment:

      - MAILPIT_RELAY=127.0.0.1:25


  nginx:

    image: nginx:latest

    container_name: nginx

    ports:

      - "8080:80"

    volumes:

      - ./app:/var/www/html

      - ./nginx.conf:/etc/nginx/conf.d/default.conf

    depends_on:

      - php


  phpmyadmin:

    image: phpmyadmin/phpmyadmin:latest

    container_name: phpmyadmin

    environment:

      PMA_HOST: mariadb # Nom du conteneur MariaDB

      PMA_PORT: 3306    # Port interne utilisé par phpMyAdmin

      MYSQL_ROOT_PASSWORD: root

    ports:

      - "8081:80" # Accès à phpMyAdmin via le port 8081

    depends_on:

      - mariadb


volumes:

  db_data:


 

3. On va créer un fichier Dockerfile qui va se charger de configurer PHP en ajoutant notamment quelques "plugins" :

FROM php:8.3-fpm

RUN apt-get update && apt-get install -y libfreetype6-dev libjpeg62-turbo-dev libmcrypt-dev libpng-dev

RUN docker-php-ext-install opcache

RUN pecl install apcu

RUN docker-php-ext-enable apcu

RUN pecl install xdebug

RUN docker-php-ext-enable xdebug


COPY php.ini /usr/local/etc/php/php.ini

4. On va ensuite créer un fichier php.ini pour configurer PHP :

display_errors = On

memory_limit = 1024M

upload_max_filesize = 128M

post_max_size = 128M


[opcache]

opcache.enable=1

opcache.memory_consumption=128

opcache.interned_strings_buffer=8

opcache.max_accelerated_files=4000


[apcu]

apc.enabled=1

apc.shm_size=32M

apc.ttl=7200

apc.gc_ttl=3600


[xdebug]

xdebug.remote_enable=1

xdebug.remote_autostart=1

xdebug.remote_port=9001

xdebug.remote_host=localhost


5. Enfin, on va créer un fichier nginx.conf qui va permettre à Nginx (serveur web) de "servir" les fichiers du projet :

server {

    listen 80;

    server_name localhost;


    root /var/www/html/public;

    index index.php index.html;


    location / {

        try_files $uri /index.php$is_args$args;

    }


    location ~ \.php$ {

        include fastcgi_params;

        fastcgi_pass php:9000;

        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

    }


    location ~ /\.ht {

        deny all;

    }

}


6. Pour résumer, vous devez avoir les fichiers suivants :

MonApp

   docker-compose.yaml

   Dockerfile

   nginx.conf

   php.ini


7. On va créer un nouveau projet Symfony 7 dans le dossier MonApp/. Par convention, j'utilise "app" comme nom de projet :

symfony new --webapp app

8. On se retrouve donc avec l'arborescence suivante :

MonApp

   app/

   docker-compose.yaml

   Dockerfile

   nginx.conf

   php.ini


9. On reste à la racine du projet et on va lancer docker avec :

docker-compose up -d

Pour arrêter docker :

docker-compose stop

Pour supprimer les containers :

docker-compose down

 

10. Voilà : si tout s'est bien passé, à ce niveau nous avons un projet Symfony 7 "vierge" qui tourne avec les autres services sur les url suivantes :

Symfony : http://127.0.0.1:8080

PhpMyAdmin : http://127.0.0.1:8081

Mailpit : http://127.0.0.1:8025

NOTE :

Pour des questions pratiques, j'ai volontairement "routé" le port MySQL de 3306 vers 3307 pour ce projet docker car j'ai déjà un serveur MariaDB qui tourne en local sur ma machine... sur le port 3306



NOTE 2 :

Si vous rencontrez des problèmes de droits sur var/cache et var/log, modifier les permissions comme suit :

docker-compose exec php chmod -R 777 var/cache

docker-compose exec php chmod -R 777 var/log

Olivier Prieur

Olivier Prieur

Geek quinqua nivernais fan d'ovalie, de musique, de linuxeries et de Net.
Portfolio : https://www.olivierprieur.fr

Commentaires

En soumettant ce formulaire, j’accepte que ce site conserve mes données personnelles via ce formulaire. Aucune exploitation commerciale ne sera faite des données conservées.

Typo

il y a 1 mois

Hello,
le Dockerfile n'est jamais utilisé, est-ce normal ? En effet, dans aucun service il y a un build du Dockerfile

citizenz7

il y a 1 mois

@Typo,
Oups ! My bad, c'est corrigé. Merci.

Matop

il y a 25 jours

Bonjour, merci pour tutoriel. Je ne sais pas si le problème vient d'une erreur de ma part, j'ai pourtant suivi le tuto de A à Z, mais lorsque je lance le docker-compose up -d, au moment du "creating php", j'ai cette erreur qui s'affiche que je n'arrive pas à résoudre, auriez-vous une idée d'où cela peut venir ?

ERROR: for php Cannot start service php: failed to create task for container: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: error during container init: error mounting "/var/www/ProjetFormation/php.ini" to rootfs at "/usr/local/etc/php/php.ini": mount /var/www/ProjetFormation/php.ini:/usr/local/etc/php/php.ini (via /proc/self/fd/6), flags: 0x5000: not a directory: unknown: Are you trying to mount a directory onto a file (or vice-versa)? Check if the specified host path exists and is the expected type

citizenz7

il y a 25 jours

@Matop,
Visiblement il y a un soucis avec le php.ini et son path
Vous pouvez supprimer la ligne de montage pour php.ini dans votre fichier docker-compose.yml et voir si ça fonctionne mieux...

A la une

Utiliser TailwindCSS dans un projet Symfony 7

Lire l'article

Symfony 7 avec Docker

Lire l'article

Customiser Easyadmin (2) : avec AssetMapper

Lire l'article

Je recherche un nouveau job !

Lire l'article

Les plus lus

Symfony : barre de recherche dans la sidebar 19343

Lire l'article

Débuter avec Symfony 5 : le fichier .env 11909

Lire l'article

VSCode : 10 raccourcis clavier indispensables (Linux) 11563

Lire l'article

GIT / GITHUB : aide-mémoire pour "les nuls" 10178

Lire l'article