千家信息网

docker中如何通过nginx+confd动态生成配置

发表于:2025-01-18 作者:千家信息网编辑
千家信息网最后更新 2025年01月18日,小编给大家分享一下docker中如何通过nginx+confd动态生成配置,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!当我们项目越来越多时手动去服务器修改nginx配置是一件很麻烦
千家信息网最后更新 2025年01月18日docker中如何通过nginx+confd动态生成配置

小编给大家分享一下docker中如何通过nginx+confd动态生成配置,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!

当我们项目越来越多时手动去服务器修改nginx配置是一件很麻烦而且可能出错的事情。我们可以通过nginx+confd+配置中心实现一套方案避免出错并减少繁琐的流程。

首先直接上nginx+confd的dockerfile

FROM nginx:1.21.6# 拷贝confd二进制可执行文件 https://github.com/kelseyhightower/confd/releases/tag/v0.16.0COPY ./confd-0.16.0-linux-amd64 /usr/local/bin/confd# 拷贝wait-for脚本 https://github.com/Eficode/wait-forCOPY ./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"]

如果不想自己生成可以用:

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

这里使用docker-compose来演示如何使用nginx+confd+etcd+etcdkeeper通过图形化修改nginx配置

version: '2'networks:  app-tier:    driver: bridge    ipam:      driver: default      config:        - subnet: 172.22.0.0/16services:  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

启动后当通过etcdkeeper创建或更新/myapp/services/web/www/1会动态生成nginx配置(80端口转发8080端口)并自动生效。这里ip配置的是内网ip不使用127.0.0.1,因为服务并不跑在nginx容器上(注意www.lablelan.com我本地hosts设置成了127.0.0.1)

这里端口8080跑的服务是一个简单的demo服务(nodejs),需要的可以从gitee获取

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

配置完etcd后我们可以看到访问http://www.lablelan.com/select已经成功返回了

可能这样并不能体现出这个方案的实用性,其实我们可以通过在业务代码通过将当前服务信息注册到etcd实现服务发现功能,这样就可以动态地生成nginx配置从而避免手动修改nginx配置减少出错。

看完了这篇文章,相信你对"docker中如何通过nginx+confd动态生成配置"有了一定的了解,如果想了解更多相关知识,欢迎关注行业资讯频道,感谢各位的阅读!

配置 服务 生成 动态 端口 脚本 可以通过 手动 拷贝 文件 方案 篇文章 实用 成功 繁琐 业务 事情 二进制 代码 信息 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 什么是手机里面的服务器 计算机网络安全涉及哪些内容 区块链与网络安全国家重点实验室 阿里云端的服务器数据库 古籍下载软件开发 服务器带外管理接口 车载网络技术章节内容总结 铁锈战争为什么服务器是隐藏的 数据库常量是 软件开发企业 程序文件 软件开发和技术服务 工商珠海软件开发公司 公安部网络安全保卫局热线 数据库系统概念 习题数据 数据库可以装系统盘吗 软件开发由哪几部分构成的 查询数据库中id相等的数量 网络技术薪酬方案 超星数字图书馆数据库的结果分析 永恒纪元应用宝服务器 中转服务器上传文件 我眼中的网络安全400字 如何查询数据库中是否有某个表 工商珠海软件开发公司 网络安全工程师有什么用途 数据库可见性 北京服务器迁移公司虚拟主机 上海机械网络技术概念设计 农行软件开发中心成都研发部 服务器配置url不缓存
0