首页 > 系统相关 >使用Etcd+Confd实现Nginx配置文件自动管理

使用Etcd+Confd实现Nginx配置文件自动管理

时间:2022-10-17 20:07:19浏览次数:37  
标签:配置文件 sit gametype nginx Nginx game Etcd fg data

安装 etcd

#yum安装
yum install etcd -y
#更新
https://github.com/coreos/etcd/releases
替换掉etcd和etcdctl
sed -i 's/localhost/0.0.0.0/g' /etc/etcd/etcd.conf
systemctl start etcd && systemctl enable etcd

etcdctl的使用(使用V3的api)

etcdctl get / --prefix --keys-only|grep "斗地主-NEW"|xargs -i etcdctl del {} #批量删除
export ETCDCTL_API=3
etcdctl put mykey "this is awesome" #设置
etcdctl get mykey #获取
etcdctl del mykey #删除
etcdctl get "" --from-key #获取所有的键值
etcdctl get "" --from-key --keys-only #只获取所有的key不含value
etcdctl get "" --from-key --keys-only --limit 3 #获取key只显示3个
etcdctl get --prefix my #获取所有以my开头的key及对应value
etcdctl del my --prefix #删除所有以my开头的键值

etcd for python

pip install etcd3
import etcd3
etcd = etcd3.client()
etcd.get('foo')
etcd.put('bar', 'doot')
etcd.delete('bar')

安装confd

https://github.com/kelseyhightower/confd/releases
cp confd-0.16.0-linux-amd64 /usr/bin/confd
chmod 755 /usr/bin/confd
# mkdir -p /etc/confd/{conf.d,templates}
conf.d #资源模板,下面文件必须以toml后缀
templates #配置文件模板,下面文件必须以tmpl后缀
cat fg_sit.conf.toml 
[template]
src = "fg_sit.conf.tmpl"
dest = "/etc/nginx/sit/allGame_fg_sit.conf"
keys = [
"/nginx/chess/fg_sit",
"/nginx/hunter/fg_sit",
"/nginx/swf/fg_sit",
]
reload_cmd ="/usr/sbin/service nginx restart"
cat fg_sit.conf.tmpl 
#############chess#############
{{range $game := lsdir "/nginx/chess/fg_sit/"}}
{{range $gametype := ls (printf "/nginx/chess/fg_sit/%s" $game)}}
## 游戏类型:{{.}} 游戏名称:{{$game}}
{{with getv (printf "/nginx/chess/fg_sit/%s/%s" $game $gametype)}}
{{$data := json .}}
upstream {{$gametype}} {
server {{$data.sip}}:{{$data.sport}};
}
server
{
listen {{$data.nport}} ssl;{{ $pre := split $data.ndomain "." }}
server_name {{$data.ndomain}} ~^({{index $pre 0}}-.*).xxxxxxxx.cn$;
set $proxy_add {{$gametype}};
include proxy-sit-wss.conf;
}
{{end}}{{end}}{{end}}
#############hunter#############
{{range $game := lsdir "/nginx/hunter/fg_sit/"}}
{{range $gametype := ls (printf "/nginx/hunter/fg_sit/%s" $game)}}
## 游戏类型:{{.}} 游戏名称:{{$game}}
{{with getv (printf "/nginx/hunter/fg_sit/%s/%s" $game $gametype)}}
{{$data := json .}}
upstream {{$gametype}} {
server {{$data.sip}}:{{$data.sport}};
}
server
{
listen {{$data.nport}} ssl;{{ $pre := split $data.ndomain "." }}
server_name {{$data.ndomain}} ~^({{index $pre 0}}-.*).xxxxxxxx.cn$;
set $proxy_add {{$gametype}};
include proxy-sit-wss.conf;
}
{{end}}{{end}}{{end}}
#############swf#############
{{range $game := lsdir "/nginx/swf/fg_sit/"}}
{{range $gametype := ls (printf "/nginx/swf/fg_sit/%s" $game)}}
## 游戏类型:{{.}} 游戏名称:{{$game}}
{{with getv (printf "/nginx/swf/fg_sit/%s/%s" $game $gametype)}}
{{$data := json .}}
upstream {{$gametype}} {
server {{$data.sip}}:{{$data.sport}};
}
server
{
listen {{$data.nport}} ssl;{{ $pre := split $data.ndomain "." }}
server_name {{$data.ndomain}} ~^({{index $pre 0}}-.*).xxxxxxxx.cn$;
set $proxy_add {{$gametype}};
include proxy-sit-wss.conf;
}
{{end}}{{end}}{{end}}

运行

confd -onetime -backend etcdv3 -node http://127.0.0.1:2379
confd -watch -backend etcdv3 -node http://127.0.0.1:2379
confd -interval 60 -backend etcdv3 -node http://127.0.0.1:2379

confd模板文件配置说明

  1. 模板内内嵌的语法支持,全部需要加{{}}来标记。
  2. 在模板文件内, . 代表了当前变量,即在非循环体内,.就代表了传入的那个变量。
  3. 模板内的变量定义方法:​​{{$variable := value}},例如{{$username := "jhon"}}​
1. 假设我们定义了一个结构体:

type Article struct {
ArticleId int
ArticleContent string

那么我们在模板内可以通过.ArticleContent和.ArticleId的方式来获取并把变量的内容渲染到模板内。

{{.ArticleContent}}{{.ArticleId}}

2. with语句创建一个封闭的作用域,在其范围内,可以使用.action,而与外面的.无关,只与with的参数有关:

{{ with arg }}
此时的点 . 就是arg
{{ end }}

3. 循环依靠range语句

{{range gets "/services/zookeeper/*"}}
{{$data := json .Value}}
id: {{$data.Id}}
ip: {{$data.IP}}
{{end}}

4. 如果取回的值是json格式的,可以创建一个map
例如: etcdctl set /myapp/upstream/app1 '{"IP": "99.99.99.99","NAME": "jhon"}'

{{with get "/myapp/upstream/app1"}}
key: {{base .Key}}
{{$data := json .Value}}
Ipaddress: {{$data.IP}} Username: {{$data.NAME}}
{{end}}

5. confd一些常用的函数
get 返回匹配的“键-值”对
gets 返回所有匹配的“键-值”对

getv 返回匹配“键”的“值”
getvs 返回所有匹配“键”的“值”

ls 返回指定路径下的所有子键
lsdir 返回指定路径下所有具有子目录的子键
dir 返回指定“键”的父目录
exist 检查指定的“键”是否存在
base 返回路径的最后一个元素

另有一些go函数的别名,具体用法看文档
join
split
replace
toUpper
toLower
getenv
datatime



标签:配置文件,sit,gametype,nginx,Nginx,game,Etcd,fg,data
From: https://blog.51cto.com/starsliao/5764124

相关文章

  • Nginx安装与各类配置集合
    安装vi/etc/yum.repos.d/nginx.repo#Stableversion[nginx]name=nginxrepobaseurl=http://nginx.org/packages/centos/7/$basearch/gpgcheck=0enabled=1#Mainlineversion......
  • Nginx集成LDAP统一认证
    编译安装nginxgitclonehttps://github.com/kvspb/nginx-auth-ldap.gitwgethttp://nginx.org/download/nginx-1.18.0.tar.gzyum-yinstallopenldap-develpcre-develop......
  • 小破站最好的Nginx保姆级入门教程,全面掌握Nginx核心技术!
    尚硅谷2022版Nginx教程 https://www.bilibili.com/video/BV1Y341137Kq/?spm_id_from=333.337.search-card.all.click&vd_source=4a69745b599dffec877b0fcfe130b092https......
  • 采用Ingress暴露容器化应用(Nginx)
    1.部署容器化应用[root@k8smaster~]#kubectlcreatedeploymentnginx--image=nginxdeployment.apps/nginxcreated2.暴露该服务[root@k8smaster~]#kubectlexpose......
  • log4j配置文件详解
    【参考文章】:Log4j2中RollingFile的文件滚动更新机制1.配置文件示例<?xmlversion="1.0"encoding="UTF-8"?><!--ALL<TRACE<DEBUG<INFO<WARN<ERROR<FATA......
  • lua_nginx_module 简单解读
       最近写的文章比较少一些,一方面是因为自己最近疏忽了,还有一部分原因是自己在阅读luanginxmodule源码,相关资料较少,自己又并无lua及c基础,需要临时学习的东西较......
  • mac系统下用nginx服务器部署页面
    1.安装nginx(需要先安装Homebrew)。使用命令brewinstallnginx安装nginx。 2.用命令open/usr/local/Cellar/nginx用访达打开安装路径。 3.打开bin文件夹,双击nginx文件,启动......
  • 【实战加详解】二进制部署k8s高可用集群教程系列四 -部署 etcd 集群
    [!TIP]二进制部署k8s-部署etcd集群转载请注明出处:https://janrs.com。有任何问题环境来我的博客评论区发表评论。Alma版本8.6etcd版本3.5.5部署etcd......
  • NGINX配置文件,REWRITE,IF
    NGINX配置文件,REWRITE,IF目录NGINX配置文件,REWRITE,IFREWRITIF基于浏览器实现分离案例防盗链案例nginx配置文件,rewrite,if[rewrit]if[基于浏览器实现分离案例][防盗......
  • 【Nginx1.12.2安装步骤】
    前言最近利用时间来进行学习,之前进行过Nginx的入门学习,本篇博客主要记录一下安装Nginx的过程,以便为以后的工作奠定基础.核心步骤一安装gcc环境:yuminstallgcc-c++安装p......