前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >confd基本使用--Nginx配置自动化

confd基本使用--Nginx配置自动化

作者头像
lpe234
发布2020-07-27 17:27:52
2.5K0
发布2020-07-27 17:27:52
举报
文章被收录于专栏:若是烟花若是烟花

confd可监听多种数据源,并根据模板生成相应的指定的文件。

【这篇博客没啥技术含量,基本就是官方文档quick-start的翻译版】地址见简介~

简介

confd是一个轻量配置管理工具,他的主要关注点:

  • 保持本地配置文件与存储在etcd,consul,dynamodb,redis,vault,zookeeper,aws ssm parameter store 或 env vars中的数据一致(最新),并处理模板资源。
  • 重新加载应用程序以获取新的配置文件更改。

快速开始

可参见:quick-start-guide

基本参数查看:confd -h

创建配置文件目录(confdir)

代码语言:javascript
复制
sudo mkdir -p /etc/confd/{conf.d,templates}

创建模板资源配置文件

模板资源使用TOML配置,并放置在confdir下面。

/etc/confd/conf.d/myconfig.toml

代码语言:javascript
复制
[template]
src = "myconfig.conf.tmpl"
dest = "/tmp/myconfig.conf"
keys = [
    "/myapp/database/url",
    "/myapp/database/user",
]

创建模板源文件

模板源文件使用golang文本模板形式。

/etc/confd/templates/myconfig.conf.tmpl

代码语言:javascript
复制
[myconfig]
database_url = {{getv "/myapp/database/url"}}
database_user = {{getv "/myapp/database/user"}}

处理模板

confd支持两次操作模式:守护或仅一次。在守护模式下,confd会轮询后端的修改并在必要时对目的配置文件进行更新。

由于confd支持很多后端模式,当前仅示例file和redis。

file

需先创建数据源文件。

myapp.yaml

代码语言:javascript
复制
myapp:
  database:
    url: db.example.com
    user: rob

启动confd,指定后端(backend)为file, 并仅做一次同步,并且指定资源文件为myapp.yaml。

代码语言:javascript
复制
confd -onetime -backend file -f myapp.yaml
redis

需设置Redis初始化数据

代码语言:javascript
复制
redis-cli set /myapp/database/url db.example.com
redis-cli set /myapp/database/user rob

启动confd,并指定后端为redis, 并指定-interval 为2秒间隔轮询。

代码语言:javascript
复制
confd -interval 2 -backend redis -node 127.0.0.1:6379

Nginx配置示例

在这个示例中,我们将使用同一个模板来管理两个nginx配置文件。

增加keys值

etcd
代码语言:javascript
复制
etcdctl set /myapp/subdomain myapp
etcdctl set /myapp/upstream/app2 "10.0.1.100:80"
etcdctl set /myapp/upstream/app1 "10.0.1.101:80"
etcdctl set /yourapp/subdomain yourapp
etcdctl set /yourapp/upstream/app2 "10.0.1.102:80"
etcdctl set /yourapp/upstream/app1 "10.0.1.103:80"

创建模板资源

/etc/confd/conf.d/myapp-nginx.toml

代码语言:javascript
复制
[template]
prefix = "/myapp"
src = "nginx.tmpl"
dest = "/tmp/myapp.conf"
owner = "nginx"
mode = "0644"
keys = [
  "/subdomain",
  "/upstream",
]
check_cmd = "/usr/sbin/nginx -t -c {{.src}}"
reload_cmd = "/usr/sbin/service nginx reload"

/etc/confd/conf.d/yourapp-nginx.toml

代码语言:javascript
复制
[template]
prefix = "/yourapp"
src = "nginx.tmpl"
dest = "/tmp/yourapp.conf"
owner = "nginx"
mode = "0644"
keys = [
  "/subdomain",
  "/upstream",
]
check_cmd = "/usr/sbin/nginx -t -c {{.src}}"
reload_cmd = "/usr/sbin/service nginx reload"

创建资源模板

/etc/confd/templates/nginx.tmpl

代码语言:javascript
复制
upstream {{getv "/subdomain"}} {
{{range getvs "/upstream/*"}}
    server {{.}};
{{end}}
}

server {
    server_name  {{getv "/subdomain"}}.example.com;
    location / {
        proxy_pass        http://{{getv "/subdomain"}};
        proxy_redirect    off;
        proxy_set_header  Host             $host;
        proxy_set_header  X-Real-IP        $remote_addr;
        proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for;
   }
}

**Remember: **

  • check first reload last.
  • check_cmd 和 reload_cmd 算是confd提供的两个回调配置,当后端数据更新后,会先执行check,没问题的话再执行reload。

结果

  1. consul中存储的数据
代码语言:javascript
复制
➜  ~ consul kv get -recurse
myapp/database/url:db.example.com
myapp/database/user:rob
myapp/subdomain:myapp
myapp/upstream/app1:10.0.1.100:80
myapp/upstream/app2:10.0.1.101:80
yourapp/subdomain:yourapp
yourapp/upstream/app1:10.0.1.102:80
yourapp/upstream/app2:10.0.1.103:80
  1. 生成的配置文件数据

/tmp/myapp.conf

代码语言:javascript
复制
➜  /tmp cat myapp.conf
upstream myapp {

    server 10.0.1.100:80;

    server 10.0.1.101:80;

}

server {
    server_name  myapp.example.com;
    location / {
        proxy_pass        http://myapp;
        proxy_redirect    off;
        proxy_set_header  Host             $host;
        proxy_set_header  X-Real-IP        $remote_addr;
        proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for;
   }
}

延伸

后续可增加Web相关,进行可视化配置~~~

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 简介
  • 快速开始
    • 创建配置文件目录(confdir)
      • 创建模板资源配置文件
        • 创建模板源文件
          • 处理模板
            • file
            • redis
        • Nginx配置示例
          • 增加keys值
            • etcd
          • 创建模板资源
            • 创建资源模板
              • 结果
              • 延伸
              相关产品与服务
              云数据库 Redis
              腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档