Différences entre les versions de « LaravelDocker »

De InfoXelec
Aller à la navigation Aller à la recherche
Ligne 108 : Ligne 108 :
La création de la base de données se fait lors du lancement du conteneur.<br>
La création de la base de données se fait lors du lancement du conteneur.<br>
Pour la réinitialiser, il suffit de supprimer le dossier mysql du PC hôte.<br>
Pour la réinitialiser, il suffit de supprimer le dossier mysql du PC hôte.<br>
Si on veut utiliser un visualiseur de base de données comme DBeaver, il faut mettre dans la chaine de connection les identifiants de l'utilisateur créé pour l'application Web.<br>
Si on veut utiliser un visualiseur de base de données comme DBeaver, il faut mettre <br>
Car dans la liste des users il est en % et non en localhost. Sinon on aura un refus de connection.
* Server Host : localhost
* port : 3306
* user : dbuser
* password : dbpass
Car dans la liste des utilisateurs du MariaDB, cet utilisateur est créé avec host % qui est le wildcard.


==Configuration de Laravel sur le conteneur==
==Configuration de Laravel sur le conteneur==
Lorsque le conteneur est lancé, se connecter au conteneur web avec la commande <code>docker exec -it nomapp-web-1 bash</code><br>
Lorsque le conteneur est lancé, se connecter au conteneur web avec la commande <code>docker exec -it nomapp-web-1 bash</code><br>
Se déplacer dans le dossier /var/www/html et lancer les commandes de création du projet Laravel.
Se déplacer dans le dossier /var/www/html et lancer les commandes de création du projet Laravel.

Version du 12 mai 2023 à 12:04

Ecosystème

/home/user
        |_ dev_web
               |_ imgdocker : contient les éléments Docker
               |_ appname : contient l'application Laravel


Création de l'image Docker PHP7.4

Nous allons créer une image permettant de développer en PHP 7.4 et Laravel 6 sur un Ubuntu plus récent.
Il faut dans l'image php7.4, php7.4-mbstring, php7.4-mysql,...

Créer un dossier qui va héberger l'environnement de développement /home/user/dev_web/imgdocker Créer un fichier dockerfile-php74 avec les éléments suivants :

FROM ubuntu:focal
LABEL version=v1.2
ARG DEBIAN_FRONTEND=noninteractive
ARG APP_USER=jeff
ENV TZ=UTC
RUN apt-get update && apt-get install -y tzdata && \
    ln -fs /usr/share/zoneinfo/$TZ /etc/localtime && \
    dpkg-reconfigure --frontend noninteractive tzdata
RUN apt-get update && \
    apt-get install -y apache2 php7.4 libapache2-mod-php7.4 php7.4-cli php7.4-mbstring php7.4-xml php7.4-zip php7.4-curl php7.4-mysql
RUN php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" && \
    php composer-setup.php --install-dir=/usr/local/bin --filename=composer
# Create a dedicated user
RUN useradd --shell /bin/bash ${APP_USER}
#Switch to the new user
#USER ${APP_USER}:${APP_USER}
COPY --chown=${APP_USER} 000-default.conf /etc/apache2/sites-available/000-default.conf
RUN a2enmod rewrite
EXPOSE 80
CMD ["apache2ctl", "-D", "FOREGROUND"]

Où 000-default.conf est le fichier de configuration du serveur Apache.

<VirtualHost *:80>
	ServerName localhost

	ServerAdmin webmaster@localhost
	DocumentRoot /var/www/html/app/public
	<Directory /var/www/html/app/public>
		Options Indexes FollowSymLinks MultiViews
		AllowOverride All
		Order allow,deny
		allow from all
		Require all granted	
	</Directory>
	ErrorLog ${APACHE_LOG_DIR}/error.log
	CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Lancer la commande docker build -t ifxphp74:v1.2 -f dockerfile-php74 .

Création du conteneur Docker

version: '3'
services:
    web:
        image: 'ifxphp74:v1.2'
        ports:
            - '80:80'
        networks:
            - ifxnetdev
        depends_on:
            - mariadb
        volumes:
            - '/home/user/dev_web/appname:/var/www/html/app'
        depends_on:
            - db
    db:
        image: 'mariadb:latest'
        restart: 'always'
        ports:
            - '3306:3306'
        environment:
            MYSQL_ROOT_PASSWORD: 'sqlpass'
            MYSQL_ROOT_HOST: '%'
            MYSQL_DATABASE: 'dbname'
            MYSQL_USER: 'dbuser'
            MYSQL_PASSWORD: 'dbpass'
            MYSQL_ALLOW_EMPTY_PASSWORD: 'yes'
        volumes:
            - './mysql:/var/lib/mysql'
        networks:
            - ifxnetdev
        healthcheck:
            test:
                - CMD
                - mysqladmin
                - ping
                - '-pdbpass'
            retries: 3
            timeout: 5s
networks:
    ifxnetdev:
        driver: bridge
volumes:
    ifx-mariadb:
        driver: local

Créer le conteneur avec la commande docker compose create depuis le dossier imgdocker.
On peut lancer le conteneur avec la commande docker compose start.

Utilisation

Pour utiliser Laravel depuis les conteneurs Docker, il faut lancer les commandes normales depuis le conteneur associé.
Il faut commencer par créer la base de données et l'utilisateur.

Configuration du conteneur de base de données

Lorsque le conteneur est lancé, se connecter au conteneur db avec la commande docker exec -it nomapp-db-1 mariadb -u root -p
Créer la base de données et l'utilisateur de l'application. Voir l'aide sur MySQL. La création de la base de données se fait lors du lancement du conteneur.
Pour la réinitialiser, il suffit de supprimer le dossier mysql du PC hôte.
Si on veut utiliser un visualiseur de base de données comme DBeaver, il faut mettre

  • Server Host : localhost
  • port : 3306
  • user : dbuser
  • password : dbpass

Car dans la liste des utilisateurs du MariaDB, cet utilisateur est créé avec host % qui est le wildcard.

Configuration de Laravel sur le conteneur

Lorsque le conteneur est lancé, se connecter au conteneur web avec la commande docker exec -it nomapp-web-1 bash
Se déplacer dans le dossier /var/www/html et lancer les commandes de création du projet Laravel.