管理服务配置
概要⌗
如果你的业务中希望通过WebUI或API的方式,来动态修改服务的配置文件,那么你可以使用confd来实现。其后端支持的数据类型有:
- etcd
- consul
- vault
- environment variables
- redis
- zookeeper
- dynamodb
- stackengine
- rancher
这样我们就可以将配置存储在分布式的Key/Value中,修改配置不在需要SSH到远端。这里我们所采用的是consul 作为后端存储,因为有配套的UI所以对于实践来说比较方便。
Consul⌗
docker run -d \
-p 8500:8500 \
--name consul-master \
consul agent -node=master -datacenter=betterde -bind=0.0.0.0 \
-ui -client=0.0.0.0 -server -bootstrap-expect=1
运行成功后可以访问http://localhost:8500,验证服务是否正常运行。
curl -X PUT -d 'api.betterde.om' http://localhost:8500/v1/kv/nginx/api/domain
confd⌗
创建配置文件目录⌗
sudo mkdir -p /etc/confd/{conf.d,templates}
创建资源模板⌗
touch /etc/confd/conf.d/nginx.toml
[template]
src = "nginx.conf.tmpl"
dest = "/tmp/nginx.conf"
keys = [
"/nginx/api/domain",
]
check_cmd = "/usr/local/opt/nginx/bin/nginx -t -c {{.src}}"
reload_cmd = "/usr/local/opt/nginx/bin/nginx -s reload"
- src:服务配置的模板文件
- dest:confd生成的配置文件目录
- keys:自定义的键
- check_cmd:配置检查的命令,需要服务支持(可选项)
- reload_cmd:重载配置的命令,需要服务支持(可选项)
创建配置模板⌗
touch /etc/confd/templates/nginx.conf.tmpl
user zuber-imac staff;
worker_processes auto;
events {
worker_connections 1024;
}
http {
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
client_max_body_size 128M;
gzip on;
gzip_comp_level 5;
gzip_min_length 256;
gzip_proxied any;
gzip_vary on;
ssi on;
gzip_types
application/atom+xml
application/javascript
application/json
application/rss+xml
application/vnd.ms-fontobject
application/x-font-ttf
application/x-web-app-manifest+json
application/xhtml+xml
application/xml
font/opentype
image/svg+xml
image/x-icon
text/css
text/plain
text/x-component;
server {
listen 80;
server_name {{getv "/nginx/api/domain"}};
root /var/www/html;
location / {
index index.html;
}
}
}
运行 confd⌗
./confd -watch -backend consul -node localhost:8500
此时去修改 /nginx/api/domain 的值,将会自动重新生成nginx配置文件到 /tmp/nginx.conf,并更新nginx的配置。
I hope this is helpful, Happy hacking…