返回介绍

13.4 系统环境部署

发布于 2024-01-29 22:54:22 字数 6159 浏览 0 评论 0 收藏 0

13.4.1 系统环境说明

OMServer采用Django-1.4.9、nginx-1.5.9、uwsgi-2.0.4、rpyc-3.2.3等开源组件来构建。为了便于读者理解,下面对平台的运行环境、安装部署、开发环境优化等进行详细说明。环境设备角色表如表13-1所示。

表13-1 系统环境说明表

13.4.2 系统平台搭建

OMServer平台涉及两个角色,其中一个为Web服务端,运行Django及rpyc环境,另一角色为主控端,需要部署Saltstack、Ansible或Func主控端环境,可参与本书第9~11章内容,本节不予详细介绍。另外同样需要部署rpyc环境。

(1)Django环境部署

本示例部署主机为192.168.1.10(SN2012-07-010)。

# cd /home
# mkdir -p /home/install/Django && cd /home/install/Django   #创建安装包目录
# mkdir –p /data/logs/   #创建uwsgi日志目录

1)安装pcre。pcre是一个轻量级的正则表达式函数库,Nginx的HTTP Rewrite模块会用到,最新版本为8.34(对于OMServer平台环境来说非必选项)。

# wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.34.tar.gz
# tar -zxvf pcre-8.34.tar.gz
# cd pcre-8.34
#./configure
# make && make install
# cd ..

2)安装Nginx。Nginx是最流行的高性能HTTP服务器,最新版本为1.5.9。

# wget http://nginx.org/download/nginx-1.5.9.tar.gz
# tar -zxvf nginx-1.5.9.tar.gz
# cd nginx-1.5.9
#./configure --user=nobody --group=nobody --prefix=/usr/local/nginx --with-http_stub_status_module --with-cc-opt='-O3' --with-cpu-opt=opteron
# make && make install
# cd ..

3)安装MySQL-python。MySQL-python是Python访问MySQL数据库的第三方模块库,最新版本为1.2.3c1。

# yum install -y MySQL-python   #yum安装方式
# wget http://nchc.dl.sourceforge.net/project/mysql-python/mysql-python/1.2.2/
# tar -zxvf MySQL-python-1.2.2.tar.gz   #源码安装方式
# cd MySQL-python-1.2.2
# python setup.py install
# cd ..

4)安装uwsgi。uwsgi是一个快速的、纯C语言开发的、自维护、对开发者友好的WSGI服务器,旨在提供专业的Python Web应用发布和开发功能,最新版本为2.0.4。

# wget http://projects.unbit.it/downloads/uwsgi-2.0.4.tar.gz
# tar -zxvf uwsgi-2.0.4.tar.gz
# cd uwsgi-2.0.4
# make
# cp uwsgi /usr/bin
# cd ..

5)安装Django。Django是一个Python最流行的开源Web开发框架,最新版本为1.6.5。考虑到兼容与稳定性,本示例使用1.4.9版本进行开发。

# wget https://www.djangoproject.com/m/releases/1.4/Django-1.4.9.tar.gz
# tar -zxvf Django-1.4.9.tar.gz
# cd Django-1.4.9
# python setup.py install

6)配置Nginx。修改/usr/local/nginx/conf/nginx.conf,添加以下server域配置:

server {
     listen 80;
     server_name omserver.domain.com;
     location / {
        uwsgi_pass 192.168.1.10:9000;
        include uwsgi_params;
        uwsgi_param UWSGI_CHDIR  /data/www/OMserverweb;
        uwsgi_param UWSGI_SCRIPT django_wsgi;
        access_log off;
     }
     location ^~ /static {
        root /data/www/OMserverweb;
     }
     location ~* ^.+\.(mpg|avi|mp3|swf|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|txt |tar|mid|midi|wav|rtf|mpeg)$ {
        root /data/www/OMserverweb/static;
        access_log off;
     }
  }

其中“omserver.domain.com”为平台访问域名,“/data/www/OMserverweb”为项目根目录,可以根据具体环境进行修改。

7)配置uwsgi。创建uwsgi配置文件/usr/local/nginx/conf/uwsgi.ini,详细内容如下:

[uwsgi]
socket = 0.0.0.0:9000   #监听的地址及端口
master = true   #启动主进程
pidfile = /usr/local/nginx/uwsgi.pid
processes = 8   #uwsgi开启的进程数
chdir = /data/www/OMserverweb   #项目主目录
pythonpath = /data/www
profiler=true
memory-report=true
enable-threads = true
logdate=true
limit-as=6048
daemonize=/data/logs/django.log

启动uwsgi与nginx服务,建议配置成服务自启动脚本,便于后续的日常维护。详细启动脚本这里不展开说明,有兴趣的读者可参阅互联网上已经存在的相关资源。

# /usr/bin/uwsgi --ini /usr/local/nginx/conf/uwsgi.ini
# /usr/local/nginx/sbin/nginx

访问http://omserver.domain.com,出现如图4-4所示的页面说明Django+uwsgi环境部署成功!

图13-4 Django默认首页

(2)rpyc模块安装。

rpyc(Remote Python Call)是Python提供分布式计算的基础服务平台,可以理解成封装程度更高的Socket编程,最新版本为3.3。本示例需要部署rpyc模块的主机为192.168.1.20(SN2013-08-020)、192.168.1.10(SN2012-07-010)。

# wget https://pypi.python.org/packages/source/r/rpyc/rpyc-3.2.3.tar.gz --no-check-certificate
# tar -zxvf rpyc-3.2.3.tar.gz
# cd rpyc-3.2.3
# python setup.py install

13.4.3 开发环境优化

开发环境相对于生产环境更注重调试便捷性,好的调试工具对软件开发将起到事半功倍的作用,方便高效地定位问题。本节介绍Django必备调试工具django-debug-toolbar的安装与配置,同时介绍如何实现一种Django代码自动刷新生效的方法。

(1)django-debug-toolbar的安装

# wget https://github.com/robhudson/django-debug-toolbar/archive/master.zip
# unzip master
# cd django-debug-toolbar-master/
# python setup.py install

修改Django的setting.py配置,关键参数如下:

INTERNAL_IPS = ('127.0.0.1','192.168.1.101',)   #添加启动调试器的来源IP
MIDDLEWARE_CLASSES = (   # MIDDLEWARE_CLASSES添加以下行
  … …
  'debug_toolbar.middleware.DebugToolbarMiddleware',
)
INSTALLED_APPS = (   # INSTALLED_APPS添加以下行
  … …
  'debug_toolbar',
}
TEMPLATE_DIRS = (   #TEMPLATE_DIRS添加以下行,注意与python的安装路径保持一致
  … …
'/usr/lib/python2.6/site-packages/django_debug_toolbar-0.8.5-py2.6.egg/debug_toolbar/templates/',
)

务必要渲染一个模板,这样debug_toolbar才会自动附加调试信息到当前的页面,否则看不到debug_tool的界面。debug_toolbar在业务前端页面设计成可伸缩展示,展开后的调试界面如图13-5所示。

图13-5 debug_toolbar界面

(2)Django源码自动重载(reload)方案

本方案结合uwsgi的“--touch-reload”参数来实现,参数格式:--touch-reload"文件",即当该参数值指定的文件发生变化(修改或touch操作)时,uwsgi进程将自动重载(reload),从而使我们的项目代码刷新生效。另外,如何保证一旦更新项目源码立即触发变更--touch-reload指定的文件?Linux系统下的inotify可以做到这点,具体操作如下。

1)在项目目录中创建一个监视文件:

# mkdir /data/www/OMserverweb/shell   #在项目目录中创建一个存放监视文件的目录shell
# touch reload.set   #创建一个监视文件reload.set
# yum -y install inotify-tools   #安装inotify程序包
# uwsgi启动脚本添加“--touch-reload”项
# /usr/bin/uwsgi --ini "/usr/local/nginx/conf/*.ini" --touch-reload "/data/www/OMserverweb/shell/reload.set"

2)编写监视脚本:

# vi /data/www/OMserverweb/shell/autoreload.sh
#!/bin/sh
objectdir="/data/www/OMserverweb"
# 启动inotify监视项目目录,参数“--exclude”为忽略的文件或目录正则
/usr/bin/inotifywait -mrq --exclude "(static|logs|shell|\.swp|\.swx|\.pyc|\.py\~)" --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' --event    modify,delete,move,create,attrib ${objectdir} | while read files
do
#项目源码发生变化后,触发touch reload.net的操作,最终使uwsgi进程重载,达到刷新项目源码的目的
/bin/touch /data/www/OMserverweb/shell/reload.set
  continue
done &

3)启动脚本开启项目目录监视:

# /data/www/OMserverweb/shell/autoreload.sh

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文