Virtualenv 中 Nginx + uWSGI 部署 Django 实战备忘(2)

坑:网上收到很多资料启动 nginx 的命令:nginx start,nginx -s start,nginx -s reload。可能是 nginx 版本不同原因,本人亲测,启动、关闭、重新加载 nginx 服务命令如下:
service start nginx
service stop nginx
service restart nginx

安装 uwsgi

1.安装 uwsgi

python 安装 uwsgi 方法有很多,但是也有坑。官方文档上说:
 要构建uWSGI,您需要Python和一个C编译器(gcc并且clang受支持)。根据您希望支持的语言,您将需要他们的开发头文件。在Debian / Ubuntu系统上,您可以安装它们(以及构建软件所需的其他基础架构),具体如下:

首先安装依赖文件:
Ubuntu 中:
apt-get install build-essential
apt-get install python-dev

centos中:
yum install epel-release
yum groupinstall "Development Tools"
yum install python-devel

坑:上面的命令针对 python2,对应 python3 中,Ubuntu 中应该改成是 apt-get install python3-dev,而 centos 中,yum install python3-devel 会找不到 python3-devel 包,网上有人说执行 yum install -y python3-devel.x86_64,同样也找不到包。同时应注意, ubuntu 和 centos 中包名也不一样。解决方法:
How to install python3-devel on Red Hat 7
所以针对 python3:
ubuntu 中:
apt-get install python3-dev

centos 中:
 先执行:yum search python3 | grep devel,
python34-cairo-devel.x86_64 : Libraries and headers for python34-cairo
python34-greenlet-devel.x86_64 : C development headers for python34-greenlet
python34-devel.x86_64 : Libraries and header files needed for Python 3
                      : development
python34-gobject-devel.x86_64 : Development files for embedding Python 3.4
python36-devel.x86_64 : Libraries and header files needed for Python development
shiboken-python34-devel.x86_64 : Development files for shiboken

然后依次执行:
yum install -y python34-cairo-devel.x86_64
yum install -y python34-greenlet-devel.x86_64
yum install -y python34-devel.x86_64
yum install -y python34-gobject-devel.x86_64
yum install -y shiboken-python34-devel.x86_64

我把 python3.4 相关的包都安装了。

•下载源码编译:
wget https://projects.unbit.it/downloads/uwsgi-latest.tar.gz
tar zxvf uwsgi-latest.tar.gz
cd <dir>
make

坑:上面步骤也是对应于 python2, 对于 python3 在 make 之前,一定要先执行:
python3 uwsgiconfig.py --build ,执行这个命令可能会报错:

Virtualenv 中 Nginx + uWSGI 部署 Django 实战备忘

原因是 python-devel 对应的 python3 依赖包没有安装。如果不巧,你刚好没有执行这个命令,就直接编译,并且通过了,则相当于,到时候,会出现 uwsgi 执行时找不到 module 或者 app ,
诸如 "No module named site " 或者下面信息之类的错误。
cannot open shared object file: No such file or directory
unable to load app 0
•pip3 安装(推荐)
pip3 install uwsgi
如果出现错误,则是依赖包没安装好,见上面下载源码编译的坑。

2.验证 uwsgi 是否安装成功

下面的来自 uwsgi 官方文档:

我们从一个简单的“Hello World”例子开始:
def application (env , start_response ):
    start_response ('200 OK' , [('Content-Type' ,'text / html' )])
    return  [ b “Hello World” ]

(保存为foobar.py)。
 如您所见,它由一个Python函数组成。它被称为“应用程序”,因为这是uWSGI Python加载程序将搜索的默认函数(但您明显可以自定义它)。
 部署HTTP端口9090上
 现在启动uWSGI运行一个HTTP服务器/路由器,将请求传递给你的WSGI应用程序:
uwsgi --http:9090 --wsgi-file foobar.py

就这样。

下面通过浏览器访问 该 ip 80 端口,能正确返回“ Hello World”。
注意:如果前面没有成功安装 python3 相关的依赖包,这里也能正确访问。但是部署 django 网站时会出错。

如果出现下面错误:
your processes number limit is 16384
your memory page size is 4096 bytes
detected max file descriptor number: 65536
lock engine: pthread robust mutexes
thunder lock: disabled (you can enable it with --thunder-lock)
probably another instance of uWSGI is running on the same address (:8080).
bind(): Address already in use [core/socket.c line 769]

则是 uwsgi 启动太多次了,可以用命令杀掉这个端口在重启:

sudo fuser -k 8080/tcp
 (用自己配置的端口号)

四、virtualenv + nginx + uwsgi 部署 django 网站

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/f7703eabfd81947935f120442b994799.html