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:
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
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:
|
<<: Eine detaillierte Diskussion über MySQL-Deadlocks und -Logs
>>: Detaillierte Erläuterung der Leistungsoptimierung für MySQL-Batch-SQL-Einfügungen
Beispiele: Über den PHP-Hintergrundcode können Si...
Installieren Sie Oracle_11g mit Docker 1. Ziehen ...
Inhaltsverzeichnis Was ist Express-Middleware? Vo...
Ich habe kürzlich MySQL 5.6 bereitgestellt und fe...
Grundlegende Analyse des IMG-Tags: In HTML5 beste...
In diesem Artikelbeispiel wird der spezifische Ja...
Kompatibel mit neuen CSS3-Eigenschaften In CSS3 k...
@Font-face grundlegende Einführung: @font-face ist...
Als Baidu diese Anforderung erhielt, fand das Unt...
Der Unterschied zwischen http und https ist Bei m...
Inhaltsverzeichnis 1. Problematische SQL-Anweisun...
So ändern Sie das Passwort in MySQL 5.7.18: 1. Fa...
Ich glaube, dass das Internet zu einem immer unve...
CEP – Komplexe Ereignisverarbeitung. Die Zahlung ...
mysql5.5.28 Installations-Tutorial zu Ihrer Infor...