====== 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.