Vorwort Was ist die Rolle eines Agenten? - Praktisch für einen Server, um nur einen Port für mehrere Anwendungen zu öffnen - Zugriff auf Anwendungen ohne störende Ports, direkter Zugriff über den Domänennamen Anwendungsisolierung - Kopplung reduzieren - ... Im Allgemeinen ist es leicht zu warten und die Wartung einer Anwendung wirkt sich nicht auf andere Anwendungen aus. Wie funktioniert der Proxy (wie kommunizieren Container miteinander)? Sie können die Proxy-Funktion von nginx direkt verwenden (siehe zugehörige Funktionen separat). Das Problem hierbei ist die Kommunikation zwischen Docker-Containern. Für die Kommunikation von Docker -Containern gibt es im Wesentlichen vier Möglichkeiten: - Zugriff über Container-IP: Nach dem Neustart des Containers ändert sich die IP. - Zugriff über die IP:Port-Methode des Hostcomputers: Wenn sich die IP des Hostcomputers ändert, muss jede Anwendung geändert und der Port gebunden werden, was mühsam ist. - Verknüpfungen durch Verknüpfung herstellen: Zu viel Interdependenz ist der Wartung nicht förderlich. - Benutzerdefiniertes Netzwerk: Container im selben Bridge-Netzwerk können aufeinander zugreifen. Offensichtlich wird die benutzerdefinierte Netzwerkmethode gewählt, um verwandte Anwendungen mit demselben Netzwerk zu verknüpfen. Auf diese Weise besteht keine Abhängigkeit zwischen Anwendungen und Agenten und Agenten, was nicht nur für die Wartung, sondern auch für die Migration praktisch ist. Auch die Konfiguration ist nicht schwierig, Sie müssen lediglich die reguläre IP oder den Domänennamen durch den entsprechenden Containernamen ersetzen. 1. Einheitliches Netzwerk Sie müssen also zunächst ein gemeinsames Bridge-Netzwerk erstellen: Docker-Netzwerk, Proxy-Netzwerk erstellen # Docker-Netzwerk ls anzeigen 2. Proxy-Dienstcontainer Erstellen Sie einen Nginx-Servicecontainer speziell für Proxys mit dem Namen Proxy-Nginx, der mit Docker-Compose erstellt wird. Die endgültige Verzeichnisstruktur sieht wie folgt aus: Proxy-Nginx ├── docker-compose.yml ├── Protokolle # Protokolle│ └── error.log ├── nginx │ ├── Docker-Datei │ ├── nginx.conf │ └── startup.sh ├── sites #Konfiguration der Proxy-Site│ ├── baipiaoquan.com.conf │ └── chaohuahui.com.conf └── SSL # Zertifikatsdatei └── baipiaoquan.com.pem Einige Dateien werden im nachfolgenden laufenden Prozess generiert. Bei der Konfiguration müssen Sie nur die erforderlichen Dateien und Verzeichnisse erstellen. docker-compose.yml Version: "3" Netzwerke: Standard: extern: Name: Proxy-Netzwerk Leistungen: nginx: bauen: Kontext: ./nginx Bände: - ./logs:/var/log/nginx - ./sites:/etc/nginx/sites-available - ./ssl:/etc/nginx/ssl Häfen: - "80:80" - „443:443“ Binden Sie die externen Ports 80 und 443 an den Proxyserver, und alle Anwendungen können von hier aus zugreifen. Docker-Datei VON nginx:alpine LABEL-Betreuer="chuoke" KOPIEREN Sie nginx.conf /etc/nginx/ APK-Update ausführen && APK-Upgrade && apk add --no-cache openssl && apk add --no-cache bash AUSFÜHREN set -x; addgroup -g 82 -S www-Daten; adduser -u 82 -D -S -G www-Daten www-Daten && exit 0 ; exit 1 HINZUFÜGEN ./startup.sh /opt/startup.sh RUN sed -i 's/.//g' /opt/startup.sh CMD ["/bin/bash", "/opt/startup.sh"] AUSSETZEN 80 443 Hier erstellen wir eine laufende Benutzergruppe und Benutzer-WWW-Daten zur einfachen Konfiguration und Steuerung. Dieser Name wird in der Nginx-Konfiguration verwendet. nginx.conf Benutzer-WWW-Daten; Arbeitsprozesse 4; pid /run/nginx.pid; Daemon aus; Ereignisse { Arbeiterverbindungen 2048; multi_accept ein; verwenden Sie epoll; } http { Server-Tokens aus; sendfile an; tcp_nopush ein; tcp_nodelay ein; KeepAlive-Timeout 15; Typen_Hash_max_Größe 2048; Maximale Client-Körpergröße: 20 M; /etc/nginx/mime.types einschließen; Standardtyp Anwendung/Oktett-Stream; Zugriffsprotokoll /dev/stdout; Fehlerprotokoll /dev/stderr; gzip an; gzip_disable "msie6"; SSL-Protokolle TLSv1 TLSv1.1 TLSv1.2; SSL_CIPHERS 'ECDHE-ECDSA-CHACHA20-POLY1305: ECDHE-RSA-CHACHA20-Poly1305: ECDHE-ECDSA-AES128-GCM-SHA256: ECDHE-RSA-AES128-GCM-SHA256: ECDHE-ECDS256-RSA-AES256-GCM-SHA384: ECDHE-ECDS256-GCM-SHA384: ECDHE-ECDS256-GCM-SHA384: ECDHE-ECDS256: 384. ECDHE-ECDSA-AES256-SHA384: ECDHE-ECDSA-AES256-SHA: ECDHE-RSA-AES256-SHA: DHE-RSA-AES128-SHA256 -RSA-DES-CBC3-SHA: EDH-RSA-DES-CBC3-SHA: AES128-GCM-SHA256: AES256-GCM-SHA384: AES128-SHA256: AES256-SHA256: AES128-SHA: AES256-SHA: DES-CBC3-SHA:! DSS '; schließen Sie /etc/nginx/conf.d/*.conf ein; Fügen Sie /etc/nginx/sites-available/*.conf ein. open_file_cache off; # Deaktiviert für Problem 619 Zeichensatz UTF-8; } Kopieren Sie einfach den Standardinhalt von nginx. Was geändert werden muss, ist der aktuelle Benutzername. Beachten Sie, dass der Benutzername mit der vorherigen Einstellung übereinstimmen muss. start-up.sh #!/bin/bash # Crond im Hintergrund starten crond -l 2 -b # Starten Sie nginx im Vordergrund nginx Dies wird zum Starten des Nginx-Programms verwendet. Der Inhalt ist derzeit relativ klein, hauptsächlich um zukünftige Erweiterungen zu vereinfachen. Starten Sie den Proxy-Dienstcontainer docker-compose up -d nginx Überprüfen Sie mit docker-compose ps, ob der Start normal ist. Wenn nicht, prüfen Sie, ob in der Konfiguration Fehler vorliegen. Das war’s, lassen Sie es vorerst so und erstellen Sie eine Anwendung. 3. Anwendung hinzufügen Fügen Sie eine Site hinzu: https://baipiaoquan.com/. Konfigurieren des Anwendungscontainers Verwenden Sie zum Erstellen der Anwendung auch Docker-Compose. Dies ist ein PHP-Projekt, daher erfordert diese Anwendung mindestens zwei Servicecontainer, nginx und php-fpm. Die Projektverzeichnisstruktur ist wie folgt: baipiaoquan/ ├── docker-compose.yml ├── Protokoll │ └── nginx │ └── Fehler.log ├── nginx │ ├── Docker-Datei │ ├── Protokoll │ ├── nginx.conf │ ├── Seiten │ │ └── baipiaoquan.com.conf │ ├── SSL │ │ ├── baipiaoquan.com.key │ │ ├── baipiaoquan.com.pem │ └── startup.sh └── php-fpm ├── Docker-Datei └── php.ini docker-compose.yml Version: '3' Netzwerke: Proxy: extern: Name: ${PROXY_NETWORK_NAME} Backend: Treiber: ${NETWORKS_DRIVER} Leistungen: php-fpm: bauen: Kontext: ./php-fpm Bände: - ./php-fpm/php.ini:/usr/local/etc/php/php.ini - ${APP_CODE_PATH_HOST}:${APP_CODE_PATH_CONTAINER}${APP_CODE_CONTAINER_FLAG} Netzwerke: - Backend nginx: bauen: Kontext: ./nginx Argumente: – PHP_UPSTREAM_CONTAINER=${NGINX_PHP_UPSTREAM_CONTAINER} – PHP_UPSTREAM_PORT=${NGINX_PHP_UPSTREAM_PORT} Bände: - ${APP_CODE_PATH_HOST}:${APP_CODE_PATH_CONTAINER}${APP_CODE_CONTAINER_FLAG} - ./log:/var/log/nginx - ./sites:/etc/nginx/sites-available - ./ssl:/etc/nginx/ssl Containername: ${COMPOSE_PROJECT_NAME}_nginx hängt ab von: -php-fpm Netzwerke: - Proxy - Backend Um die Anpassung zu erleichtern, werden hier Umgebungsvariablen verwendet. Beachten Sie den Nginx-Containernamen container_name: ${COMPOSE_PROJECT_NAME}_nginx. Dieser Wert ist kritisch und wird in nachfolgenden Proxys verwendet. .env # Speicherort des Codes im Host APP_CODE_PATH_HOST=../ # Speicherort des Codes im Container APP_CODE_PATH_CONTAINER=/var/www # Dies wurde von Laradock kopiert APP_CODE_CONTAINER_FLAG=:zwischengespeichert # Wählen Sie den Speicherpfad auf dem Computer. Gilt für alle Speichersysteme DATA_PATH_HOST=~/.baipiaoquan/data ### Treiber ###################################################### # Treiber für alle Volumes VOLUMES_DRIVER=lokal # Netzwerktreiber NETWORKS_DRIVER=bridge #Proxy-Netzwerkname, dies ist das zuvor erstellte PROXY_NETWORK_NAME=Proxy-Netzwerk ### Docker-Compose-Dateien ####################################### # COMPOSE_FILE=docker-compose.yml # Ändern Sie unter Windows das Trennzeichen von : in ; COMPOSE_PATH_SEPARATOR=: # Projektname COMPOSE_PROJECT_NAME=baipiaoquan Der verwendete Proxy-Netzwerkname lautet: Proxy-Netzwerk, das zuvor erstellt wurde; Dockerfile für nginx Diese Datei kann direkt aus der vorherigen übernommen und anschließend mit den relevanten Informationen zu PHP ergänzt werden. VON nginx:alpine KOPIEREN Sie nginx.conf /etc/nginx/ APK-Update ausführen && APK-Upgrade && apk --update logrotate hinzufügen && apk add --no-cache openssl && apk hinzufügen --no-cache bash AUSFÜHREN set -x; addgroup -g 82 -S www-Daten; adduser -u 82 -D -S -G www-Daten www-Daten && exit 0 ; exit 1 ARG PHP_UPSTREAM_CONTAINER=php-fpm ARG PHP_UPSTREAM_PORT=9000 # Upstream-Konfiguration festlegen und die Standardkonfiguration entfernen RUN echo "upstream php-upstream { server ${PHP_UPSTREAM_CONTAINER}:${PHP_UPSTREAM_PORT}; }" > /etc/nginx/conf.d/upstream.conf && rm /etc/nginx/conf.d/default.conf HINZUFÜGEN ./startup.sh /opt/startup.sh RUN sed -i 's/.//g' /opt/startup.sh CMD ["/bin/bash", "/opt/startup.sh"] AUSSETZEN 80 443 Dockerfile für php-fpm VON php:7.3-fpm ARG-PUID=1000 ENV-PUID ${PUID} ARG PGID=1000 ENV-PGID ${PGID} RUN groupmod -o -g ${PGID} www-data && usermod -o -u ${PUID} -g www-Daten www-Daten EXPOSE 9000 ARBEITSVERZEICHNIS /var/www CMD ["php-fpm"] Vergessen Sie nicht die Datei php.ini. Sie können auch die Standarddatei verwenden. Anschließend müssen Sie die zugehörige Konfiguration löschen. Konfiguration des Dienstes baipiaoquan.com.conf Server { hören Sie 80 Standardserver; # Für https hören Sie 443 SSL-Standardserver; SSL-Zertifikat /etc/nginx/ssl/3243258_baipiaoquan.com.pem; SSL-Zertifikatsschlüssel /etc/nginx/ssl/3243258_baipiaoquan.com.key; SSL-Sitzungszeitüberschreitung 5 Min. SSL-Protokolle TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HOCH:!aNULL:!MD5:!RC4:!DHE; ssl_prefer_server_ciphers ein; add_header X-Frame-Optionen "SAMEORIGIN"; add_header X-XSS-Schutz "1; Modus=blockieren"; add_header X-Inhaltstyp-Optionen "nosniff"; # localhost muss Servername localhost baipiaoquan.com www.baipiaoquan.com sein; root /var/www/; # Dies entspricht der vorherigen Konfiguration index index.php index.html index.htm; Standort / { try_files $uri $uri/ /index.php$ist_args$args; } Standort ~ .php$ { versuche_dateien $uri /index.php =404; fastcgi_pass php-upstream; # Dies ist der im nginx Dockerfile konfigurierte fastcgi_index index.php; fastcgi_buffers 16 16k; fastcgi_buffer_size 32k; fastcgi_param SCRIPT_FILENAME $Dokumentstammsatz$fastcgi_script_name; #behebt Timeouts fastcgi_read_timeout 600; fastcgi_params einschließen; } Standort ~ /.ht { alles leugnen; } Standort /.well-known/acme-challenge/ { Wurzel /var/www/letsencrypt/; log_not_found aus; } } Ich habe hier alles konfiguriert, aber es kann vereinfacht werden und Sie müssen nur das konfigurieren, was Sie benötigen. Starten Sie die Anwendung An diesem Punkt können Sie den Dienst baipiaoquan.com starten. Führen Sie ihn im Verzeichnis baipiaoquan aus: docker-compose up -d nginx Wenn alles gut geht, sollte die App starten und Dienste empfangen können. Sie können es auch testen, indem Sie den Container eingeben und auf localhost zugreifen, um zu sehen, ob das Ergebnis Ihren Wünschen entspricht. Ich habe es folgendermaßen getestet: Docker-Compose-Exec Nginx Wget Localhost Sehen Sie sich dann die Größe der zurückgegebenen Daten an und bestimmen Sie je nach Situation, ob es erfolgreich ist. Docker-Netzwerk prüfen Proxy-Netzwerk Der nächste Schritt besteht darin, diese Anwendung Menschen auf der ganzen Welt zugänglich zu machen. Proxy-Konfiguration zu nginx-proxy hinzufügen Hinweis: Starten Sie zuerst die Anwendung und dann den Proxy. Andernfalls meldet nginx einen Fehler, dass der Upstream nicht gefunden werden kann. Speicherort: proxy-nginx/sites/baipiaoquan.com.conf. Kopiere einfach die obige Konfiguration und ändere ein paar Stellen. Die endgültige Konfiguration sieht dann so aus: # Meine Konfiguration unterstützt nur https. Wenn keine Anforderung besteht, ist kein Server erforderlich { hören Sie 80; Servername baipiaoquan.com www.baipiaoquan.com; gibt 301 https://$host$request_uri zurück; } Server { # Wenn es http ist, konfigurieren Sie dies. # listen 80 default_server; # Wenn es https ist, konfigurieren Sie dies: listen 443 ssl; SSL-Zertifikat /etc/nginx/ssl/3243258_baipiaoquan.com.pem; SSL-Zertifikatsschlüssel /etc/nginx/ssl/3243258_baipiaoquan.com.key; SSL-Sitzungszeitüberschreitung 5 Min. SSL-Protokolle TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HOCH:!NULL:!aNULL:!MD5:!ADH:!RC4; ssl_prefer_server_ciphers ein; Servername baipiaoquan.com www.baipiaoquan.com; add_header X-Frame-Optionen "SAMEORIGIN"; add_header X-XSS-Schutz "1; Modus=blockieren"; add_header X-Inhaltstyp-Optionen "nosniff"; Standort / { Proxy_Set_Header Host $host; Proxy_Set_Header X-Real-IP $Remote_Addr; proxy_set_header X-Weitergeleitet-Für $proxy_add_x_forwarded_for; Proxy_set_header X-Weitergeleitet-Proto $scheme; Proxy_set_header X-Weitergeleiteter Host $host; proxy_set_header X-Weiterleitungsport $server_port; proxy_pass http://baipiaoquan_nginx/; # Dieser Wert ist der Containername der Anwendung nginx} } Laden Sie die Proxyserverkonfiguration neu und führen Sie im Verzeichnis nginx-proxy Folgendes aus: # Testen Sie zuerst die Konfigurationsdatei. Dieser Schritt muss erfolgreich ausgeführt werden. docker-compose exec nginx nginx -t # Wenn die Eingabeaufforderung erfolgreich ist, laden Sie neu. Andernfalls überprüfen und ändern Sie die Konfigurationsdatei wie aufgefordert docker-compose exec nginx nginx -s reload Warten Sie einen Moment. Wenn alles gut geht, sollten jetzt Menschen auf der ganzen Welt auf diese Website https://baipiaoquan.com/ zugreifen können. Wenn Sie weitere Anwendungen hinzufügen müssen, sind Logik und Prozess identisch. Ich habe beispielsweise eine weitere Anwendung hinzugefügt: https://chaohuahui.com/, und ich kann sie anpingen und sie haben dieselbe IP. 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:
|
<<: Ein kurzes Verständnis der drei Verwendungen von Standard-SQL-Update-Anweisungen
>>: Verwenden von JavaScript-Unterschieden zum Implementieren eines Vergleichstools
Inhaltsverzeichnis 1. Einleitung 2. Die erste Met...
Arten von Verknüpfungen 1. Innerer Join: Die Feld...
Der empfohlene Code zum Abspielen von Hintergrundm...
MySQL-Volltextsuche, chinesische Lösung Kürzlich ...
In einem aktuellen Unternehmen besteht die Anford...
Schauen wir uns zunächst die Renderings an: XML/H...
Ergebnisse erzielen Schritt 1. Ursprüngliche inde...
Eine Umgebung Alibaba Cloud Server: CentOS 7.4 64...
Inhaltsverzeichnis Strukturelle Vererbung (implem...
Inhaltsverzeichnis Ist eine Echtzeitaktualisierun...
In diesem Artikelbeispiel wird der spezifische Co...
Inhaltsverzeichnis 01 Häufige Fehler 1 02 Häufige...
<br />Dieses Beispiel untersucht hauptsächli...
1. Eingebettete Softwareebene 1) Bootloader->B...
Lassen Sie mich zunächst kurz erklären, was MySQL...