Beispiel für den schnellen Aufbau einer LEMP-Umgebung mit Docker

Beispiel für den schnellen Aufbau einer LEMP-Umgebung mit Docker

LEMP (Linux + Nginx + MySQL + PHP) ist heutzutage im Grunde eine unverzichtbare Umgebung für Webentwickler. Normalerweise können wir es direkt über Systempaketverwaltungstools wie apt und yum installieren und verwenden. Aus Kompatibilitätsgründen werden die mit dem System gelieferten Softwarequellen jedoch häufig langsam aktualisiert und stagnieren nach etwa einem halben Jahr auf der vorherigen Version, was die anschließenden Tests neuer Funktionen durch die Entwickler beeinträchtigt.

Um die neueste Version zu erhalten, begannen viele Entwickler, Quellcodepakete herunterzuladen und selbst zu kompilieren, aber der Vorgang war zu umständlich und später wurden Ein-Klick-Installationspakete wie Oneinstack und lamp.sh erstellt.

Der Start von Docker kann den oben genannten Prozess erheblich vereinfachen. Auf Docker Hub gibt es viele Betreuer, die verschiedene Komponenten wie PHP und nginx in Images packen. Als Benutzer können Sie einen LEMP-Stack erstellen, indem Sie einfach die entsprechenden Images abrufen. Und die auf Docker basierenden Features bringen mindestens folgende Vorteile mit sich:

  • Schnelles Aktualisieren und jederzeitiges Zurücksetzen auf die angegebene Version
  • Containerisolierung, hohe Sicherheit
  • Keine Systemrückstände, keine Abhängigkeitskettenkonflikte

Vor zwei Monaten habe ich mit dem Aufbau des gesamten LEMP-Frameworks begonnen und bei Bedarf einige Images selbst gepflegt. Die entsprechenden Orchestrierungsvorlagen sind Open Source unter https://github.com/metowolf/docker-lemp. Derzeit laufen der gesamte Blog und die API-Site auf Docker und der Betrieb ist ziemlich stabil.

Container

Containername Version
metowolf/php 7.3.1, 7.3, 7, aktuell
metowolf/nginx 1.15.8, 1.15, 1, aktuell
mysql/mysql-server 8.0.15
phpmyadmin/phpmyadmin 4.8.5
abiosoft/caddy 0.11.2
Redis 5.0.3-alpin

Demo

Lassen Sie mich dies anhand eines einfachen Beispiels demonstrieren.

Zuerst müssen Sie die Docker- und Docker-Compose-Umgebungen installieren. Zur Vereinfachung der Demonstration verwenden wir zum Ausführen direkt den PWD-Testhost.

$ curl -fsSL https://get.docker.com -o get-docker.sh
$ sh get-docker.sh
$ curl -L "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
$ chmod +x /usr/local/bin/docker-compose

Melden Sie sich beim Server an und ziehen Sie die Orchestrierungsvorlage

$ git clone https://github.com/metowolf/docker-lemp.git
$ cd docker-lemp

Erstellen einer Konfigurationsdatei

$ cp .env.beispiel .env
$ cp docker-compose.beispiel.yml docker-compose.yml

Erstellen Sie eine Nginx-Konfiguration

$ cat > etc/nginx/config/beispiel.conf <<EOF
Server {
 hören Sie 80;
 Servername beispiel.com *.direct.labs.play-with-docker.com;

 Wurzel /var/www/example.com;
 Indexierung index.php;

 Standort / {
 try_files \$uri \$uri/ /index.php?\$query_string;
 }

 Standort ~ \.php\$ {
 fastcgi_split_path_info ^(.+\.php)(/.+)\$;
 fastcgi_pass php-fpm:9000;
 fastcgi_index index.php;
 fastcgi_params einschließen;
 fastcgi_param SCRIPT_FILENAME \$Dokumentstammsatz\$fastcgi_script_name;
 fastcgi_param PATH_INFO \$fastcgi_path_info;
 }
}
Ende der Laufzeit

Erstellen Sie eine phpinfo-Datei

$ mkdir wwwroot/beispiel.com/
$ cat > wwwroot/example.com/index.php <<EOF
<?php
phpinfo();
Ende der Laufzeit

Starten des Containers

$ docker-compose up -d php-fpm nginx mysql

Nach dem erfolgreichen Start können wir, sofern keine Unfälle geschehen, die bekannte Seite auf Port 80 sehen.

Fortgeschrittenes Gameplay

SCHNELL

Im Orchestrierungsbeispiel habe ich einen Caddy zum Reverse-Nginx hinzugefügt, um die Quic-Funktion zu erhalten. Mithilfe der Docker-Funktionen können wir Caddy nur auf Port 443 UDP lauschen lassen und Nginx weiterhin auf Port 443 TCP lauschen lassen, sodass TLSv1.3 und Quic gleichzeitig berücksichtigt werden können.

In der Nginx-Konfiguration muss ein Return-Header hinzugefügt werden, um den Browser daran zu erinnern, eine Verbindung zu quic herzustellen.

add_header alt-svc 'quic=":443"; ma=2592000; v="44,43,39"';

Brotli

Im Nginx-Container habe ich Brotli in ein dynamisches Modul kompiliert, das bei Bedarf aktiviert werden kann.

Erstellen Sie eine neue Konfigurationsdatei etc/nginx/nginx.conf

Benutzer nginx;
Arbeiterprozesse automatisch;

Fehlerprotokoll /var/log/nginx/error.log warnen;
pid /var/run/nginx.pid;

# Mounten Sie das Brotli-Modul load_module modules/ngx_http_brotli_filter_module.so;
Lademodulmodule/ngx_http_brotli_static_module.so;

Ereignisse {
 Arbeiterverbindungen 1024;
}

http {
 /etc/nginx/mime.types einschließen;
 Standardtyp Anwendung/Oktett-Stream;

 log_format main '$remote_addr - $remote_user [$time_local] "$request" '
      '$status $body_bytes_sent "$http_referer" '
      '"$http_user_agent" "$http_x_forwarded_for"';

 Zugriffsprotokoll /var/log/nginx/access.log Haupt;

 sendfile an;
 #tcp_nopush ein;

 KeepAlive-Timeout 65;

 #gzip ein;

 schließen Sie /etc/nginx/conf.d/*.conf ein;
}

Erstellen Sie eine neue Konfigurationsdatei etc/nginx/config/brotli.conf

Brotli an;
brotli_comp_level 6;
brotli_types Anwendung/x-httpd-php Anwendung/Javascript Anwendung/x-Javascript Anwendung/Xml Anwendung/JSON Text/Klartext/Javascript Text/CSS Text/XML Bild/JPEG Bild/GIF Bild/PNG Bild/SVG+Xml;

Ändern Sie docker-compose.yml, um die Konfigurationsdatei nginx.conf bereitzustellen.

---docker-compose.yml
+++ docker-compose.yml
@@ -11,6 +11,7 @@
  -php-fpm
  Bände:
  – ./log/nginx:/var/log/nginx:rw
+ - ./etc/nginx/nginx.conf:/etc/nginx/nginx.conf:rw
  - ./etc/nginx/config:/etc/nginx/conf.d:rw
  - ./etc/ssl:/etc/nginx/ssl:rw
  - ./wwwroot:/var/www:rw
@@ -65,6 +66,8 @@

Aktualisieren Sie abschließend die Container-Orchestrierung

$ docker-compose up -d --no-deps --build

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird.

Das könnte Sie auch interessieren:
  • Detaillierte Erläuterung des Aufbaus und der Verwendung des Docker Private Warehouse
  • Schritte zur Bereitstellungsmethode für Docker Stack für Webcluster
  • Detaillierte Erläuterung der Protokollverarbeitung von Docker-Containern
  • Seltsame und interessante Docker-Befehle, die Sie vielleicht nicht kennen
  • Docker erstellt MySQL-Erklärung
  • Lösung für den Fehler bei der Installation von Docker auf der CentOS-Version
  • Verwenden von Docker zum Erstellen statischer Website-Anwendungen (mehrere Möglichkeiten)
  • So stellen Sie Microservices mit Spring Boot und Docker bereit
  • So installieren Sie Docker auf Raspberry Pi
  • Docker-Container kommunizieren direkt über Routing, um Netzwerkkommunikation zu erreichen

<<:  Eine detaillierte Diskussion über MySQL-Deadlocks und -Logs

>>:  Detaillierte Erläuterung der Leistungsoptimierung für MySQL-Batch-SQL-Einfügungen

Artikel empfehlen

So installieren Sie Oracle_11g mit Docker

Installieren Sie Oracle_11g mit Docker 1. Ziehen ...

Detaillierte Erklärung der Funktionsweise der Node.js-Middleware

Inhaltsverzeichnis Was ist Express-Middleware? Vo...

Detaillierte Erklärung des Abstandsproblems zwischen IMG-Tags

Grundlegende Analyse des IMG-Tags: In HTML5 beste...

JavaScript zum Erzielen eines Digitaluhreffekts

In diesem Artikelbeispiel wird der spezifische Ja...

Detaillierte Erklärung häufig verwendeter CSS-Stile (Layout)

Kompatibel mit neuen CSS3-Eigenschaften In CSS3 k...

Perfekte Lösung für den Themenwechsel basierend auf CSS-Variablen (empfohlen)

Als Baidu diese Anforderung erhielt, fand das Unt...

Führen Sie die Schritte zum Upgrade von Nginx http auf https aus.

Der Unterschied zwischen http und https ist Bei m...

Eine "klassische" Falle der MySQL UPDATE-Anweisung

Inhaltsverzeichnis 1. Problematische SQL-Anweisun...

So ändern Sie das Passwort in MySQL 5.7.18

So ändern Sie das Passwort in MySQL 5.7.18: 1. Fa...

PageSpeed ​​Optimierung im Überblick

Ich glaube, dass das Internet zu einem immer unve...

Das Installationstutorial zu mysql5.5.28 ist super detailliert!

mysql5.5.28 Installations-Tutorial zu Ihrer Infor...