Développement web
Administration système
Symfony
PHP
MySQL
Nginx
Mail
Docker
il y a 9 jours citizenz7 2 commentaires 7023 lectures
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
Hello, le Dockerfile n'est jamais utilisé, est-ce normal ? En effet, dans aucun service il y a un build du Dockerfile
@Typo, Oups ! My bad, c'est corrigé. Merci.
Blog d'un geek quinqua nivernais fan d'ovalie, de linuxerie, de musique et de Net
@Typo,
Oups ! My bad, c'est corrigé. Merci....
citizenz7
14-02-2025
Merci @DevReact :)
Pour "la suite" et notamment pour "faire pointer le domaine"...
citizenz7
05-02-2025
Ah, le printemps ! La nature se réveille, les oiseaux reviennent, on crame des mecs... (Arthur, Kaamelott, Livre II, La Fête du Printemps)