目的
熟悉nginx的配置不难发现,nginx是一个典型的key value类型的,而且与文件系统的非常类似,一个目录下面可以包含其他配置,目录下还可以有目录,嵌套多层。如今key value类型的数据库非常多,redis、leveldb等,最近新秀etcd也是key-value分布式数据库,提供类似文件系统操作,使用raft协议保持数据一致性,非常适合云计算分布式部署场景,将confd与etcd搭配,非常适合nginx这样的配置格式。本文就详细讲解了nginx配置管理平台的实现。
环境
1 | CentOS 7.x x64 |
拓扑图
简易拓扑
配置平台详情拓扑
涉及软件
1 | etcd:分布式KV存储系统,一般用于共享配置和服务注册与发现。是CoreOS公司发起的一个开源项目。 ETCD存储格式类似于文件系统,以根"/"开始下面一级级目录,最后一个是Key,一个key对应一个Value。 |
软件部署
安装etcd
注意:这里安装的单机,集群环境根据自己的需求选取
1 | yum install etcd -y |
安装nginx
1 | 安装依赖包 |
安装confd
1 | 下载地址https://github.com/kelseyhightower/confd/releases |
创建配置文件目录
1 | mkdir -p /etc/confd/{conf.d,templates} |
创建confd配置文件
1 | vim /etc/confd/conf.d/test.conf.toml |
创建confd模板
1 | vi /etc/confd/templates/app01.conf.tmpl |
在Ectd中写入变量
1 | etcdctl set /Shopping/nginx/cluster1/proxy_name test.com |
启动confd并设置开机启动
1 | 需要更改etcd 的连接地址即可 |
验证
confd启动后会自动生成配置文件,如图:
配置平台部署
配置Python环境
1 | yum install python-pip -y #安装pip |
创建虚拟环境
1 | pip install virtualenv #安装沙盒工具 |
创建数据库并将表刷入数据库
1 | mysql -p #登录数据库为平台创建一个数据库 |
创建超级管理员账号
1 | python manage.py createsuperuser |
运行平台
1 | python manage.py runserver 0:8000 |
登录平台为nginx创建key/value
以Shopping 平台为例
项目创建:
1.创建商城项目 /Shopping
2.创建商城项目里面的 /Shopping/nginx nginx 服务
3.创建nginx 集群目录 /Shopping/nginx/cluster1
4.给我们的商城nginx集群1项目创建配置文件
5.域名 和 节点名称可能是多个,这里我们需要创建目录 /Shopping/nginx/cluster1/server_name 和 /Shopping/nginx/cluster1/upstream
1 | 配置创建: |
1 | etcd 里面存储的值 |
1 | 生成的配置文件 |
1 | 通过hosts 文件我们可以查看节点状态(虽然这个节点不是up 状态但是由此可见,我们可以动态添加节点) |
nginx + uwsgi + django项目部署
uwsgi 部署
1 | source env/bin/activate #使用沙盒 |
nginx 配置
1 | vim /usr/local/nginx/conf/vhost/ops.conf |