confd基本使用--Nginx配置自动化
时间:2022-07-22
本文章向大家介绍confd基本使用--Nginx配置自动化,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
confd可监听多种数据源,并根据模板生成相应的指定的文件。
【这篇博客没啥技术含量,基本就是官方文档quick-start的翻译版】地址见简介~
简介
confd
是一个轻量配置管理工具,他的主要关注点:
- 保持本地配置文件与存储在etcd,consul,dynamodb,redis,vault,zookeeper,aws ssm parameter store 或 env vars中的数据一致(最新),并处理模板资源。
- 重新加载应用程序以获取新的配置文件更改。
快速开始
基本参数查看:confd -h
创建配置文件目录(confdir)
sudo mkdir -p /etc/confd/{conf.d,templates}
创建模板资源配置文件
模板资源使用TOML
配置,并放置在confdir
下面。
/etc/confd/conf.d/myconfig.toml
[template]
src = "myconfig.conf.tmpl"
dest = "/tmp/myconfig.conf"
keys = [
"/myapp/database/url",
"/myapp/database/user",
]
创建模板源文件
模板源文件使用golang文本模板形式。
/etc/confd/templates/myconfig.conf.tmpl
[myconfig]
database_url = {{getv "/myapp/database/url"}}
database_user = {{getv "/myapp/database/user"}}
处理模板
confd支持两次操作模式:守护或仅一次。在守护模式下,confd会轮询后端的修改并在必要时对目的配置文件进行更新。
由于confd支持很多后端模式,当前仅示例file和redis。
file
需先创建数据源文件。
myapp.yaml
myapp:
database:
url: db.example.com
user: rob
启动confd,指定后端(backend)为file, 并仅做一次同步,并且指定资源文件为myapp.yaml。
confd -onetime -backend file -f myapp.yaml
redis
需设置Redis初始化数据
redis-cli set /myapp/database/url db.example.com
redis-cli set /myapp/database/user rob
启动confd,并指定后端为redis, 并指定-interval 为2秒间隔轮询。
confd -interval 2 -backend redis -node 127.0.0.1:6379
Nginx配置示例
在这个示例中,我们将使用同一个模板来管理两个nginx配置文件。
增加keys值
etcd
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
[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
[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
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。
结果
- consul中存储的数据
➜ ~ 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
- 生成的配置文件数据
/tmp/myapp.conf
➜ /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相关,进行可视化配置~~~
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法