uwsgi是一个application server container,django是一个框架,只用django+python或只用uwsgi+django也可以运行,但我们要做的是用nginx服务器来管理服务器上的资源访问,安装过程可以参考uwsgi的官方网站,本篇文章主要包含了如下几个配置过程:
- 安装和配置nginx
- 安装和启用virtualenv
- 安装uwsgi和django
- 整合配置
1. 安装和配置nginx
nginx的安装和配置大家可以参考我的这篇文章:
Nginx,MySQL,PHP-FPM的安装和配置,不同的是我们要在/etc/nginx/sites-available/下新建一个网站的配置文件api.local.cg,然后在/etc/nginx/sites-enable/下建一个指向该文件的链接文件,然后修改api.local.cg,内容改为如下:
server {
listen 80;
root /var/www/api.local.cg;
index index.html index.htm;
access_log /var/log/nginx/api.local.cg-access;
error_log /var/log/nginx/api.local.cg-error error;
server_name api.local.cg;
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:9000;
}
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root www;
}
## caches
include /etc/nginx/conf.d/caches.conf;
}
2. 安装和启用virtualenv
安装和使用过程可参考
virutalenv的官网,virtualenv就相当于一个python的虚拟机,它允许你在在一个机子上安装多个python的环境,可以是不同版本,然后每个python环境上可以安装各自的库和插件,相互独立不影响,安装命令为:
pip install virtualenv
然后在一个目录下生成虚拟环境并开启使用
mkdir -p ~/sdk/python
cd ~/sdk/python
virtualenv env
source env/bin/activate
which python
启动后如果which python显示的是你的建立的env下的python则表明成功开启,而且此时命令提示符前会多了一个env标记,表示你处于env这个虚拟python环境中,你可以随时使用deactivate来结束这个环境
3. 安装uwsgi和django
apt-get install build-essential
apt-get install python-dev
pip install uwsgi
pip install django
你可以写一个test.py来测试uwsgi的安装是否成功
# test.py
def application(env, start_response):
start_response('200 OK', [('Content-Type','text/html')])
return "Hello World"
然后使用如下命令启动后,浏览器访问:127.0.0.1:8000,可以看到返回的hello world
uwsgi --http :8000 --wsgi-file test.py
4. 整合配置
首先,用django生成你网站的基本文件,我们在nginx上指定的文件夹为/var/www/api.local.cg,我们可以做如下操作:
cd /var/www/api.local.cg
django-admin.py startproject www
mv www /var/www/api.local.cg
在api.local.cg项目下建立一个xml配置文件django_socket.xml
<uwsgi>
<socket>:9000</socket>
<chdir>/var/www/api.cungen.tk</chdir>
<module>www.wsgi</module>
<processes>4</processes>
<daemonize>uwsgi.log</daemonize>
</uwsgi>
指定的内容为uwsgi与nginxsocket连接的端口,与上面nginx处指定的要一致,chdir为项目的路径,module为默认的项目文件中www目录下的wsgi.py,启动uwsgi,重启nginx
uwsgi -x django_socket.xml
sudo service nginx reload
成功开启各项服务后,访问api.local.cg,效果如图所示: