Cette fois, j'aimerais utiliser Docker pour créer un environnement de développement ** Laravel + Apache + MySQL **. Le développement individuel étant effectué par une équipe comprenant des programmeurs débutants, la politique est d'adopter des méthodes et des procédures d'installation simples et visuellement faciles à comprendre.
Introduisons immédiatement Docker, qui est le sujet principal.
Vous devez activer une fonctionnalité de virtualisation appelée Hyper-v avant d'installer Docker. Cette fonction semble être installée uniquement dans la série Windows Pro, et dans d'autres cas, il est nécessaire d'installer d'autres technologies de virtualisation telles que VirtualBox.
** ① Entrez "Activer ou désactiver les fonctionnalités Windows" dans la section "Entrez ici pour rechercher" à droite du bouton Windows **
** ② L'écran de réglage selon le libellé de la recherche s'affiche **
** ③ Trouvez l'élément Hyper-v dedans et vérifiez-le **
Maintenant vous êtes prêt à installer
Si vous utilisez principalement votre propre PC, vous ne pourrez peut-être pas le vérifier, et lorsque vous le vérifiez, il semble que vous deviez activer la fonction elle-même à partir de l'écran du BIOS. Si la même chose se produit, recherchez "Nom du fabricant Mazabo" BIOS Hyper-v "et vous trouverez un article sur la façon de l'activer. Au fait, je suis un Mazabo GIGABYTE, donc l'article suivant m'a été utile.
Veuillez télécharger le programme d'installation adapté à votre environnement à partir du lien ci-dessous
Après le téléchargement, suivez les étapes pour installer sans réfléchir. Il y aura un écran pour sélectionner quelque chose, mais en gros, vous n'avez pas à vous soucier de quoi que ce soit.
Il sera redémarré lorsque l'installation sera terminée, veuillez donc fermer toutes les autres applications ouvertes, etc.
Exécutez la commande suivante à partir du terminal sur Mac ou de l'invite de commande sous Windows.
docker -v
Après exécution, si la version suivante est affichée, l'installation est terminée.
PS C:\Users\Kohei Takahashi> docker -v
Docker version 19.03.13, build 4484c46d9d
L'erreur que j'ai eue n'était pas exactement la même que la mienne, mais dans mon cas j'ai eu l'erreur "Je n'ai pas de noyau Linux". Fondamentalement, si le lien est affiché avec le message d'erreur, vous pouvez accéder au lien et la solution sera décrite avec soin, veuillez donc procéder telle quelle.
Docker a le concept de conteneurs, et Docker Compose est un outil qui rend ces conteneurs faciles à gérer. Comment installer
L'article ci-dessus est facile à comprendre.
Cette fois, comme mentionné ci-dessus, nous allons préparer l'environnement de Laravel (PHP) + Apache + MySQL! Si vous développez une équipe, une personne peut faire le travail à partir d'ici, et les autres peuvent passer à "Lancer Docker". Il semble qu'il n'y ait pas de restrictions sur la structure des dossiers, mais la structure est comme indiqué dans Référence. Créez un dossier / fichier dans votre répertoire préféré avec la configuration suivante.
├── docker/
│ ├── app/
│ │ ├ Dockerfile
│ │ ├ php.ini #Fichier pour les paramètres PHP
│ │ └ 000-default.conf #Fichier de configuration Apache
│ └── db/
│ ├ data/ #Répertoire de stockage des données MySQL
│ └ my.cnf #Fichier de configuration MySQL
│
├── src/ #Répertoire de stockage des sources Laravel
└── docker-compose.yml
Très beau.
Ensuite, nous donnerons vie aux fichiers de réglages que nous venons de préparer.
Dockerfile Tout d'abord, donnons vie au Dockerfile.
#Quel type d'image Docker utiliser pour la construction
FROM php:7.4-apache
#Chargez le fichier de configuration dans PHP et Apache dans le conteneur docker
ADD php.ini /usr/local/etc/php/
ADD 000-default.conf /etc/apache2/sites-enabled/
#Installation de Composer
RUN cd /usr/bin && curl -s http://getcomposer.org/installer | php && ln -s /usr/bin/composer.phar /usr/bin/composer
#Installation du middleware
RUN apt-get update \
&& apt-get install -y \
git \
zip \
unzip \
vim \
libpng-dev \
libpq-dev \
&& docker-php-ext-install pdo_mysql
#Activer modRewrite requis par Laravel
RUN mv /etc/apache2/mods-available/rewrite.load /etc/apache2/mods-enabled
RUN /bin/sh -c a2enmod rewrite
C'est aussi un pakuri rond de Référence. Il semble que ces commandes soient exécutées dans l'ordre du haut.
000-default.conf Ensuite, donnez vie au fichier de configuration Apache.
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html/laravelapp/public
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
<Directory /var/www/html/laravelapp/public>
AllowOverride All
</Directory>
</VirtualHost>
Pour "application laravel" qui apparaît ici, entrez le nom de l'application Laravel que vous prévoyez de créer.
php.ini Vient ensuite php.ini
[Date]
date.timezone = "Asia/Tokyo"
[mbstring]
mbstring.internal_encoding = "UTF-8"
mbstring.language = "Japanese"
Vous pouvez comprendre cela sans explication, mais cela définit le code des caractères et le fait que "Je suis japonais, donc je m'occupe du Japon".
my.cnf Le dernier fichier de configuration est my.cnf
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
[client]
default-character-set=utf8mb4
Il s'agit principalement du réglage du code de caractère.
Lorsque j'ai écrit la structure des répertoires plus tôt, il y avait "répertoire app" et "répertoire db" directement sous le docker, mais ils sont [container](https://cn.teldevice.co.jp/column/10509/ "title" ") A été clairement distinguée pour les séparer. Nous créons un conteneur d'application et un conteneur db, et il existe un Docker Compose qui peut les gérer facilement. Le fichier de configuration Docker Compose est docker-compose.yml. Écrivez ce qui suit dans docker-compose.yml.
#Spécification de la version du fichier de composition
version: '3'
#Quel type de conteneur lancer
services:
#Conteneur pour exécuter laravel
app:
#Quel port ouvrir et connecter. Ce qui suit ouvre le port 80 du conteneur et se connecte au port 8000 de l'hôte
ports:
- "8000:80"
#Spécifiez pour créer un conteneur à l'aide du Dockerfile créé précédemment
build: ./docker/app
#Spécifiez le nom du conteneur
container_name: laravel_app
#Spécifiez où synchroniser le conteneur et les répertoires hôte. Où ira la source laravel
volumes:
- ./src:/var/www/html
#Conteneur qui exécute MySQL
db:
#MySQL 5 depuis Docker Hub.Désignation pour télécharger l'image officielle de 7
image: mysql:5.7
container_name: laravel_db
#Spécifiez la variable d'environnement dans le conteneur. Il existe une image Docker qui sera définie au moment de la construction si vous transmettez la variable d'environnement, il est donc bon de la vérifier sur le site Docker Hub lors de son utilisation.
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: laravel_db
MYSQL_USER: laravel_user
MYSQL_PASSWORD: laravel_pass
TZ: 'Asia/Tokyo'
#Commande au démarrage
command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
#Synchronisation d'annuaire. Synchronisez l'emplacement où le fichier de configuration et les données MySQL sont enregistrés. Fondamentalement, même si le conteneur est modifié au démarrage, les données seront perdues lorsque le conteneur lui-même s'arrête, il est donc nécessaire de synchroniser ce que vous souhaitez enregistrer avec la machine hôte.
volumes:
- ./docker/db/data:/var/lib/mysql
- ./docker/db/my.cnf:/etc/mysql/conf.d/my.cnf
ports:
- 3306:330
Ceci termine les fichiers de configuration. Lançons Docker!
Lorsque vous exécutez la commande suivante, le contenu de docker-compose.yml décrit précédemment deviendra un conteneur.
docker-compose build
Ensuite, commençons le conteneur avec la commande suivante
docker-compose up
Cela va le démarrer. Cependant, lorsqu'il est démarré avec la commande ci-dessus, le journal est toujours affiché car il n'est pas exécuté en arrière-plan. C'est ennuyeux, alors exécutez la commande suivante pour le démarrer.
docker-compose up -d
Il fonctionnera maintenant en arrière-plan.
Au fait, si tu veux le laisser tomber
docker-compose down
Il tombera.
Ensuite, créons un projet Laravel à l'intérieur du conteneur!
Entrez le shell du conteneur d'application créé précédemment avec la commande suivante
docker exec -it laravel_app bash
Créez un projet en entrant les commandes familières suivantes à la destination
composer create-project "laravel/laravel=~6.0" --prefer-dist laravelapp
Entrez le nom du projet que vous souhaitez développer dans la partie intitulée "application laravel" ci-dessus.
Après l'exécution, attendez un moment jusqu'à ce que le projet soit créé!
J'ai fait la description suivante dans docker-compose.yml plus tôt.
Extrait des paramètres du conteneur d'application
services:
app:
ports:
- "8000:80" #Important ici
build: ./docker/app
container_name: laravel_app
volumes:
- ./src:/var/www/html
Dans la description du conteneur d'application, j'ai défini une propriété appelée "ports", qui est un port comme son nom l'indique, et lorsque vous lancez le conteneur docker, vous pouvez en fait aller voir le projet laravel créé à l'URL suivante. Je peux le faire.
http://localhost:8000
Si vous pouvez confirmer avec cela, vous pouvez créer un projet laravel sur Docker pour le moment.
Quand j'y ai accédé pour la première fois, on m'a dit quelque chose comme ça
The stream or file "/var/www/html/dooga/storage/logs/laravel.log" could not be opened in append mode: failed to open stream: Permission denied
Après enquête, il semble que l'utilisateur apache n'a pas l'autorisation d'écriture pour le fichier journal Laravel, il n'est donc pas possible d'écrire dans le journal et une exception se produit.
chmod -R 777 /var/www/html/laravel_app/storage
J'ai pu le résoudre avec la commande ci-dessus, mais je ne l'aime pas. Après quelques heures de recherche, j'ai trouvé cet article Lorsque j'ai essayé de suivre la procédure immédiatement, elle s'est affichée à merveille. Je me demande un peu si ce droit d'utilisateur est bon, mais je pense qu'il ne pose aucun problème.
Quand j'ai frappé la commande artisan, j'ai eu l'erreur suivante
Failed to clear cache. Make sure you have the appropriate permissions.
Si cela se produit, veuillez vérifier la structure des dossiers ci-dessous.
├─app #Probablement pas pertinent cette fois
│ └─public
├─framework
│ ├─cache
│ │ └─data
│ ├─sessions
│ └─views
└─logs #Probablement pas pertinent cette fois
Y a-t-il quelque chose qui ne va pas dans la procédure ou n'est-il pas possible de le faire en premier lieu? La raison n'est pas claire, mais le contenu du dossier ci-dessus appelé "framework" n'était pas complet. Je pense qu'il n'y avait pas de dossier appelé framework en premier lieu. Peut-être que je n'ai pas fait quelque chose que je pourrais faire parce que je n'avais pas l'autorisation d'écrire. Dans mon environnement, ces solutions m'ont conduit à la page d'accueil.
Enfin, c'est le paramètre DB. Ces paramètres sont organisés dans un fichier appelé .env. Veuillez modifier comme suit.
DB_CONNECTION=mysql
DB_HOST=laravel_db
DB_PORT=3306
DB_DATABASE=laravel_db # docker-compose.yml MYSQL_DATABASE
DB_USERNAME=laravel_user # docker-compose.yml MYSQL_DATABASE
DB_PASSWORD=laravel_pass # docker-compose.yml MYSQL_PASSWORD
Comme vous le savez peut-être, il s'agit de la valeur définie comme «environnement» du conteneur de base de données dans docker-compose.yml. Une base de données est également créée au démarrage, nous allons donc migrer après la configuration.
Entrez le shell du conteneur d'application comme précédemment. Démarrage du lien! !! Purururururune! !! (Style SAO)
docker exec -it laravel_app bash
Vous êtes maintenant dans / var / www / html. Si vous exécutez ls ici, vous pouvez voir qu'il y a laravel_app directement en dessous.
cd laravel_app # laravel_Aller à l'App
php artisan migrate #exécuter migrer
Si le journal suivant s'affiche après l'exécution de la commande ci-dessus, la migration est réussie. On peut dire que la construction de l'environnement a été achevée une fois.
Migration table created successfully.
Migrating: 2014_10_12_000000_create_users_table
Migrated: 2014_10_12_000000_create_users_table (0.1 seconds)
Migrating: 2014_10_12_100000_create_password_resets_table
Migrated: 2014_10_12_100000_create_password_resets_table (0.06 seconds)
Migrating: 2019_08_19_000000_create_failed_jobs_table
Migrated: 2019_08_19_000000_create_failed_jobs_table (0.03 seconds)
Cette fois, il s'agit d'une migration en vérifiant la connexion, donc dans mon cas je vais la restaurer après cela.
php artisan migrate:refresh
Cela vous ramènera à l'état avant la migration.
Dans ce qui précède, on dirait que c'est fini en douceur, mais bien sûr ce n'est pas le cas, et je suis resté coincé pendant un moment ici aussi. La raison en est que j'ai une erreur d'accès refusé lorsque php artisan migre.
Message d'erreur
root@xxxxxxxxxxxx:/var/www/html/laravel_app# php artisan migrate #Exécuter migrer
Illuminate\Database\QueryException : SQLSTATE[HY000] [1045] Access denied for user 'laravel_user'@'172.21.0.3'
Pourquoi? Je suis en fait allé voir le contenu de mysql Dans ce cas, une fois sorti du conteneur d'application
docker exec it laravel_db mysql -u root -p
Enter password: #Probablement OK en tapant root
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.7.31 MySQL Community Server (GPL)
Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
Vous pouvez maintenant vous connecter à mysql en tant qu'utilisateur root. Après cela, j'irai voir les utilisateurs existants.
mysql> select user from mysql.user;
Ensuite, dans mon cas, l'utilisateur de laravel_db n'a pas été créé. (Peut-être que c'est naturel w)
db:
image: mysql:5.7
container_name: laravel_db
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: laravel_db
MYSQL_USER: laravel_user #Cet utilisateur n'existait pas
MYSQL_PASSWORD: laravel_pass
TZ: 'Asia/Tokyo'
command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
volumes:
- ./docker/db/data:/var/lib/mysql
- ./docker/db/my.cnf:/etc/mysql/conf.d/my.cnf
ports:
- 3306:330
Si tel est le cas, vous pouvez changer le fichier .env en tant qu'utilisateur qui utilise toujours root, mais je voudrais utiliser l'utilisateur laravel_user, et utiliser root entraînerait normalement la peine de mort pour des raisons religieuses.
Créez maintenant un laravel_user avec les mêmes permissions que root! (Yeux blancs)
Oui, alors je sens que je peux utiliser root, mais s'il vous plaît restez en contact.
mysql> CREATE USER 'laravel_user'@'%' IDENTIFIED BY 'laravel_pass';
Un laravel_user sera créé avec les minutes CREATE ci-dessus. Maintenant, donnez-lui les mêmes privilèges que root.
mysql> GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, PROCESS, REFERENCES, INDEX, ALTER, SHOW DATABASES, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER ON *.* TO 'laravel_user'@'%' WITH GRANT OPTION;
Accordez des autorisations à laravel_user avec cette déclaration coquine. Assurez-vous que vous avez vraiment les mêmes privilèges que root.
mysql> select host,user,select_priv,create_priv,insert_priv,grant_priv,account_locked from mysql.user;
+-----------+---------------+-------------+-------------+-------------+------------+----------------+
| host | user | select_priv | create_priv | insert_priv | grant_priv | account_locked |
+-----------+---------------+-------------+-------------+-------------+------------+----------------+
| localhost | root | Y | Y | Y | Y | N |
| localhost | mysql.session | N | N | N | N | Y |
| localhost | mysql.sys | N | N | N | N | Y |
| % | root | Y | Y | Y | Y | N |
| % | laravel_user | Y | Y | Y | Y | N |
+-----------+---------------+-------------+-------------+-------------+------------+----------------+
5 rows in set (0.00 sec)
Vous êtes maintenant libéré de ce sort.
Ceci termine la construction de l'environnement de Laravel + Apache + MySQL avec Docker. Personnellement, j'ai trop souvent touché le mur et ce n'était pas facile, mais je suis content parce que j'ai atteint le stade où je peux le développer pour le moment. Je voudrais élargir un peu plus cet environnement, donc j'écrirai à nouveau à ce sujet! 【Article associé】 ・ Pourquoi n'incluez-vous pas Vue.js dans le Laravel de Docker! !!
ensuite
C'est un document de référence qui a été très utile.
Recommended Posts