设为首页 收藏本站
查看: 1918|回复: 0

[经验分享] nginx+uwsgi 上搭建keystone

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2016-2-29 09:05:10 | 显示全部楼层 |阅读模式
作为web服务器,nginx占用内存少,性能高而扬名大江南北。以前我都是用apache作为web服务器,将openstack的api服务搭建在apache上。为了体验nginx的高性能而换成nginx。

    找一台服务器,系统是标准的 centos7,部署keystone服务

   第0步:先stop 原生的keystone服务

systmctl stop openstack-keystone

   第一步: 安装需要的软件

yum install nginx uwsgi uwsgi-plugin-python

    第二步:keystone是Python程序,监听在两个端口上,keystone kilo版原生就支持uwsgi,接口已经存在。只是需要和uwsgi接口

cp /usr/share/keystone/keystone.wsgi /usr/share/keystone/main
cp /usr/share/keystone/keystone.wsgi /usr/share/keystone/admin
chmod ug+x /usr/share/keystone/admin
chmod ug+x /usr/share/keystone/main

    第三步:配置uwsgi进程

vim /etc/uwsgi.ini

[uwsgi]
uid = root
gid = root
socket = /var/run/uwsgi/uwsgi.socket
pidfile = /var/run/uwsgi/uwsgi.pid
emperor = /etc/uwsgi.d
#emperor-tyrant = true
master = true
autoload = true
log-date = true
logto = /var/log/uwsgi/uwsgi-emperor.log

    这里设置uid 和gid,uwsgi本身进程在运行时会使用的权限。这里为了和nginx匹配权限, 设置为root

   emperor:uwsgi可以使用君主制度,管理vassal。这个值指定vassal的配置文件路径

   emperor-tyrant: boole值,vassal是否有自己的运行权限,如果这个值为true,需要设置

   cap = setgid,setuid;并且在vassal里必须设置uid和gid。这里不使用单独指定权限,统一使    用root

    第四步:配置vassal

  vim /etc/uwsgi.d/admin.ini   #这个路径必须和上面的emperor一致

[uwsgi]
chmod-socket = 666
master = true
plugin = python
socket = /run/uwsgi/keystone-admin.sock
thunder-lock = true
workers = 4
wsgi-file = /usr/share/keystone/admin

chmod-socket: 这里设置成666,为了能让nginx有权限访问socket

  plugin: 因为后端是Python,所以需要设置plugin=python

  socket:定义socket的路径,这个路径需要保证uwsgi进程有权限访问

  wsgi-file: 指定python接口文件的具体路径。

  在这里我卡住好长一段时间,后来发现这里python文件的命名是有规范的,需要和keystone的ini配置文件里定义的api接口名一致,不然是加载不了的。

  vim /etc/uwsgi/main.ini

[uwsgi]
chmod-socket = 666
master = true
plugin = python
socket = /run/uwsgi/keystone-mainsock
thunder-lock = true
workers = 4
wsgi-file = /usr/share/keystone/main

    第五步:验证uwsgi能正确加载python module

$: systemctl  start uwsgi
$: systemctl status uwsgi
uwsgi.service - uWSGI Emperor Service
   Loaded: loaded (/usr/lib/systemd/system/uwsgi.service; enabled)
   Active: active (running) since  2016-02-27 16:22:16 CST; 1 day 1h ago
  Process: 11168 ExecStartPre=/bin/chown uwsgi:uwsgi /run/uwsgi (code=exited, status=0/SUCCESS)
  Process: 11166 ExecStartPre=/bin/mkdir -p /run/uwsgi (code=exited, status=0/SUCCESS)
Main PID: 11172 (uwsgi)
   Status: "The Emperor is governing 2 vassals"
   CGroup: /system.slice/uwsgi.service
           |-11172 /usr/sbin/uwsgi --ini /etc/uwsgi.ini
           |-11175 /usr/sbin/uwsgi --ini /etc/uwsgi.ini
           |-11176 /usr/sbin/uwsgi --ini /etc/uwsgi.ini
           |-11177 /usr/sbin/uwsgi --ini admin.ini
           |-11178 /usr/sbin/uwsgi --ini main.ini
           |-11251 /usr/sbin/uwsgi --ini main.ini
           |-11252 /usr/sbin/uwsgi --ini main.ini
           |-11253 /usr/sbin/uwsgi --ini main.ini
           |-11254 /usr/sbin/uwsgi --ini main.ini
           |-11255 /usr/sbin/uwsgi --ini admin.ini
           |-11256 /usr/sbin/uwsgi --ini admin.ini
           |-11257 /usr/sbin/uwsgi --ini admin.ini
           `-11258 /usr/sbin/uwsgi --ini admin.ini

    需要systemctl status 输出的状态这上面这样,正确加载了main.ini admin.ini.

    如果提示不能加载vassal配置文件,错误类似“no python application found, check your startup logs for errors”,原因就是python的接口不能正常加载。多半是加载python的module的名不对。

    第六步:配置nginx

   vim /etc/nginx/nginx.conf 添加一行引用

http{
.
.
.
.
include /etc/nginx/sites-enabled/*.conf;
}

  vim /etc/nginx/sites-enabled/keystone.conf

server {
  listen                *:35357 ;

  server_name           keystone.com;
  access_log            /var/log/nginx/keystone_wsgi_admin.access.log;
  error_log             /var/log/nginx/keystone_wsgi_admin.error.log;

  location / {
    uwsgi_pass       unix:///run/uwsgi/keystone-admin.sock;
    include          uwsgi_params;
    uwsgi_param      SCRIPT_NAME   "";
  }
}
server {
  listen                *:5000 ;

  server_name           keystone.com;
  access_log            /var/log/nginx/keystone_wsgi_main.access.log;
  error_log             /var/log/nginx/keystone_wsgi_main.error.log;

  location / {
    uwsgi_pass       unix:///run/uwsgi/keystone-main.sock;
    include          uwsgi_params;
    uwsgi_param      SCRIPT_NAME   "";
  }
}

    location 里需要添加一个uwsgi_param SCRIPT_NAME ""。因为keystone kilo版本代码里需要这个值SCRIPT_NAME。所以在报文里需要带着这个值

    最后一步:将nginx uwsgi服务起来,验证一下

$: systemctl  restart nginx
$: systemctl restart uwsgi
$: keystone user-list
+----------------------------------+---------+---------+-------------------+
|                id                |   name  | enabled |       email       |
+----------------------------------+---------+---------+-------------------+
|                                                                                                        |
|                                                                                                        |
+----------------------------------+---------+---------+-------------------+




运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-184180-1-1.html 上篇帖子: nginx 伪静态的设置 下篇帖子: 两道Nginx的面试题以及细说Nginx配置文件
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表