Démarrer un nouveau projet symfony 6 comme un sénior sous docker
Aug 6, 2023 Symfony
En tant que développeur sénior, la création d'un nouveau projet sous symfony se fait via docker, cet article décrit les différentes étapes de création du projet symfony.
Symfony, depuis sa version 6 nécessite la version 8 de php minimum. Nous allons donc avant de créer notre projet symfony , créer un container docker sous php 8. Nous utiliserons ensuite apache 2 comme serveur web.
- Création d’un container avec PHP 8
Créer le fichier docker-compose.yaml à la racine du répertoire de votre projet
Nous allons utiliser l’image de php basé sur la version alpine linux qui est une distribution linux ultra légère et orientée sécurité.
Et nous allons mapper le répertoire local de notre projet au répertoire /app de notre container php.
Voici le contenu minimale de notre fichier docker-compose.yaml à ce stade :
services: |
Nous allons rentrer dans notre container en ssh (l’instruction working_dir: /app permet d’arriver directement dans le dossier /app de notre container)
docker exec -it my_php sh |
On vérifie qu’on a la bonne version de php via la commande : php -v
PHP 8.2.8 (cli) (built: Jul 10 2023 22:24:17) (NTS) |
- Création du projet symfony 6
Documentation : https://symfony.com/download
Nous allons d’abord installer la cli (command line interface) de symfony.
Pour cela nous allons installer l’outil bash (la distribution alpine n’est pas fourni avec bash par défaut) puis la cli symfony et ensuite git.
Nous allons donc lancer les commandes ci-dessous :
apk update && apk add bash export PATH="$HOME/.symfony5/bin:$PATH" apk add git |
Configurer git avec votre username et email.
git config --global user.name my_username git config --global user.email [email protected] |
Nous allons ensuite installer composer en exécutant les commandes ci-dessous :
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" |
Nous pouvons maintenant créer notre projet symfony :
symfony new my_project_docker --version="6.3.*" --webapp |
Nous allons maintenant déplacer tous les fichiers du répertoire /app/my_project_docker de notre container vers le répertoire /app et supprimer le répertoire my_project_docker.
rm my_project_docker/docker-compose*.yml mv my_project_docker/* . mv my_project_docker/.env . mv my_project_docker/.gitignore . |
Nous avons maintenant un projet sous symfony 6 et php 8
Nous allons maintenant installer un serveur web apache pour tester notre application.
- Création du serveur web
Nous allons modifier notre fichier docker-compose.yaml pour y ajouter le serveur web apache.
services: php: image: php:8.2-fpm-alpine3.18 container_name: my_php volumes: - .:/app working_dir: /app ports: - 9000:9000 apache: build: context: ./docker container_name: my_apache volumes: - .:/app working_dir: /app ports: - 8080:80 depends_on: - php environment: WEB_APP_HOST: localhost:8080 PHP_HOST: my_php:9000 |
Créer le répertoire docker à la racine de votre projet et créer un fichier Dockerfile, un fichier httpd-vhosts.conf et un fichier httpd.conf
Mettez le contenu ci-dessous dans le fichier Dockerfile afin de surcharger les fichiers de configuration d’apache
FROM httpd:alpine3.18 |
Mettez le contenu ci-dessous dans le fichier httpd-vhosts.conf pour configurer notre vhost
<VirtualHost *:80> |
Nous allons copier le fichier de configuration d’apache httpd.conf dans notre dossier local docker pour le surcharger :
docker exec -it my_apache sh |
Ouvrez le fichier docker/httpd.conf et décommenter les lignes listées ci-dessous
Ligne 524
Include conf/extra/httpd-vhosts.conf
Ligne 142
LoadModule proxy_module modules/mod_proxy.so
Ligne 146
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
Ligne 199
LoadModule rewrite_module modules/mod_rewrite.so
Remplacer les lignes 265 et 266 :
DocumentRoot "/usr/local/apache2/htdocs"
<Directory "/usr/local/apache2/htdocs">
par :
DocumentRoot "/app/public"
<Directory "/app/public">
Recréer les container :
docker-compose up -d --build --force-recreate |
- Lancement du projet
Nous allons maintenant installer composer dans notre container php
Créer un fichier docker/phpDockerfile avec le contenu ci-dessous qui permet de partir de la même image et d’installer composer et la cli symfony en plus
FROM php:8.2-fpm-alpine3.18 |
Note : remplacer my_username par vos identifiants
Puis modifier le contenu du fichier docker-compose.yaml avec le contenu ci-dessous afin que l’image de notre container php soit créer à partir du Dockerfile que l’on vient de créer :
services: |
Lancer la commande
composer install |
Aller sur l’url http://localhost:8080, on arrive bien sur la page d’accueil par défaut de symfony
- Création de la base de données mariadb sous docker
Nous allons maintenant créer une base de données mariadb pour notre application.
Ajouter dans le fichier docker-compose.yaml le container mariadb et le container adminer qui est un outil web (équivalent à phpmyadmin) qui permet de naviguer dans les données de notre base de données
services: |