Différences entre les versions de « LaravelDocker »
(16 versions intermédiaires par le même utilisateur non affichées) | |||
Ligne 10 : | Ligne 10 : | ||
Créer un dossier qui va héberger l'environnement de développement '''/home/user/dev_web/imgdocker''' | Créer un dossier qui va héberger l'environnement de développement '''/home/user/dev_web/imgdocker''' | ||
Créer un fichier '''dockerfile''' avec les éléments suivants : | Créer un fichier '''dockerfile-php74''' avec les éléments suivants : | ||
<pre> | <pre> | ||
FROM ubuntu:focal | FROM ubuntu:focal | ||
LABEL version=v1.2 | |||
ARG DEBIAN_FRONTEND=noninteractive | ARG DEBIAN_FRONTEND=noninteractive | ||
ARG APP_USER=jeff | |||
ENV TZ=UTC | ENV TZ=UTC | ||
RUN apt-get update && apt-get install -y tzdata && \ | RUN apt-get update && apt-get install -y tzdata && \ | ||
Ligne 22 : | Ligne 24 : | ||
RUN php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" && \ | RUN php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" && \ | ||
php composer-setup.php --install-dir=/usr/local/bin --filename=composer | php composer-setup.php --install-dir=/usr/local/bin --filename=composer | ||
COPY 000-default.conf /etc/apache2/sites-available/000-default.conf | # 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 | RUN a2enmod rewrite | ||
EXPOSE 80 | EXPOSE 80 | ||
CMD ["apache2ctl", "-D", "FOREGROUND"] | CMD ["apache2ctl", "-D", "FOREGROUND"] | ||
</pre> | </pre> | ||
Où 000-default.conf est le fichier de configuration du serveur Apache | Où 000-default.conf est le fichier de configuration du serveur Apache.<br> | ||
Lancer la commande <code>docker build -t ifxphp74:v1. | <pre><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></pre> | |||
Lancer la commande <code>docker build -t ifxphp74:v1.2 -f dockerfile-php74 .</code> | |||
=Création du conteneur Docker= | =Création du conteneur Docker= | ||
<pre>version: '3' | <pre>version: '3' | ||
name: 'ifxwebdev74' | |||
services: | services: | ||
web: | web: | ||
image: 'ifxphp74:v1. | image: 'ifxphp74:v1.2' | ||
ports: | ports: | ||
- '80:80' | - '80:80' | ||
Ligne 43 : | Ligne 65 : | ||
volumes: | volumes: | ||
- '/home/user/dev_web/appname:/var/www/html/app' | - '/home/user/dev_web/appname:/var/www/html/app' | ||
depends_on: | depends_on: | ||
- db | - db | ||
db: | db: | ||
image: 'mariadb: | image: 'mariadb:lts' | ||
restart: ' | restart: 'unless-stopped' | ||
ports: | ports: | ||
- '3306:3306' | - '3306:3306' | ||
environment: | environment: | ||
MYSQL_ROOT_PASSWORD: 'sqlpass' | MYSQL_ROOT_PASSWORD: 'sqlpass' | ||
MYSQL_ROOT_HOST: ' | MYSQL_ROOT_HOST: '%' | ||
MYSQL_DATABASE: 'dbname' | MYSQL_DATABASE: 'dbname' | ||
MYSQL_USER: 'dbuser' | MYSQL_USER: 'dbuser' | ||
Ligne 77 : | Ligne 97 : | ||
ifx-mariadb: | ifx-mariadb: | ||
driver: local</pre> | driver: local</pre> | ||
Créer le conteneur avec la commande <code>docker compose create</code> depuis le dossier imgdocker.<br> | Créer le conteneur avec la commande <code>docker compose -f php74-compose.yml create</code> depuis le dossier imgdocker.<br> | ||
On peut lancer le conteneur avec la commande <code>docker compose start</code>.<br> | On peut lancer le conteneur avec la commande <code>docker compose -f php74-compose.yml start</code>.<br> | ||
=Utilisation= | =Utilisation= | ||
Pour utiliser Laravel depuis les conteneurs Docker, il faut lancer les commandes normales depuis le conteneur associé.<br> | Pour utiliser Laravel depuis les conteneurs Docker, il faut lancer les commandes normales depuis le conteneur associé.<br> | ||
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 <code>docker exec -it nomapp-db-1 mariadb -u root -p</code><br> | |||
<strike>Créer la base de données et l'utilisateur de l'application. Voir l'aide sur MySQL.</strike> | |||
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> | |||
Si on veut utiliser un visualiseur de base de données comme DBeaver, il faut mettre <br> | |||
* 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== | ||
Ligne 87 : | Ligne 120 : | ||
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. | ||
== | ==Node== | ||
Pour l'utilisation de TailwindCSS, la compilation se fait avec VITE.<br> | |||
L'environnement de développement Node.JS (node, npm, nvm) doivent être installés sur la machine de développement.<br> | |||
La commande <code>npm run dev</code> qui permet la compilation automatique du JS doit être lancée depuis la machine de développement. |
Version actuelle datée du 12 janvier 2024 à 11:11
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' name: 'ifxwebdev74' 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:lts' restart: 'unless-stopped' 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 -f php74-compose.yml create
depuis le dossier imgdocker.
On peut lancer le conteneur avec la commande docker compose -f php74-compose.yml 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.
Node
Pour l'utilisation de TailwindCSS, la compilation se fait avec VITE.
L'environnement de développement Node.JS (node, npm, nvm) doivent être installés sur la machine de développement.
La commande npm run dev
qui permet la compilation automatique du JS doit être lancée depuis la machine de développement.