Maison >Opération et maintenance >Nginx >Comment générer dynamiquement une configuration via nginx+confd dans Docker
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)
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
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!