Maison >Opération et maintenance >Nginx >Comment générer dynamiquement une configuration via nginx+confd dans Docker

Comment générer dynamiquement une configuration via nginx+confd dans Docker

WBOY
WBOYavant
2023-05-27 13:04:241876parcourir

Lorsque nous avons de plus en plus de projets, accéder manuellement au serveur pour modifier la configuration de nginx est très gênant et peut mal tourner. Nous pouvons mettre en œuvre une solution pour éviter les erreurs et réduire les processus fastidieux grâce à nginx+confd+配置中心.

Tout d'abord, chargez directement le fichier docker de 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"]

Si vous ne souhaitez pas le générer vous-même, vous pouvez utiliser :

https://hub.docker.com/repository/docker/lablelan/nginx -confd

Utilisez docker-compose ici Pour montrer comment utiliser nginx+confd+etcd+etcdkeeper pour modifier graphiquement la configuration nginx

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

Après le démarrage, lorsque /myapp/services/web/www/1 est créé ou mis à jour via etcdkeeper, la configuration nginx sera générée dynamiquement (le port 80 transmet le port 8080) et prendra effet automatiquement. L'adresse IP configurée ici est l'adresse IP de l'intranet et n'utilise pas 127.0.0.1, car le service ne s'exécute pas sur le conteneur nginx (notez que mes hôtes locaux pour www.lablelan.com sont définis sur 127.0.0.1)

Comment générer dynamiquement une configuration via nginx+confd dans Docker

Le port 8080 fonctionne ici Le service est un simple service de démonstration (nodejs) Si vous en avez besoin, vous pouvez l'obtenir depuis gitee

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

Après avoir configuré etcd. , nous pouvons voir que l'accès http://www .lablelan.com/select a été renvoyé avec succès

Comment générer dynamiquement une configuration via nginx+confd dans Docker

Peut-être que cela ne reflète pas le côté pratique de cette solution. En fait, nous pouvons réaliser la fonction de découverte de service en enregistrant le. informations de service actuelles sur etcd dans le code métier, afin de générer dynamiquement la configuration nginx pour éviter la modification manuelle de la configuration nginx et réduire les erreurs.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer