Heim >Betrieb und Instandhaltung >Nginx >So generieren Sie dynamisch eine Konfiguration über nginx+confd in Docker

So generieren Sie dynamisch eine Konfiguration über nginx+confd in Docker

WBOY
WBOYnach vorne
2023-05-27 13:04:241880Durchsuche

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.4

Nach 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.So generieren Sie dynamisch eine Konfiguration über nginx+confd in Docker

https://gitee.com/lablelan/amis-demo

Nach der Konfiguration von etcd können wir sehen, dass der Zugriff auf http://www.lablelan.com/select funktioniert hat erfolgreich zurückgegeben

#🎜🎜 #

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.

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen