利用Python脚本在Nginx和uwsgi上部署MoinMoin的教程


Posted in Python onMay 05, 2015

在 CentOS 下使用 apache+mod_wsgi 部署了 MoinMoin,但是编辑和保存页面很慢,于是准备使用 nginx+uwsgi 重新部署

本文假定已经按照官方指引 Quick MoinMoin on CentOS 完成了 apache 和 mod_wsgi 之外的基础安装
安装 Nginx

默认情况下,CentOS 下没有 nginx 的源,需要自己手动添加,访问 http://nginx.org/en/linux_packages.html#stable 下载 CentOS 6 的 rpm 包,并安装

wget http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm
rpm -ivh nginx-release-centos-6-0.el6.ngx.noarch.rpm

然后执行下面的命令安装 nginx

yum install nginx

安装 uwsgi

安装 python 包管理工具 pip

yum install python-devel python-setuptools
wget https://raw.github.com/pypa/pip/master/contrib/get-pip.py -O - | python

通过 pip 安装 uwsgi (使用豆瓣的境像)

pip install -v uwsgi -i http://pypi.douban.com/simple

使用 uwsgi 启动 moin

创建 uwsgi 配置 /etc/uwsgi/uwsgi.xml 内容如下

<uwsgi>
<socket>/var/run/moin.sock</socket>                                           
<chmod-socket>666</chmod-socket>
<limit-as>256</limit-as>
<processes>6</processes>
<memory-report/>
<vhost/>
<no-site/>
</uwsgi>

其中 <chmod-socket>666</chmod-socket> 这句是这了防止 nginx 访问 moin.sock 没有权限。

重命名 moin 的 wsgi 启动脚本,以被 uwsgi 识别

cd /usr/local/share/moin
mv moin.wsgi moin_wsgi.py

要启动 uwsgi 可以使用下面的命令

uwsgi -x /etc/uwsgi/uwsgi.xml

配置 nginx 访问 uwsgi

建立 /etc/nginx/conf.d/moin.conf 内容如下

# moinmoin 虚拟主机配置
server {
  listen YOUR_SERVER_IP:80;
  server_name localhost;

  access_log /var/log/nginx/moin.access_log main;
  error_log /var/log/nginx/moin.error_log info;

  location ^~ / {
    include uwsgi_params;
    uwsgi_pass unix:///var/run/moin.sock;
    # uwsgi_param UWSGI_PYHOME /usr/local/lib/python2.6/; #site-packages/;
    uwsgi_param UWSGI_CHDIR /usr/local/share/moin/;
    uwsgi_param UWSGI_SCRIPT moin_wsgi;
    uwsgi_param SCRIPT_NAME /;
    uwsgi_modifier1 30;
  }

  location ^~ /moin_static193/ {
    alias /usr/local/lib/python2.6/site-packages/MoinMoin/web/static/htdocs/;
    add_header Cache-Control public;
    expires 1M;
  }
}

运行 nginx

nginx

运行及故障排除

接下来你可以通过浏览器访问 Wiki 了,但是发现编辑和保存页面依旧很慢,然后稍微 Google 了下就发现了 一篇解决这个问题的文章,很快解决了慢的问题

编辑 wikiconfig.py 加入如下配置

log_reverse_dns_lookups = False

重启 uwsgi 后再访问 Wiki,发现慢的问题解决了(为什么我之前没有找到这篇文章!)

Python 相关文章推荐
python修改注册表终止360进程实例
Oct 13 Python
python写入并获取剪切板内容的实例
May 31 Python
python实现监控某个服务 服务崩溃即发送邮件报告
Jun 21 Python
Python3转换html到pdf的不同解决方案
Mar 11 Python
Python中的单下划线和双下划线使用场景详解
Sep 09 Python
python之yield和Generator深入解析
Sep 18 Python
详解python内置常用高阶函数(列出了5个常用的)
Feb 21 Python
python怎么提高计算速度
Jun 11 Python
python是怎么被发明的
Jun 15 Python
Python3爬虫中识别图形验证码的实例讲解
Jul 30 Python
M1芯片安装python3.9.1的实现
Feb 02 Python
python 自动刷新网页的两种方法
Apr 20 Python
Python实现的HTTP并发测试完整示例
Apr 23 #Python
安装dbus-python的简要教程
May 05 #Python
使用SAE部署Python运行环境的教程
May 05 #Python
在Python中使用PIL模块对图片进行高斯模糊处理的教程
May 05 #Python
在Python中使用mechanize模块模拟浏览器功能
May 05 #Python
python实现自动更换ip的方法
May 05 #Python
浅谈MySQL中的触发器
May 05 #Python
You might like
php上传、管理照片示例
2006/10/09 PHP
PHP下利用shell后台运行PHP脚本,并获取该脚本的Process ID的代码
2011/09/19 PHP
php数组(array)输出的三种形式详解
2013/06/05 PHP
PHP将XML转数组过程详解
2013/11/13 PHP
Zend Framework教程之Zend_Config_Ini用法分析
2016/03/23 PHP
微信利用PHP创建自定义菜单的方法
2016/08/01 PHP
PHP中危险的file_put_contents函数详解
2017/11/04 PHP
Thinkphp自定义生成缩略图尺寸的方法
2019/08/05 PHP
ie和firefox中img对象区别的困惑
2006/12/27 Javascript
基于JQuery.timer插件实现一个计时器
2010/04/25 Javascript
JS定义回车事件(实现代码)
2013/07/08 Javascript
JS操作JSON要领详细总结
2013/08/25 Javascript
JavaScript数组深拷贝和浅拷贝的两种方法
2014/04/16 Javascript
jquery实现TAB选项卡鼠标经过带延迟效果的方法
2015/07/27 Javascript
js点击列表文字对应该行显示背景颜色的实现代码
2015/08/05 Javascript
javascript省市级联功能实现方法实例详解
2015/10/20 Javascript
js弹出框、对话框、提示框、弹窗实现方法总结(推荐)
2016/05/31 Javascript
JS简单实现DIV相对于浏览器固定位置不变的方法
2016/06/17 Javascript
详解JavaScript的BUG和错误
2018/05/07 Javascript
vue服务端渲染添加缓存的方法
2018/09/18 Javascript
[04:09]2014DOTA2国际邀请赛Ti西雅图 历届冠军相继出局 BBC综述今日比赛
2014/07/20 DOTA
[01:00:26]Ti4主赛事胜者组第一天 EG vs NEWBEE 1
2014/07/19 DOTA
python list 合并连接字符串的方法
2013/03/09 Python
Python中集合类型(set)学习小结
2015/01/28 Python
使用python为mysql实现restful接口
2018/01/05 Python
基于python模拟TCP3次握手连接及发送数据
2020/11/06 Python
HTML5 绘制图像(上)之:关于canvas元素引领下一代web页面的问题
2013/04/24 HTML / CSS
手工制作的意大利礼服鞋:Ace Marks
2018/12/15 全球购物
李维斯牛仔裤英国官方网站:Levi’s英国
2019/10/10 全球购物
意大利顶级奢侈品电商:LUISAVIAROMA(支持中文)
2020/05/26 全球购物
函数只定义了一次, 调用了一次, 但编译器提示非法重定义了-什么问题?
2014/10/03 面试题
幼儿园三八妇女节活动方案
2014/03/11 职场文书
80后婚前协议书范本
2014/10/24 职场文书
2015年安全生产工作总结范文
2015/04/02 职场文书
出纳2015年度工作总结范文
2015/10/14 职场文书
Java中Quartz高可用定时任务快速入门
2022/04/03 Java/Android