centos安装和部署nginx+uwsgi

搭建简单的nginx+uwsgi服务

附录(uwsgi ini文件内容详解)

客户端发送一个http请求,被nginx服务器接收,nginx服务器将请求转发给uwsgi,uwsgi将请求转发给实现uwsgi协议的应用程序,或可以自己处理用户请求信息并反馈结果(本次搭建服务为uwsgi自己处理请求)

环境为CentOS6.8

1、将Python升级到2.7版本,默认该环境中为2.6

从网上下载Python2.7相应的安装包

在本地安装编译配置时所需的一些依赖包

yum groupinstall -y "Development tools"

yum install -y zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel

编译安装Python2.7,本次搭建安装到了/opt/目录下

mkdir /opt/python

./configure --prefix=/opt/python

make &&make install

将系统中原有的Python替换掉,原有Python在/usr/bin下

mv /usr/bin/python /usr/bin/python.old 将原有Python重命名使其失效

rm -f /usr/bin/python-config 删除系统默认的python-config软链接(没有该文件可忽略)

ln -s /opt/python/bin/python /usr/bin/python 给新装的Python创建软连接

ln -s /opt/python/bin/python-config /usr/bin/python-config 给新装的Python创建软连接

此时已完成Python2.7的安装

python --version 查看是否已显示新版本

注:由于原环境中Python2.6被替换,会导致一些依赖于原Python2.6的程序无法使用(如yum),这是可做如下更改

vi /usr/bin/yum 修改第一行内容

#!/usr/bin/python    -------> #!/usr/bin/python2.6

2、安装setuptools

可从网上下载setuptools源码包,解压该包并进入

python setup.py build

python setup.py install

这时已经安装setuptools到/opt/python/bin下,该目录下出现easy_install

3、通过easy_install安装pip

需要通过pip来安装一些Python环境下的软件

/opt/python/bin/easy_install pip

4、通过pip来安装virtualenv和uwsgi

virtualenv可以提供多个虚拟的不同的Python环境,可以通过切换不同的虚拟环境来使用不同版本或不同搭配的Python环境

pip install virtualenv

安装uwsgi

pip install uwsgi

安装的virtualenv和uwsgi也同样在/opt/python/bin下

5、通过virtualenv创建一个虚拟Python环境,在此环境下搭建本次项目

创建新的虚拟环境,放在/opt/uwsgi下,命名为env

mkdir /opt/uwsgi

cd /opt/uwsgi

virtualenv env 该命令可在本目录下创建名为env的新虚拟Python环境,可加--no-site-packages参数来创建空白的全新

环境,本次直接执行该命令会将本地的Python环境拷贝一份到创建的env环境中

这时可以进入/opt/uwsgi/env下,可以看到新生成了一些文件

6、进入env虚拟环境,并创建测试页

进入env虚拟环境

source /opt/uwsgi/env/bin/activate 这时会看到命令行最头部出现(env),表明已进入env环境

可以一个存放项目文件的目录,本次为存放测试文件的目录projects

mkdir /opt/uwsgi/projects

cd /opt/uwsgi/projects

在该目录下创建一个测试脚本test.py

vi test.py 内容如下:(一定要注意格式不能变,否则不能用)

def application(env, start_response):

start_response('200 OK', [('Content-Type', 'text/html')])

return 'hello world'

测试uwsgi可用性

/opt/uwsgi/env/bin/uwsgi --http :9090 --wsgi-file test.py 开放一个9090端口来测试uwsgi,可以用同网段的

浏览器测试,如无法访问可关闭防火墙,浏览器应显示hello world

7、编写.ini来启动uwsgi

.ini文件相当于uwsgi的配置文件,启动uwsgi时可以指定该文件来指定uwsgi的运行状态

本次在/opt/uwsgi/file_ini下创建test.ini,来作为uwsgi的测试配置文件

mkdir /opt/uwsgi/file_ini

vi test.ini 内容如下:

[uwsgi]

socket = 127.0.0.1:5000  #socket是与nginx相关联时设置的参数,若要直接处理浏览器请求则改成http

processes = 4 

threads = 2

master = true

chdir = /opt/uwsgi/projects/

wsgi-file = test.py

8、测试通过test.ini来启动uwsgi

uwsgi --ini test.ini (-d ./uwsgi.log --pidfile=uwsgi.pid) 该命令为打开5000端口来监测

http请求,并通过制定.ini文件来启动uwsgi,注意--ini后跟.ini文件的路径,括号内的参数为生成log日志文件

和存放pid号的文件,以方便杀死该进程,若不加括号内的参数则执行命令后会占用命令行窗口来运行uwsgi

9、安装并配置nginx来作为前端进程来监测客户请求并将请求转发给uwsgi

在/opt/下创建nginx目录来安装nginx

安装完成后进入/opt/nginx/conf,修改nginx.conf文件,该文件为启动nginx时的的配置文件

vi nginx.conf

worker_processes  1;

events {

worker_connections  1024;

}

http {

server {

listen      80;

server_name  localhost;

location / {

include uwsgi_params;

uwsgi_pass 127.0.0.1:5000;

}

}

}

改配置文件中写明监测http的80端口,并将请求转发给本地的5000端口,而5000端口即为本地uwsgi监测的端口

这时只要用浏览器测试访问本机的80端口即可得到hello world

附录:

uwsgi ini文件内容详解(部分参数)

[uwsgi]

uid = nginx #使用nginx用户和组

gid = nginx

chdir = /webser/www/demosite #指定项目目录,在配置多站点时,不要启用

module = demosite.wsgi #加载demosite/wsgi.py这个模块,在配置多站点时,不要启用

master = true #启动主进程。

processes = 2 #启动2个工作进程

listen = 120 #设置socket的监听队列大小(默认:100)

socket = /test/myapp.sock #指定socket文件,也可以指定为127.0.0.1:9000,这样就会监听到网络套接字

pidfile = /var/run/uwsgi.pid #指定pid文件

vacuum = true #当服务器退出的时候自动删除unix socket文件和pid文件。

enable-threads = true #允许用内嵌的语言启动线程。这将允许你在app程序中产生一个子线程

buffer-size = 32768 #设置用于uwsgi包解析的内部缓存区大小为64k。默认是4k。

reload-mercy = 8 #设置在平滑的重启(直到接收到的请求处理完才重启)一个工作子进程中,等待这个工作结束的最长秒数。这个配置会使在平滑地重启工作子进程中,如果工作进程结束时间超过了8秒就会被强行结束(忽略之前已经接收到的请求而直接结束)

max-requests = 5000 #为每个工作进程设置请求数的上限。当一个工作进程处理的请求数达到这个值,那么该工作进程就会被回收重用(重启)。你可以使用这个选项来默默地对抗内存泄漏

limit-as = 256 #通过使用POSIX/UNIX的setrlimit()函数来限制每个uWSGI进程的虚拟内存使用数。这个配置会限制uWSGI的进程占用虚拟内存不超过256M。如果虚拟内存已经达到256M,并继续申请虚拟内存则会使程序报内存错误,本次的http请求将返回500错误。

harakiri = 60 #一个请求花费的时间超过了这个harakiri超时时间,那么这个请求都会被丢弃,并且当前处理这个请求的工作进程会被回收再利用(即重启)

daemonize = /var/log/myapp_uwsgi.log # 使进程在后台运行,并将日志打到指定的日志文件或者udp服务器

你可能感兴趣的:(centos安装和部署nginx+uwsgi)