使用nginx+uwsgi在云服务器上部署web项目

使用的代理一共有两个,nginxuwsgi,先说明一下,如果不用nginx一样可以访问web项目,使用nginx的目的是为了安全和负载均衡。配置了nginx做前端代理,uwsgi作后端代理的服务器(这里所说的前后端都是相对的位置,并无实际含义),在处理来自Internet的请求时,要先经过nginx的处理,nginx把请求再交给uwsgi,经过uwsgi才能访问到项目本身。

没有nginx而只有uwsgi的服务器,则是Internet请求直接由uwsgi处理,并反馈到web项目中。nginx可以实现安全过滤,防DDOS等保护安全的操作,并且如果配置了多台服务器,nginx可以保证服务器的负载相对均衡。
uwsgi则是一个web服务器,实现了WSGI协议(Web Server Gateway Interface),http协议等,它可以接收和处理请求,发出响应等。所以只用uwsgi也是可以的。

一般将服务器代理是安装在全局中的,当然你也可以在虚拟环境里安装。

1, 安装uwsgi

$ pip install uwsgi

2, 配置uwsgi

在项目根目录下创建一个配置文件uwsgiconfig.ini(uwsgi支持多种配置文件格式,xml,ini,json等)

$ vi /home/www/shawnlinq/uwsgiconfig.ini

输入以下内容(去掉注释):

[uwsgi]
socket = 127.0.0.1:3031     //启动程序时所使用的地址和端口,通常在本地运行flask项目,
                            //地址和端口是127.0.0.1:5000,
                            //不过在服务器上是通过uwsgi设置端口,通过uwsgi来启动项目,
                            //也就是说启动了uwsgi,也就启动了项目。
chmod-socket = 777
limit-as = 256
max-request = 2000
memory-report = true
home = /home/www/shawnlinq/venv     //虚拟环境中的python启动路径
pythonpath = /home/www/shawnlinq    //项目目录
wsgi-file = shawnlinq/manage.py      //flask程序的启动文件,通常在本地是通过运行python manage.py runserver 来启动项目的  
touch-reload = /home/www/shawnlinq    //项目内容改变时,重启uwsgi
callable = app      //程序内启用的application变量名
processes = 4     //处理器个数
threads = 2     //线程个数
stats = 127.0.0.1:9191      //获取uwsgi统计信息的服务地址

Inster键来插入修改,修改完后使用ESC键,输入:wq来保存退出

注:通过键入$ uwsgi --ini /home/www/shawnlinq/uwsgiconfig.ini 来启动uwsgi

3, 安装nginx

先在yum安装源中添加nginx的安装包

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

执行安装

$ yum -y install nginx

4, 配置nginx

先删除nginx默认的配置文件default.conf

$ rm /etc/nginx/conf.d/default.conf

创建nginx_shawnlinq.conf文件

$ vi /etc/nginx/conf.d/nginx_shawnlinq.conf

输入以下内容:

server {
    listen       80; 
    server_name  104.224.154.225 shawnlinq.com www.shawnlinq.com;  //你的主机ip或者域名
    location / {   
        include     uwsgi_params;
        uwsgi_pass  127.0.0.1:3031;
        uwsgi_param UWSGI_SCRIPT manage:app;
    }   
}

5, 运行web项目

这里需要先将web项目通过ftp上传至云服务器,或者用git方法克隆至云服务器,两个方法均可在本站搜索到

我的web项目是以flask作为框架的

5.1, 创建并开启虚拟环境

$ cd /home/www/shawnlinq/    //你的web项目目录
$ virtualenv venv
$ source venv/bin/activate

如果未安装virtualenv扩展库,需要先执行安装

$ pip install virtualenv

此时会在指令行前显示(venv)

5.2, 安装web项目需要的扩展库

(venv) $ pip install -r requirements.txt

5.3 运行nginx服务

先退出虚拟环境

(venv) $ deactivate

此时指令行前的(venv)消失

启动nginx服务

$ service nginx start

附其他nginx操作指令:

$ service nginx stop    //停止nginx  
$ service nginx restart    //重启nginx  

5.4, 运行uwsgi服务

$ uwsgi --ini /home/www/shawnlinq/uwsgiconfig.ini  

如果想让uwsgi在后台运行,需要添加daemonize参数,并添加运行日志log的保存目录,可参考指令如下:

$ uwsgi --ini /home/www/shawnlinq/uwsgiconfig.ini --daemonize /home/www/log/uwsgi.log

5.5, 验证是否成功

在浏览器中打开主机ip104.224.154.225或者域名www.shwanlin.cc
个人网站
载入网页成功


以上,用uwsgi+nginx部署web项目成功