分享

centos 部署 Nginx + uwsgi + django +mysql 多站点

 java_laq小馆 2014-03-23

centos 部署 Nginx + uwsgi + django +mysql 多站点

分类: python django 752人阅读 评论(0) 收藏 举报

1.通常centos 都自带有python ,centos5默认的版本是2.43 建议安装2.7 版本,安装 ngixn(略)

2.安装Python工具

  1. yum install python-devel libxml2  libxml2-devel  python-setuptools  zlib-devel wget openssl-devel pcre pcre-devel sudo gcc make autoconf automake   

3.安装pip


  1. wget http://pypi.python.org/packages/source/p/pip/pip-1.0.2.tar.gz --no-check-certificate  
  2. tar xvfz pip-1.0.2.tar.gz   
  3. cd pip-1.0.2  
  4. python setup.py  install  

之所以安装 pip ,我们后面可以用pip 命令直接安装 uwsgi  和 django 

4.安装uwsgi

pip install uwsgi

或者你可以去官网下载自己解压编译安装

5.安装virtualenv (主要用于多站点创建虚拟环境)


  1. pip  install virtualenv  

6.设置python 虚拟环境变量 
  1. mkdir /srv/vpython  
  2. cd /srv/vpython  
  3. virtualenv --no-site-packages mywebsite  
  4. cd /srv/vpython/mywebsite  
  5. source bin/activate  


会看到提示符前面多了一个(mywebsite)。现在运行python,可以看到sys.path已经更改为/srv/vpython/mywebsite目录下的各个包。

这个目录下的是供该站点使用的虚拟包,换句话说我们再增加新站点的时候也要创建属于它的虚拟包 不能共用一份哦

7.部署django

  1. cd  /srv/www/  
  2. django-admin.py  startproject mywebsite  

执行完毕后会在/srv/www/下面生成website目录 我们会发现在website 目录下面还有一个website目录。我们无需理会

在/srv/www/website/下创建 uwsgi.py 代码如下:

  1. import sys  
  2. import os  
  3.   
  4. sys.path.append(os.path.abspath(os.path.dirname(__file__)))  
  5. sys.path.append('/srv/www')  
  6. os.environ['DJANGO_SETTINGS_MODULE'] = 'mywebsite.settings'  
  7.   
  8. import django.core.handlers.wsgi  
  9.   
  10. application = django.core.handlers.wsgi.WSGIHandler()  

8.修改默认配置或者在conf.d目录下添加mywebsite.conf
  1. vim  /etc/nginx/conf.d/mywebsite.conf  

添加代码如下:
  1.     server {  
  2.   
  3.         listen       80 ;  
  4.   
  5.         server_name  127.0.0.1;  
  6.   
  7.   
  8.         root   /srv/www/mywebsite;  
  9.   
  10.         index  index.html index.htm;  
  11.             access_log /var/log/nginx/access.log ;  
  12.   
  13.         error_log /var/log/nginx/error.log ;  
  14.   
  15.         location / {  
  16.   
  17.             uwsgi_pass 127.0.0.1:3031;  
  18.   
  19.             include uwsgi_params;  
  20.                 uwsgi_param UWSGI_SCRIPT  uwsgi;    
  21.   
  22.             uwsgi_param UWSGI_PYHOME $document_root;  
  23.   
  24.             uwsgi_param UWSGI_CHDIR  $document_root;  
  25.   
  26.         }  
  27. }  


注意上面标红的地方是我们在在/srv/www/website/下创建 uwsgi.py 的文件名 不用带.py

9.创建 uwsgi 的配置文件 可支持xml yaml ini等格式 我习惯用ini,将其放在etc目录下,当然你也可以放到其他地方

vim  /etc/uwsgi.ini 

添加代码如下:

  1. [uwsgi]  
  2. socket=127.0.0.1:3031  
  3. master=true  
  4. vhost=true  
  5. gid=nginx  
  6. uid=nginx  
  7. workers=10  
  8. max-requests=1000  
  9. limit-as=512  
  10. pidfile=/var/run/uwsgi.pid  
  11. daemonize=/var/log/uwsgi.log  

注意我使用的端口是3031 因此我们可以看nginx 配置文件里的端口也是3031,还有注意有防火墙的话放行该端口,

装完需要的包后,用deactivate命令退出虚拟环境。


10.创建 uwsgi的服务脚本,在lnmp nginx脚本上直接改的,支持stop start reload

vim  /etc/ini.d/uwsgi

  1. #! /bin/sh  
  2. # chkconfig: 2345 55 25  
  3. # Description: Startup script for uwsgi webserver on Debian. Place in /etc/init.d and  
  4. # run 'update-rc.d -f uwsgi defaults'or use the appropriate command on your  
  5. # distro. For CentOS/Redhat run: 'chkconfig --add uwsgi'  
  6.    
  7. ### BEGIN INIT INFO  
  8. # Provides:          uwsgi  
  9. # Required-Start:    $all  
  10. # Required-Stop:     $all  
  11. # Default-Start:     2 3 4 5  
  12. # Default-Stop:      0 1 6  
  13. # Short-Description: starts the uwsgi web server  
  14. # Description:       starts uwsgi using start-stop-daemon  
  15. ### END INIT INFO  
  16.    
  17. # Author:   licess  
  18. # website:  http://blog.csdn.net/youngqj  
  19.    
  20. PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin  
  21. DESC="uwsgi daemon"  
  22. NAME=uwsgi  
  23. <span style="color:#ff0000">DAEMON=/usr/bin/uwsgi</span>  
  24. CONFIGFILE=/etc/$NAME.ini  
  25. PIDFILE=/var/run/$NAME.pid  
  26. SCRIPTNAME=/etc/init.d/$NAME  
  27.    
  28. set -e  
  29. [ -x "$DAEMON" ] || exit 0  
  30.    
  31. do_start() {  
  32.     $DAEMON $CONFIGFILE || echo -n "uwsgi already running"  
  33. }  
  34.    
  35. do_stop() {  
  36.     $DAEMON --stop $PIDFILE || echo -n "uwsgi not running"  
  37.     rm -f $PIDFILE  
  38.     echo "$DAEMON STOPED."  
  39. }  
  40.    
  41. do_reload() {  
  42.     $DAEMON --reload $PIDFILE || echo -n "uwsgi can't reload"  
  43. }  
  44.    
  45. do_status() {  
  46.     ps aux|grep $DAEMON  
  47. }  
  48.    
  49. case "$1" in  
  50.  status)  
  51.     echo -en "Status $NAME: \n"  
  52.     do_status  
  53.  ;;  
  54.  start)  
  55.     echo -en "Starting $NAME: \n"  
  56.     do_start  
  57.  ;;  
  58.  stop)  
  59.     echo -en "Stopping $NAME: \n"  
  60.     do_stop  
  61.  ;;  
  62.  reload|graceful)  
  63.     echo -en "Reloading $NAME: \n"  
  64.     do_reload  
  65.  ;;  
  66.  *)  
  67.     echo "Usage: $SCRIPTNAME {start|stop|reload}" >&2  
  68.     exit 3  
  69.  ;;  
  70. esac  
  71.    
  72. exit 0  


注意 上面红色部分  安装 方式不一样可能存放的路径不一样,可以执行 whereis  uwsgi   就能知道 uwsgi 的bin 路径


添加执行权限 

chmod +x uwsgi

11 安装 mysql-server  mysql-devel  同时还要安装 mysql-python


  1. yum install mysql-server  
  2. yum install mysql-devel  
  3. pip install mysql-python  



12 .启动  service  uwsgi start   service nginx start  service mysqld start 

13 .完毕


注意:如果要添加一个站点 我们要重复 创建python 虚拟环境 然后再安装相应的web框架 如 web.py 等

添加nginx 配置文件 特别注意 uwsgi_param UWSGI_PYHOME 要填写正确哦。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多