====== Composer une Stack pour un projet Symfony 5 ====== Sources: * [[https://blog.dev-web.io/2019/02/10/utiliser-symfony-dans-docker/|Utiliser Symfony dans docker]] ===== Création de la stack ===== Créer un fichier **docker-compose.yml** dans un nouveau dossier : version: '3' services: db: # image officielle de MySQL 5 image: mysql:5 # mapper le port 3306 de l'image vers un port local ports: - "3307:3306" # utilisateur root sans mot de passe environment: MYSQL_ALLOW_EMPTY_PASSWORD: 'yes' MYSQL_USER: 'root' # mapper le dossier /var/lib/mysql de l'image vers un dossier local volumes: - /chemin/du/projet/mysql-data:/var/lib/mysql maildev: image: djfarrelly/maildev # mapper le port 80 de l'image vers un port local ports: - "8002:80" phpmyadmin: image: phpmyadmin/phpmyadmin # mapper le port 80 de l'image vers un port local ports: - "8080:80" # l'image 'db' doit être lancée avant celle-ci depends_on: - db # spécifier que PhpMyAdmin se connecte le serveur dans l'image 'db' environment: PMA_HOST: db php72: # on va construire une image dans le dossier php72 build: php72 # mapper le port 80 de l'image vers un port local ports: - "8000:80" volumes: - /chemin/du/projet/vhosts:/etc/apache2/sites-enabled - /chemin/du/projet/www:/var/www ===== Configuration de Apache et PHP ===== Lire la doc de l'image [[https://hub.docker.com/_/php|PHP]] pour plus d'infos sur comment créer son image. * Créer un dossier **./www** * Créer un dossier **./php72** * Créer un fichier **./php72/php.ini** * Aller sur [[https://github.com/php/php-src/blob/master/php.ini-development]] * Cliquer sur le bouton **Raw** puis copier/coller toute la page * Créer un dossier **./vhosts** * Créer un fichier **./vhosts/vhost.conf** ServerName localhost DocumentRoot /var/www AllowOverride All Order Allow,Deny Allow from All ErrorLog /var/log/apache2/error.log CustomLog /var/log/apache2/access.log combined * Créer un fichier **./php72/Dockerfile** FROM php:7.2-apache RUN echo "ServerName localhost" >> /etc/apache2/apache2.conf RUN apt-get update && \ apt-get install -y --no-install-recommends locales apt-utils git wget; RUN echo "en_US.UTF-8 UTF-8" > /etc/locale.gen && \ echo "fr_FR.UTF-8 UTF-8" >> /etc/locale.gen && \ locale-gen COPY php.ini /usr/local/etc/php/php.ini RUN curl -sSk https://getcomposer.org/installer | php -- --disable-tls && \ mv composer.phar /usr/local/bin/composer # Créer user "marc:marc" avec même uid et gid que sur l'hôte RUN addgroup --system marc --gid 1000 && adduser --system marc --uid 1000 --ingroup marc WORKDIR /var/www/ Au final, on doit obtenir l'arborescence suivante : /chemin/du/projet/ ├── docker-compose.yml ├── mysql-data │   └── ... divers fichiers de mysql ... ├── php72 │   ├── Dockerfile │   └── php.ini ├── vhosts │   └── vhost.conf └── www └── ... fichiers du projet php ... ===== Construction de la stack ===== docker-compose build Cette commande peut également être relancée à chaque fois qu'on modifie quelque chose dans **./php72/Dockerfile** ===== Lancer/Arrêter la stack ===== Lancer la stack : docker-compose up Les messages provenant des différentes images en cours de fonctionnement sont affichées dans le terminal. Pour tout fermer, taper **Ctrl+C**. * [[http://localhost:8000|localhost:8000 : Le projet Symfony]] * [[http://localhost:8080|localhost:8080 : PhpMyAdmin]] (login **root** sans mot de passe) * [[http://localhost:8002|localhost:8002 : MailDev]] > Pour lancer la stack en mode **détaché**, ajouter l'option **-d** > '' docker-compose up -d '' > et pour l'arrêter : > '' docker-compose down '' ===== Création du projet ===== Lancer la stack. Se connecter au bash du conteneur PHP : # En tant que l'utilisateur marc (1000). # Pour root, ce serait 0. docker exec -u 1000 -it $(docker ps -aqf "name=php72") bash # Sinon on peut d'abord regarder l'ID du container # et indiquer les trois premiers chiffres (XXX) : docker ps docker exec -u 1000 -it XXX bash Configurer **git** sinon la création du projet plantera : git config --global user.email "you@example.com" git config --global user.name "Your Name" Voir la page [[symfony5:installer_symfony]] pour installer Symfony. Se placer dans le dossier **/var/www/** cd /var/www symfony new --full --dir=. **--dir=.** pour créer le projet directement dans **/var/www**, pas besoin d'un sous-dossier. :!: La création du projet peut durer un certain temps :!: Installer la dépendance **symfony/apache-pack** composer require symfony/apache-pack Cette dépendance permet que la **debug toolbar** soit affichée.