Dieses Mal möchte ich Docker verwenden, um eine ** Laravel + Apache + MySQL-Entwicklungsumgebung ** zu erstellen. Da sich das Team einschließlich der Programmierer für Anfänger individuell entwickelt, besteht die Richtlinie darin, einfache Einführungsmethoden und -verfahren anzuwenden, die visuell leicht zu verstehen sind.
Lassen Sie uns sofort Docker vorstellen, das das Hauptthema ist.
Sie müssen eine Virtualisierungsfunktion namens Hyper-v aktivieren, bevor Sie Docker installieren. Diese Funktion scheint nur in der Windows Pro-Serie eingeführt zu sein. In anderen Fällen ist es erforderlich, andere Virtualisierungstechnologien wie VirtualBox einzuführen.
** ① Geben Sie im Abschnitt "Hier eingeben, um zu suchen" rechts neben der Windows-Schaltfläche "Windows-Funktionen aktivieren oder deaktivieren" ein. **
** ② Der Einstellungsbildschirm gemäß Suchbegriff wird angezeigt **
** ③ Finde den Gegenstand Hyper-v darin und überprüfe ihn **
Jetzt können Sie installieren
Wenn Sie hauptsächlich Ihren eigenen PC verwenden, können Sie ihn möglicherweise nicht überprüfen. Wenn Sie ihn überprüfen, müssen Sie anscheinend die Funktion selbst über den BIOS-Bildschirm aktivieren. Wenn dasselbe passiert, suchen Sie nach "Mazabos Herstellername" BIOS Hyper-v "und Sie finden einen Artikel darüber, wie Sie es aktivieren können. Ich bin übrigens ein GIGABYTE Mazabo, daher war der folgende Artikel hilfreich.
Bitte laden Sie das für Ihre Umgebung geeignete Installationsprogramm über den folgenden Link herunter
Befolgen Sie nach dem Herunterladen die Schritte zur Installation, ohne darüber nachzudenken. Es wird einen Bildschirm geben, auf dem Sie etwas auswählen können, aber im Grunde müssen Sie sich mit nichts anlegen.
Es wird nach Abschluss der Installation neu gestartet. Schließen Sie daher alle anderen geöffneten Apps usw.
Führen Sie den folgenden Befehl über das Terminal unter Mac oder die Eingabeaufforderung unter Windows aus.
docker -v
Wenn nach der Ausführung die folgende Version angezeigt wird, ist die Installation abgeschlossen.
PS C:\Users\Kohei Takahashi> docker -v
Docker version 19.03.13, build 4484c46d9d
Der Fehler, den ich bekam, war nicht genau der gleiche wie meiner, aber in meinem Fall bekam ich den Fehler "Ich habe keinen Linux-Kernel". Wenn der Link mit der Fehlermeldung angezeigt wird, können Sie grundsätzlich zum Link springen und die Lösung wird sorgfältig beschrieben. Fahren Sie daher so fort, wie sie ist.
Docker hat das Konzept von Containern, und Docker Compose ist ein Tool, mit dem diese Container einfach zu handhaben sind. Wie installiert man
Der obige Artikel ist leicht zu verstehen.
Dieses Mal werden wir, wie oben erwähnt, die Umgebung von Laravel (PHP) + Apache + MySQL vorbereiten! Wenn Sie ein Team aufbauen, kann eine Person die Arbeit von hier aus erledigen, und die anderen können zu "Docker starten" springen. Es scheint, dass es keine Einschränkungen für die Ordnerstruktur gibt, aber die Struktur entspricht Referenz. Erstellen Sie einen Ordner / eine Datei in Ihrem Lieblingsverzeichnis mit der folgenden Konfiguration.
├── docker/
│ ├── app/
│ │ ├ Dockerfile
│ │ ├ php.ini #Datei für PHP-Einstellungen
│ │ └ 000-default.conf #Apache-Konfigurationsdatei
│ └── db/
│ ├ data/ #Verzeichnis zum Speichern von MySQL-Daten
│ └ my.cnf #MySQL-Konfigurationsdatei
│
├── src/ #Verzeichnis zum Speichern von Laravel-Quellen
└── docker-compose.yml
Sehr hübsch.
Als nächstes werden wir die Einstellungsdateien, die wir gerade vorbereitet haben, zum Leben erwecken.
Dockerfile Lassen Sie uns zuerst die Docker-Datei zum Leben erwecken.
#Welche Art von Docker-Image soll zum Erstellen verwendet werden?
FROM php:7.4-apache
#Laden Sie die Konfigurationsdatei in PHP und Apache im Docker-Container
ADD php.ini /usr/local/etc/php/
ADD 000-default.conf /etc/apache2/sites-enabled/
#Composer installieren
RUN cd /usr/bin && curl -s http://getcomposer.org/installer | php && ln -s /usr/bin/composer.phar /usr/bin/composer
#Middleware-Installation
RUN apt-get update \
&& apt-get install -y \
git \
zip \
unzip \
vim \
libpng-dev \
libpq-dev \
&& docker-php-ext-install pdo_mysql
#Aktivieren Sie das von Laravel benötigte modRewrite
RUN mv /etc/apache2/mods-available/rewrite.load /etc/apache2/mods-enabled
RUN /bin/sh -c a2enmod rewrite
Dies ist auch ein rundes Paket von Referenz. Es scheint, dass diese Befehle in der Reihenfolge von oben ausgeführt werden.
000-default.conf Dann erwecken Sie die Apache-Konfigurationsdatei zum Leben.
<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>
Geben Sie für die hier angezeigte "Laravel-App" den Namen der Laravel-App ein, die Sie erstellen möchten.
php.ini Als nächstes kommt php.ini
[Date]
date.timezone = "Asia/Tokyo"
[mbstring]
mbstring.internal_encoding = "UTF-8"
mbstring.language = "Japanese"
Sie können dies ohne Erklärung verstehen, aber es definiert den Zeichencode und die Tatsache, dass "ich Japaner bin, also habe ich es mit Japan zu tun."
my.cnf Die letzte Konfigurationsdatei ist my.cnf
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
[client]
default-character-set=utf8mb4
Dies ist hauptsächlich die Zeichencodeeinstellung.
Als ich die Verzeichnisstruktur früher schrieb, gab es "App-Verzeichnis" und "DB-Verzeichnis" direkt unter Docker, aber sie sind Container ") Wurde klar unterschieden, um sie zu trennen. Wir erstellen einen App-Container und einen DB-Container, und es gibt einen Docker Compose, der sie einfach verwalten kann. Die Docker Compose-Konfigurationsdatei lautet docker-compose.yml. Schreiben Sie Folgendes in docker-compose.yml.
#Verfassen Sie die Dateiversionsspezifikation
version: '3'
#Welche Art von Container zu starten
services:
#Container für Laravel
app:
#Welcher Port soll geöffnet und verbunden werden? Im Folgenden wird Port 80 des Containers geöffnet und eine Verbindung zu Port 8000 des Hosts hergestellt
ports:
- "8000:80"
#Geben Sie an, dass ein Container mit der zuvor erstellten Docker-Datei erstellt werden soll
build: ./docker/app
#Geben Sie den Namen des Containers an
container_name: laravel_app
#Geben Sie an, wo die Container- und Hostverzeichnisse synchronisiert werden sollen. Wohin die Laravel-Quelle gehen wird
volumes:
- ./src:/var/www/html
#Container, in dem MySQL ausgeführt wird
db:
#MySQL 5 von Docker Hub.Bezeichnung zum Herunterladen des offiziellen Bildes von 7
image: mysql:5.7
container_name: laravel_db
#Geben Sie die Umgebungsvariable im Container an. Wenn Sie eine Umgebungsvariable übergeben, wird zum Zeitpunkt der Erstellung ein Docker-Image festgelegt. Überprüfen Sie es daher auf der Docker Hub-Site, wenn Sie es verwenden.
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: laravel_db
MYSQL_USER: laravel_user
MYSQL_PASSWORD: laravel_pass
TZ: 'Asia/Tokyo'
#Befehl beim Start
command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
#Verzeichnissynchronisation. Synchronisieren Sie den Speicherort, an dem die Konfigurationsdatei und die MySQL-Daten gespeichert werden. Selbst wenn der Container beim Start geändert wird, gehen die Daten grundsätzlich verloren, wenn der Container selbst stoppt. Daher muss das, was Sie speichern möchten, mit dem Hostcomputer synchronisiert werden.
volumes:
- ./docker/db/data:/var/lib/mysql
- ./docker/db/my.cnf:/etc/mysql/conf.d/my.cnf
ports:
- 3306:330
Damit sind die Einstellungsdateien abgeschlossen. Starten wir Docker!
Wenn Sie den folgenden Befehl ausführen, wird der Inhalt der zuvor beschriebenen Datei docker-compose.yml zu einem Container.
docker-compose build
Als nächstes starten wir den Container mit dem folgenden Befehl
docker-compose up
Dies wird es starten. Wenn Sie jedoch mit dem obigen Befehl starten, wird das Protokoll immer angezeigt, da es nicht im Hintergrund ausgeführt wird. Es ist ärgerlich, also führen Sie im Grunde den folgenden Befehl aus, um es zu starten.
docker-compose up -d
Es wird jetzt im Hintergrund ausgeführt.
Übrigens, wenn Sie es fallen lassen wollen
docker-compose down
Es wird fallen.
Als nächstes erstellen wir tatsächlich ein Laravel-Projekt im Container!
Geben Sie die Shell des zuvor erstellten App-Containers mit dem folgenden Befehl ein
docker exec -it laravel_app bash
Erstellen Sie ein Projekt, indem Sie die folgenden bekannten Befehle am Ziel eingeben
composer create-project "laravel/laravel=~6.0" --prefer-dist laravelapp
Geben Sie den Namen des Projekts, das Sie entwickeln möchten, in den Teil mit der Bezeichnung "Laravel App" ein.
Warten Sie nach dem Ausführen eine Weile, bis das Projekt erstellt wurde!
Ich habe Folgendes in docker-compose.yml geschrieben.
Auszug aus den Einstellungen des App-Containers
services:
app:
ports:
- "8000:80" #Wichtig hier
build: ./docker/app
container_name: laravel_app
volumes:
- ./src:/var/www/html
In der Beschreibung des App-Containers habe ich eine Eigenschaft namens "ports" festgelegt. Dies ist ein Port, wie der Name schon sagt. Wenn Sie den Docker-Container starten, können Sie das Laravel-Projekt anzeigen, das unter der folgenden URL erstellt wurde. Ich kann es schaffen
http://localhost:8000
Wenn Sie dies bestätigen können, können Sie vorerst ein Laravel-Projekt auf Docker erstellen.
Als ich zum ersten Mal darauf zugegriffen habe, wurde mir so etwas gesagt
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
Nach der Untersuchung scheint der Apache-Benutzer keine Schreibberechtigung für die Laravel-Protokolldatei zu haben, sodass das Schreiben in das Protokoll nicht möglich ist und eine Ausnahme auftritt.
chmod -R 777 /var/www/html/laravel_app/storage
Ich konnte es mit dem obigen Befehl lösen, aber es gefällt mir nicht. Nachdem ich einige Stunden gesucht hatte, fand ich diesen Artikel Als ich versuchte, das Verfahren sofort zu befolgen, wurde es wunderbar angezeigt. Ich frage mich ein wenig, ob dieses Benutzerrecht gut ist, aber ich denke, es liegt im Bereich ohne Probleme.
Als ich den Handwerkerbefehl drückte, wurde der folgende Fehler angezeigt
Failed to clear cache. Make sure you have the appropriate permissions.
Überprüfen Sie in diesem Fall die unten stehende Ordnerstruktur.
├─app #Diesmal wahrscheinlich nicht relevant
│ └─public
├─framework
│ ├─cache
│ │ └─data
│ ├─sessions
│ └─views
└─logs #Diesmal wahrscheinlich nicht relevant
Stimmt etwas mit dem Verfahren nicht oder ist es überhaupt nicht möglich, es zu erstellen? Der Grund ist nicht klar, aber der Inhalt des obigen Ordners "Framework" war nicht vollständig. Ich habe das Gefühl, dass es überhaupt keinen Ordner namens Framework gab. Vielleicht habe ich nichts gemacht, was ich machen konnte, weil ich keine Schreibgenehmigung hatte. In meiner Umgebung führten mich diese Lösungen zur Begrüßungsseite.
Schließlich ist es die DB-Einstellung. Diese Einstellungen sind in einer Datei namens .env organisiert. Bitte ändern Sie wie folgt.
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
Wie Sie vielleicht wissen, ist dies der Wert, der als "Umgebung" des Datenbankcontainers in docker-compose.yml festgelegt wurde. Eine Datenbank wird auch beim Start erstellt. Lassen Sie uns also nach dem Festlegen tatsächlich migrieren.
Geben Sie die Shell des App-Containers wie zuvor ein. Link Start! !! Purururururune! !! (SAO-Stil)
docker exec -it laravel_app bash
Sie befinden sich jetzt in / var / www / html. Wenn Sie ls hier ausführen, können Sie sehen, dass sich laravel_app direkt darunter befindet.
cd laravel_app # laravel_Gehe zur App
php artisan migrate #Führen Sie die Migration aus
Wenn das folgende Protokoll nach Ausführung des obigen Befehls angezeigt wird, ist die Migration erfolgreich. Man kann sagen, dass der Umgebungsbau einmal abgeschlossen wurde.
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)
Diesmal handelt es sich um eine Migration, indem die Verbindung überprüft wird. In meinem Fall werde ich sie danach wiederherstellen.
php artisan migrate:refresh
Dadurch kehren Sie vor der Migration in den Status zurück.
Oben sieht es so aus, als wäre es reibungslos fertig, aber das ist natürlich nicht der Fall, und ich bin auch hier für einen Moment festgefahren. Der Grund ist, dass ich einen Fehler beim Verweigern des Zugriffs erhalten habe, wenn PHP Artisan migriert.
Fehlermeldung
root@xxxxxxxxxxxx:/var/www/html/laravel_app# php artisan migrate #Führen Sie migrate aus
Illuminate\Database\QueryException : SQLSTATE[HY000] [1045] Access denied for user 'laravel_user'@'172.21.0.3'
Warum? Ich habe mir tatsächlich den Inhalt von MySQL angesehen In diesem Fall verlassen Sie einmal den App-Container
docker exec it laravel_db mysql -u root -p
Enter password: #Wahrscheinlich OK, indem Sie root eingeben
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>
Sie können sich jetzt als Root-Benutzer bei mysql anmelden. Danach werde ich die vorhandenen Benutzer sehen.
mysql> select user from mysql.user;
Dann wurde in meinem Fall der Benutzer von laravel_db nicht erstellt. (Vielleicht ist es natürlich w)
db:
image: mysql:5.7
container_name: laravel_db
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: laravel_db
MYSQL_USER: laravel_user #Dieser Benutzer existierte nicht
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
Wenn ja, können Sie die .env-Datei als Benutzer ändern, der immer root verwendet, aber ich möchte den Benutzer laravel_user verwenden, und die Verwendung von root würde normalerweise aus religiösen Gründen zur Todesstrafe führen.
Erstellen Sie jetzt einen laravel_user mit den gleichen Berechtigungen wie root! (Weiße Augen)
Ja, dann habe ich das Gefühl, dass ich root verwenden kann, aber bitte bleiben Sie in Kontakt.
mysql> CREATE USER 'laravel_user'@'%' IDENTIFIED BY 'laravel_pass';
Mit den obigen CREATE-Minuten wird ein laravel_user erstellt. Geben Sie ihm jetzt die gleichen Berechtigungen wie 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;
Gewähren Sie laravel_user mit dieser frechen Anweisung Berechtigungen. Stellen Sie sicher, dass Sie wirklich die gleichen Berechtigungen wie root haben.
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)
Sie sind jetzt frei von diesem Zauber.
Damit ist die Umgebungskonstruktion von Laravel + Apache + MySQL mit Docker abgeschlossen. Persönlich bin ich zu oft gegen die Wand gestoßen und es war nicht glatt, aber ich bin glücklich, weil ich das Stadium erreicht habe, in dem ich es vorerst entwickeln kann. Ich möchte diese Umgebung noch etwas erweitern, also werde ich noch einmal darüber schreiben! 【Verwandter Artikel】 ・ Warum nehmen Sie Vue.js nicht in Docker's Laravel auf? !!
Dann
Es ist ein Referenzmaterial, das sehr hilfreich war.