Quantcast
Channel: 看得透又看得远者prevail. ppt.cc/flUmLx ppt.cc/fqtgqx ppt.cc/fZsXUx ppt.cc/fhWnZx ppt.cc/fnrkVx ppt.cc/f2CBVx
Viewing all articles
Browse latest Browse all 20516

基于nginx+uWSGI部署Django

$
0
0
之前在apache上基于mod_wsgi模式安装过Django应用,后来转到LNMP环境,再加上近期uWSGI的流行,本文将基于LNMP+uWSGI重新部署Django应用。

注:1、本文仅实现单站点部署方式,多站点虚拟主机可以通过virtualenv实现。
2、本文的环境是基于LNMP,运行于CentOS,已经安装了Nginx、PHP、MySQL、Memcached。并且操作系统自带了Python 2.6.3版本,可以升级到目前的最新版。
3、目前的Django最新版是1.4.2,仅支持Python 2.5--2.7的版本(https://docs.djangoproject.com/en/1.4/intro/install/),在3.x版本上面会出错。


基于上述环境,通过uWSGI方式部署Django应用的步骤如下:

一、安装平台

1、安装MySql-python

#cd /usr/local/src
#wget http://downloads.sourceforge.net/project/mysql-python/mysql-python/1.2.3/MySQL-python-1.2.3.tar.gz?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Fmysql-python%2Ffiles%2Fmysql-python%2F1.2.3%2F&ts=1353841475&use_mirror=nchc
#tar xzvf MySQL-python-1.2.3.tar.gz
#cd MySQL-python-1.2.3
#vi site.cfg
mysql_config =/usr/local/mysql/bin/mysql_config
#python setup.py build
#python setup.py install
测试:
# python
>>> import MySQLdb
>>>
没有任何输出,安装成功!
如果出现了安装或者使用错误,请参照:http://mysql-python.sourceforge.net/FAQ.html

2、安装setuptools
 
#cd /usr/local/src
#wget http://pypi.python.org/packages/2.7/s/setuptools/setuptools-0.6c11-py2.7.egg#md5=fe1f997bc722265116870bc7919059ea
#sh setuptools-0.6c11-py2.7.egg
3、安装pip
pip是一个可以替代 easy_install的安装和管理 python 软件包的工具,具体可以安装的 python 包可以在这里查看 Python Package Index(http://pypi.python.org/pypi)

安装pip之前要确保安装了 setuptools或者distribute.
1
2
3
4
5
#cd /usr/local/src
#wget http://pypi.python.org/packages/source/p/pip/pip-1.2.tar.gz
#tar xzvf pip-1.2.tar.gz
#cd pip-1.2
#python setup.py install # 可能需要root权限
pip应用
(1)安装包
# pip install simplejson
(2)更新包
# pip install --upgrade simplejson
(3)移除包
# pip uninstall simplejson
4、安装uWSGI
1
2
3
4
5
6
#cd /usr/local/src
#wget http://projects.unbit.it/downloads/uwsgi-1.4.2.tar.gz
#tar -zxvf uwsgi-1.4.2.tar.gz
#cd uwsgi-1.4.2
#make
#cp uwsgi /usr/bin
5、安装Django
1
2
3
4
5
#cd /usr/local/src
wget https
://www.djangoproject.com/download/1.4.2/tarball/
tar
-zxvf Django-1.4.2.tar.gz
cd
Django-1.4.2
python setup
.py install
创建django项目
项目位置:/home/django/xzhu
创建项目方法:
1
2
#cd /home/django
#django-admin.py startproject xzhu

二、平台配置

1、Nginx相关配置
1
2
3
#mkdir /usr/local/nginx/conf/django
#cd /usr/local/nginx/conf/django
#vi django_uwsgi.conf
内容如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
# Django project  
server
{
listen
80;
server_name xzhu
.loosky.net;
 
location
/{
include uwsgi_params
;
uwsgi_pass
127.0.0.1:9000;
uwsgi_param UWSGI_CHDIR
/home/django/xzhu;
uwsgi_param UWSGI_SCRIPT django_wsgi
;
access_log off
;
}
}
编辑完成后在nginx.conf追加子配置文件django_uwsgi.conf
1
2
#cd ..
#vi nginx.conf
内容如下:
1
2
3
4
http{
........
include django
/*.conf;
}
2、UWSGI配置
1
2
3
4
5
#mkdir -p /home/uwsgi;
#cd /home/uwsgi
#mkdir -p /home/django/logs
#echo ""> /home/django/logs/django.log
#vi uwsgi.xml
内容如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<uwsgi>
<socket>127.0.0.1:9000</socket>
<listen>200</listen>
<master>true</master>
<pidfile>/usr/local/nginx/uwsgi.pid</pidfile>
<processes>8</processes>
<pythonpath>/home/django/xzhu</pythonpath>
<pythonpath>/home/django/</pythonpath>
<module>django_wsgi</module>
<profiler>true</profiler>
<memory -report>true</memory>
<enable -threads>true</enable>
<logdate>true</logdate>
<limit -as>6048</limit>
<daemonize>/home/django/logs/django.log</daemonize>
</uwsgi>
3、创建django应用模块
1
2
#cd /home/django/xzhu
#vi django_wsgi.py
内容如下:
1
2
3
4
importos
os.environ['DJANGO_SETTINGS_MODULE']='xzhu.settings'
import django.core.handlers.wsgi
application
= django.core.handlers.wsgi.WSGIHandler()
4、启动服务
1
2
#/usr/sbin/uwsgi -x /home/uwsgi/uwsgi.xml
#/usr/local/nginx/sbin/nginx -s reload #重启nginx服务
5、查看进程
1
# ps -ef|grep uwsgi|grep -v grep
内容如下:
root 2429 1 0 10:10 ? 00:00:00 /usr/sbin/uwsgi -x /home/uwsgi/uwsgi.xml
root 2431 2429 0 10:10 ? 00:00:00 /usr/sbin/uwsgi -x /home/uwsgi/uwsgi.xml
root 2432 2429 0 10:10 ? 00:00:00 /usr/sbin/uwsgi -x /home/uwsgi/uwsgi.xml
root 2433 2429 0 10:10 ? 00:00:00 /usr/sbin/uwsgi -x /home/uwsgi/uwsgi.xml
root 2434 2429 0 10:10 ? 00:00:00 /usr/sbin/uwsgi -x /home/uwsgi/uwsgi.xml
root 2435 2429 0 10:10 ? 00:00:00 /usr/sbin/uwsgi -x /home/uwsgi/uwsgi.xml
root 2436 2429 0 10:10 ? 00:00:00 /usr/sbin/uwsgi -x /home/uwsgi/uwsgi.xml
root 2437 2429 0 10:10 ? 00:00:00 /usr/sbin/uwsgi -x /home/uwsgi/uwsgi.xml
root 2438 2429 0 10:10 ? 00:00:00 /usr/sbin/uwsgi -x /home/uwsgi/uwsgi.xml
6、监听端口
1
# netstat -an|grep 9000
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN
7、访问测试:
输入“http://服务器IP/”,出现it worked界面则表示成功。

三、uWSGI/Django应用服务自启动
1、uWSGI启动脚本
1
2
#cd /home/uwsgi/
#vi uwsgiserver
内容如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#!/bin/bash  
PATH
=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
 
# Check if user is root
if[ $(id -u)!="0"];then
printf
"Error: You must be root to run this script!\n"
exit1
fi
 
if["$1"="start"];then
psid
=`ps aux|grep "uwsgi"|grep -v "grep"|wc -l`
if[ $psid -gt 2];then
echo
"uwsgi is running!"
exit0
else
/usr/sbin/uwsgi -x /home/uwsgi/uwsgi.xml
/usr/local/nginx/sbin/nginx -s reload
fi
echo
"Start uwsgi service [OK]"
elif["$1"="stop"];then
killall
-9 uwsgi
echo
"Stop uwsgi service [OK]"
elif["$1"="restart"];then
killall
-9 uwsgi
/usr/sbin/uwsgi -x /home/uwsgi/uwsgi.xml
/usr/local/nginx/sbin/nginx -s reload
echo
"Restart uwsgi service [OK]"
else
echo
"Usages: uwsgiserver [start|stop|restart]"
fi
则可以通过脚本 /home/uwsgi/uwsgiserver start|stop|restart来 启动|停止|重启 uWSGI服务。
2、开机自启动uWSGI服务
在/etc/rc.d/rc.local中加入:
1
/home/uwsgi/uwsgiserver start

相关帖子:http://briteming.blogspot.com/2017/10/pythondjango.html

Viewing all articles
Browse latest Browse all 20516

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>