프로젝트가 점점 더 많아지면 nginx 구성을 수정하기 위해 수동으로 서버로 이동하는 것은 매우 번거롭고 문제가 발생할 수 있습니다. nginx+confd+配置中心
를 통해 오류를 방지하고 번거로운 프로세스를 줄이는 솔루션을 구현할 수 있습니다.
먼저 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"]
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
https://hub.docker.com/repository/docker/lablelan/nginx -confd여기에서 docker-compose를 사용하십시오. nginx+confd+etcd+etcdkeeper를 사용하여 nginx 구성을 그래픽으로 수정하는 방법을 보여주기 위해
rrreee
시작 후 /myapp/services/web/www/1이 다음을 통해 생성되거나 업데이트될 때 etcdkeeper를 사용하면 nginx 구성이 동적으로 생성되고(포트 80이 포트 8080을 전달) 자동으로 적용됩니다. 여기에 구성된 IP는 인트라넷 IP이며 127.0.0.1을 사용하지 않습니다. 서비스가 nginx 컨테이너에서 실행되지 않기 때문입니다(www.lablelan.com의 로컬 호스트는 127.0.0.1로 설정되어 있습니다) 여기서는 포트 8080이 실행되고 있습니다. 서비스는 간단한 데모 서비스(nodejs)로, 필요하신 분은 giteehttps://gitee.com/lablelan/amis-demoetcd 설정 후 받으시면 됩니다. , 접속 http://www .lablelan.com/select 가 성공적으로 반환된 것을 볼 수 있습니다 아마도 이는 이 솔루션의 실용성을 반영하지 않을 수도 있습니다. 실제로는 현재 서비스 정보를 비즈니스 코드의 etcd에 추가하여 nginx 구성을 동적으로 생성하여 nginx 구성을 수동으로 수정하지 않고 오류를 줄입니다. 🎜
위 내용은 Docker에서 nginx+confd를 통해 구성을 동적으로 생성하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!