3 déc. 2024 | Connexion

Blog

Symfony : MySQL et phpMyAdmin avec Docker

Symfony : MySQL et phpMyAdmin avec Docker

Développement web
Symfony Docker

il y a 3 ans citizenz7 4 commentaires 9453 lectures

PREREQUIS
Avoir installé :

  • Docker
  • docker-compose
  • Composer
  • Symfony CLI

On crée un projet en --full

symfony new demo-docker --full


On rentre dans le répertoire du nouveau projet

cd demo-docker


On démarre le serveur Symfony

symfony serve -d


Si vous ne l'avez pas encore configuré, ne tenez pas compte des éventuels warnings à propos du HTTPS.
On peut désormais ouvir son navigateur à l'adresse http://127.0.0.1:8000

On va tout de suite créer une base de données MySQL avec phpMyAdmin grâce à Docker et docker-compose.
Symfony nous simplifie la tâche. On tape simplement :

symfony console make:docker:database


On tape 0 (choix pour MySQL)
Puis on laisse par défaut [latest] donc on tape simplement sur Entrée

Un nouveau fichier est apparu à la racine du projet : docker-compose.yaml
Il a été automatiquement créé avec le mot de passe root qui est password et le nom de la base MySQL qui main

Avant de lancer docker, on va ajouter phpMyAdmin au fichier docker-compose.yaml. Voici le fichier complet :

version: '3.7'
services:
    database:
        image: 'mysql:latest'
        environment:
            MYSQL_ROOT_PASSWORD: password
            MYSQL_DATABASE: main
        ports:
            # To allow the host machine to access the ports below, modify the lines below.
            # For example, to allow the host to connect to port 3306 on the container, you would change
            # "3306" to "3306:3306". Where the first port is exposed to the host and the second is the container port.
            # See https://docs.docker.com/compose/compose-file/#ports for more information.
            - '3306'
    phpmyadmin:
        depends_on:
            - database
        image: phpmyadmin
        restart: always
        ports:
            - 8080:80
        environment:
            PMA_HOST: database


Ici, on précise qu'on veut pouvoir se connecter à phpMyAdmin sur le port 8080 (donc à l'adresse http://127.0.0.1:8080).
Les identifiants de connection sont hérités de MySQL. On va donc utiliser le login root et mot de passe password

Attention !!! Le formatage ici est très important et vous devez le respecter au risque que cela ne fonctionne pas.

Une fois fait, on lance tout ça avec docker-compose :

docker-compose up -d


Désormais on peut se connecter sur http://127.0.0.1:8080, rentrer login/mot de passe et vous avez accès à phpMyAdmin.

Pour pousser un peu plus loin l'exemple, on crée un Controller Home afin de disposer d'une page d'accueil :

symfony console make:controller Home


On edite le fichier src/Controller/HomeController.php (qui vient d'être créé avec la commande précédente) et on change la route.
La page home sera la page d'accueil, la première page du site quand on se connecte, donc on met une route avec seulement "/" :

* @Route("/", name="home")


On enregistre.

On edite templates/home/index.html.twig.
On supprime toutes les lignes entre {% block body %} et {% endblock %}
On va juste mettre un titre en <h1> pour l'exemple dans le block body :

{% extends 'base.html.twig' %}
{% block title %}Hello HomeController!{% endblock %}
{% block body %}
     <h1>Bienvenue sur la page Home !</h1>
{% endblock %}


On rafraichit la page à l'adresse http://127.0.0.1:8000 et vous devriez voir le titre <h1>.

On dispose au final de MySQL et de phpMyAdmin sans devoir l'installer sur son PC.
Hyper pratique ! ;)

Pour arrêter vos container docker, il suffit de taper la commande suivante :

docker-compose stop

4 commentaires


dev, le 06-01-2023 à 10:09:57

Cette article est intéressant cependant il est incomplet, dans le sens ou on s'attend (du moins moi) a ce que l'article parle de la connexion entre symfony et une base de donnée dockerizée. Il y a bien un début mais la partie connexion avec entre symfony et base de donnée est manquante.

Dubistar, le 29-03-2023 à 21:35:45

Très bien cette manip !! et pour répondre au commentaire pour la connexion entre symfony et la bdd, il faut juste taper dans le terminal : symfony var:export --multiline et copier coller dans le .env "mysql://root:password@127.0.0.1:58101/main?sslmode=disable&charset=utf8mb4" (a adapter selon le nom de sa bdd)

Fanou, le 22-09-2023 à 11:01:57

Très intéressant et rapide cet article ! Comment faire pour les entités se créent réellement dans la DB ? J'ai beau avoir configurer le .env avec le DATABASE_URL, je ne vois rien apparaitre dans la DB. En revanche les opérations de création d'entité se font bien dans symfony, les migrations également... Je ne comprends pas.

citizenz, le 30-09-2023 à 06:26:54

@fanou "Comment faire pour les entités se créent réellement dans la DB ? ". Pas certains de bien comprendre :) A tout hasard, avez-vous bien fait php bin/console make:migration puis php bin/console doctrine:migrations:migrate ?

Nb d'articles actifs : 51 | Nb de commentaires : 39 | Nb de catégories : 8 | Nb de tags : 32 | Nb total de lectures : 224 395
2024 citizenz.info • Some rights reserved GPLv3 • Version 3.3.5

N'empêche que chez nous, on sait construire ! Les aqueducs, c'est quand même un petit peu plus classe que vos murs en merde séchée… Enfin, je dis ça, je dis tout ! (Caius Camillus, Kaamelott, Livre I, 56 : Le Dernier Empereur)