Heim >Betrieb und Instandhaltung >Nginx >So generieren Sie dynamisch eine Konfiguration über nginx+confd in Docker
Wenn wir immer mehr Projekte haben, ist es sehr mühsam und kann schief gehen, manuell zum Server zu gehen, um die Nginx-Konfiguration zu ändern. Durch nginx+confd+配置中心
können wir eine Lösung implementieren, um Fehler zu vermeiden und umständliche Prozesse zu reduzieren.
Gehen Sie zuerst direkt zur Docker-Datei von nginx+confd
FROM nginx:1.21.6 # 拷贝confd二进制可执行文件 https://github.com/kelseyhightower/confd/releases/tag/v0.16.0 COPY ./confd-0.16.0-linux-amd64 /usr/local/bin/confd # 拷贝wait-for脚本 https://github.com/Eficode/wait-for COPY ./wait-for / # 安装nc支持wait-for脚本 RUN apt-get update \ && DEBIAN_FRONTEND=noninteractive apt-get install -y \ net-tools \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* RUN apt-get update \ && DEBIAN_FRONTEND=noninteractive apt-get install -y \ netcat \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* # 创建配置文件目录 RUN mkdir -p /etc/confd/conf.d \ # 给可执行权限 && chmod +x /usr/local/bin/confd \ && chmod 777 /wait-for \ # 使用脚本启动多进程 && echo "#!/bin/bash" >> start.sh \ && echo "nohup /usr/local/bin/confd -config-file /etc/confd/conf/confd.toml &" >> start.sh \ && echo "nginx -g 'daemon off;'" >> start.sh \ && chmod 664 ./start.sh CMD ["bash", "start.sh"]
Wenn Sie es nicht selbst generieren möchten, können Sie Folgendes verwenden:
https://hub.docker.com/repository/docker/lablelan/nginx-confd
Docker-compose wird hier verwendet, um die Verwendung von nginx+confd+ zu demonstrieren etcd+etcdkeeper zum grafischen Ändern der Nginx-Konfiguration#🎜🎜 #
version: '2' networks: app-tier: driver: bridge ipam: driver: default config: - subnet: 172.22.0.0/16 services: Etcd: image: 'bitnami/etcd:3.5.2' environment: - ALLOW_NONE_AUTHENTICATION=yes - ETCD_ADVERTISE_CLIENT_URLS=http://etcd:2379 ports: - 2379:2379 - 2380:2380 networks: app-tier: ipv4_address: 172.22.0.2 EtcdKeeper: image: 'deltaprojects/etcdkeeper:latest' - 8000:8080 ipv4_address: 172.22.0.3 Nginx: image: 'lablelan/nginx-confd' command: sh -c '/wait-for Etcd:2379 -- bash start.sh' depends_on: - Etcd volumes: - "./confd.toml:/etc/confd/conf/confd.toml" - "./nginx.tmpl:/etc/confd/templates/nginx.tmpl" - "./myapp-nginx.toml:/etc/confd/conf.d/myapp-nginx.toml" - "./nginx.conf:/etc/nginx/nginx.conf" - "./conf.d:/etc/nginx/conf.d" - 80:80 ipv4_address: 172.22.0.4Nach dem Start, wenn /myapp/services/web/www/1 über etcdkeeper erstellt oder aktualisiert wird, wird die Nginx-Konfiguration (Port 80 wird an Port 8080 weitergeleitet) geändert dynamisch generiert werden und automatisch wirksam werden. Die hier konfigurierte IP ist die Intranet-IP und verwendet nicht 127.0.0.1, da der Dienst nicht auf dem Nginx-Container läuft (beachten Sie, dass meine lokalen Hosts für www.lablelan.com auf 127.0.0.1 eingestellt sind)
# 🎜🎜##🎜 🎜#
Der hier auf Port 8080 ausgeführte Dienst ist ein einfacher Demodienst (nodejs). Wenn Sie ihn benötigen, können Sie ihn von gitee erhalten.
https://gitee.com/lablelan/amis-demo
Vielleicht spiegelt dies nicht die Praktikabilität dieser Lösung wider. Tatsächlich können wir die Serviceerkennungsfunktion realisieren, indem wir die aktuellen Serviceinformationen registrieren etcd im Geschäftscode, damit es dynamisch generiert werden kann. Generieren Sie die Nginx-Konfiguration, um eine manuelle Änderung der Nginx-Konfiguration zu vermeiden und Fehler zu reduzieren.Nach der Konfiguration von etcd können wir sehen, dass der Zugriff auf http://www.lablelan.com/select funktioniert hat erfolgreich zurückgegeben
#🎜🎜 #
Das obige ist der detaillierte Inhalt vonSo generieren Sie dynamisch eine Konfiguration über nginx+confd in Docker. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!