Développement web
Symfony
Docker
il y a 3 ans citizenz7 4 commentaires 9453 lectures
PREREQUIS
Avoir installé :
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
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.
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)
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.
@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 ?
Blog d'un geek quinqua nivernais fan d'ovalie, de linuxerie, de musique et de Net
@Kilenge22 De rien ;)...
citizenz
19-08-2024
Salut et merci vraiment ...
Kilenge22
18-08-2024
@Denny, c'est à dire ?...
citizenz
10-08-2024
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)