Home >Operation and Maintenance >Nginx >How to dynamically generate configuration through nginx+confd in docker

How to dynamically generate configuration through nginx+confd in docker

WBOY
WBOYforward
2023-05-27 13:04:241880browse

When we have more and more projects, manually going to the server to modify the nginx configuration is very troublesome and may go wrong. We can implement a set of solutions to avoid errors and reduce cumbersome processes through nginx confd Configuration Center.

First go directly to the dockerfile of 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"]

If you don’t want to generate it yourself, you can use:

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

Docker-compose is used here to demonstrate how to use nginx confd etcd etcdkeeper to graphically modify the nginx configuration

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

After startup, when /myapp is created or updated through etcdkeeper /services/web/www/1 will dynamically generate nginx configuration (port 80 forwards port 8080) and take effect automatically. The IP configured here is the intranet IP and does not use 127.0.0.1, because the service does not run on the nginx container (note that my local hosts for www.lablelan.com are set to 127.0.0.1)

How to dynamically generate configuration through nginx+confd in docker

The service running on port 8080 here is a simple demo service (nodejs). If you need it, you can get it from gitee

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

After configuring etcd, we can see that accessing http://www.lablelan.com/select has returned successfully

How to dynamically generate configuration through nginx+confd in docker

This may not be the case This does not reflect the practicality of this solution. In fact, we can realize the service discovery function by registering the current service information to etcd in the business code, so that the nginx configuration can be dynamically generated to avoid manual modification of the nginx configuration and reduce errors.

The above is the detailed content of How to dynamically generate configuration through nginx+confd in docker. For more information, please follow other related articles on the PHP Chinese website!

Statement:
This article is reproduced at:yisu.com. If there is any infringement, please contact admin@php.cn delete