zoukankan      html  css  js  c++  java
  • CentOS+nginx+uwsgi+Python 多站点环境搭建

    CentOS+nginx+uwsgi+Python 多站点环境搭建

    环境:

    CentOS X64 6.4

    nginx 1.5.6

    Python 2.7.5

    正文:

    一:安装需要的类库及Python2.7.5

    安装必要的开发包

    yum groupinstall "Development tools"
    
    yum install zlib-devel bzip2-devel pcre-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel

    CentOS 自带Python2.6.6,但我们可以再安装Python2.7.5:

    cd ~
    wget http://python.org/ftp/python/2.7.5/Python-2.7.5.tar.bz2
    tar xvf Python-2.7.5.tar.bz2
    cd Python-2.7.5
    ./configure --prefix=/usr/local
    make && make altinstall

    安装完毕后,可是使用”python2.7”命令进入python2.7的环境。

    二:安装Python包管理

    easy_install包 https://pypi.python.org/pypi/distribute

    方便安装Python的开发包

    cd ~
    wget https://pypi.python.org/packages/source/d/distribute/distribute-0.6.49.tar.gz
    tar xf distribute-0.6.49.tar.gz
    cd distribute-0.6.49
    

    python2.7

     setup.py install
    easy_install --version

    红色部分必须是“python2.7”,否则将安装到默认的2.6环境内。

    pip包 https://pypi.python.org/pypi/pip

    安装pip的好处是可以pip list、pip uninstall 管理Python包, easy_install没有这个功能,只有uninstall

    easy_install pip
    pip --version

    三:安装uwsgi

    uwsgi:https://pypi.python.org/pypi/uWSGI

    uwsgi参数详解:http://uwsgi-docs.readthedocs.org/en/latest/Options.html

    pip install uwsgi
    uwsgi --version

    测试uwsgi是否正常:

    新建test.py文件,内容如下:

    def application(env, start_response):
            start_response('200 OK', [('Content-Type','text/html')])
            return "Hello World"

    然后在终端运行:

    uwsgi --http :8001 --wsgi-file test.py

    在浏览器内输入:http://127.0.0.1:8001,看是否有“Hello World”输出,若没有输出,请检查你的安装过程。

    四:安装django

    pip install django

    测试django是否正常,运行:

    django-admin.py startproject demosite
    cd demosite
    

    python2.7

     manage.py runserver 0.0.0.0:8002

    在浏览器内输入:http://127.0.0.1:8002,检查django是否运行正常。

    五:安装nginx

    cd ~
    wget http://nginx.org/download/nginx-1.5.6.tar.gz
    tar xf nginx-1.5.6.tar.gz
    cd nginx-1.5.6
    ./configure --prefix=/usr/local/nginx-1.5.6 
    --with-http_stub_status_module 
    --with-http_gzip_static_module
    make && make install

    六:配置uwsgi

    uwsgi支持ini、xml等多种配置方式,但个人感觉ini更方便:

    在/ect/目录下新建uwsgi9090.ini,添加如下配置:

    [uwsgi]
    socket = 127.0.0.1:9090
    master = true         //主进程
    vhost = true          //多站模式
    no-stie = true        //多站模式时不设置入口模块和文件
    workers = 2           //子进程数
    reload-mercy = 10     
    vacuum = true         //退出、重启时清理文件
    max-requests = 1000   
    limit-as = 512
    buffer-sizi = 30000
    pidfile = /var/run/uwsgi9090.pid    //pid文件,用于下面的脚本启动、停止该进程
    daemonize = /website/uwsgi9090.log

    设置uwsgi开机启动,在/ect/init.d/目录下新建uwsgi9090文件,内容如下:

    #! /bin/sh
    # chkconfig: 2345 55 25
    # Description: Startup script for uwsgi webserver on Debian. Place in /etc/init.d and
    # run 'update-rc.d -f uwsgi defaults', or use the appropriate command on your
    # distro. For CentOS/Redhat run: 'chkconfig --add uwsgi'
     
    ### BEGIN INIT INFO
    # Provides:          uwsgi
    # Required-Start:    $all
    # Required-Stop:     $all
    # Default-Start:     2 3 4 5
    # Default-Stop:      0 1 6
    # Short-Description: starts the uwsgi web server
    # Description:       starts uwsgi using start-stop-daemon
    ### END INIT INFO
     
    # Author:   licess
    # website:  http://lnmp.org
     
    PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
    DESC="uwsgi daemon"
    NAME=uwsgi9090
    DAEMON=/usr/local/bin/uwsgi
    CONFIGFILE=/etc/$NAME.ini
    PIDFILE=/var/run/$NAME.pid
    SCRIPTNAME=/etc/init.d/$NAME
     
    set -e
    [ -x "$DAEMON" ] || exit 0
     
    do_start() {
        $DAEMON $CONFIGFILE || echo -n "uwsgi already running"
    }
     
    do_stop() {
        $DAEMON --stop $PIDFILE || echo -n "uwsgi not running"
        rm -f $PIDFILE
        echo "$DAEMON STOPED."
    }
     
    do_reload() {
        $DAEMON --reload $PIDFILE || echo -n "uwsgi can't reload"
    }
     
    do_status() {
        ps aux|grep $DAEMON
    }
     
    case "$1" in
     status)
        echo -en "Status $NAME: 
    "
        do_status
     ;;
     start)
        echo -en "Starting $NAME: 
    "
        do_start
     ;;
     stop)
        echo -en "Stopping $NAME: 
    "
        do_stop
     ;;
     reload|graceful)
        echo -en "Reloading $NAME: 
    "
        do_reload
     ;;
     *)
        echo "Usage: $SCRIPTNAME {start|stop|reload}" >&2
        exit 3
     ;;
    esac
     
    exit 0

    然后在终端执行:

    -- 添加服务
    chkconfig --add uwsgi9090 
    -- 设置开机启动
    chkconfig uwsgi9090 on

    七:设置nginx

    找到nginx的安装目录,打开conf/nginx.conf文件,修改server配置

    server {
            listen       80;
            server_name  localhost;
            
            location / {            
                include  uwsgi_params;
                uwsgi_pass  127.0.0.1:9090;              //必须和uwsgi中的设置一致
                uwsgi_param UWSGI_SCRIPT demosite.wsgi;  //入口文件,即wsgi.py相对于项目根目录的位置,“.”相当于一层目录
                uwsgi_param UWSGI_CHDIR /demosite;       //项目根目录
                index  index.html index.htm;
                client_max_body_size 35m;
            }
        }

    设置nginx开机启动,在/ect/init.d/目录下新建nginx文件,内容如下:

    #!/bin/sh
    #
    # nginx - this script starts and stops the nginx daemon
    #
    # chkconfig:   - 85 15
    # description:  Nginx is an HTTP(S) server, HTTP(S) reverse 
    #               proxy and IMAP/POP3 proxy server
    # processname: nginx
    # config:      /usr/local/nginx/conf/nginx.conf
    # pidfile:     /var/run/nginx.pid
      
    # Source function library.
    . /etc/rc.d/init.d/functions
      
    # Source networking configuration.
    . /etc/sysconfig/network
      
    # Check that networking is up.
    [ "$NETWORKING" = "no" ] && exit 0
      
    nginx="/opt/nginx-1.5.6/sbin/nginx"
    prog=$(basename $nginx)
    
    NGINX_CONF_FILE="/opt/nginx-1.5.6/conf/nginx.conf"
      
    [ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx
      
    lockfile=/var/lock/subsys/nginx  
     
    start() {
        [ -x $nginx ] || exit 5
        [ -f $NGINX_CONF_FILE ] || exit 6
        echo -n $"Starting $prog: "
        daemon $nginx -c $NGINX_CONF_FILE
        retval=$?
        echo
        [ $retval -eq 0 ] && touch $lockfile
        return $retval
    }
      
    stop() {
        echo -n $"Stopping $prog: "
        killproc $prog -QUIT
        retval=$?
        echo
        [ $retval -eq 0 ] && rm -f $lockfile
        return $retval
    }
      
    restart() {
        configtest || return $?
        stop
        sleep 1
        start
    }
      
    reload() {
        configtest || return $?
        echo -n $"Reloading $prog: "
        killproc $nginx -HUP
        RETVAL=$?
        echo
    }
      
    force_reload() {
        restart
    }
      
    configtest() {
      $nginx -t -c $NGINX_CONF_FILE
    }
      
    rh_status() {
        status $prog
    }
      
    rh_status_q() {
        rh_status >/dev/null 2>&1
    }
      
    case "$1" in
        start)
            rh_status_q && exit 0
            $1
            ;;
        stop)
            rh_status_q || exit 0
            $1
            ;;
        restart|configtest)
            $1
            ;;
        reload)
            rh_status_q || exit 7
            $1
            ;;
        force-reload)
            force_reload
            ;;
        status)
            rh_status
            ;;
        condrestart|try-restart)
            rh_status_q || exit 0
                ;;
        *)
            echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"
            exit 2
    esac

    然后在终端执行:

    -- 添加服务
    chkconfig --add nginx 
    -- 设置开机启动
    chkconfig nginx on

    八:测试

    OK,一切配置完毕,在终端运行

    service uwsgi9090 start
    service nginx start

    在浏览器输入:http://127.0.0.1,恭喜你可以看到django的“It work”了~

    九:多站配置

    我采用运行多个uwsgi服务的方法来实现多个站点。

    重复第六步,创建uwsgi9091.ini,并相应修改文件中的

    socket = 127.0.0.1:9091
    pidfile = /var/run/uwsgi9091.pid
    daemonize = /website/uwsgi9091.log

    并创建服务uwsgi9091,设置开机启动。

    然后修改nginx的配置文件为:

    server {
            listen       80;
            server_name  localhost;
            
            location / {            
                include  uwsgi_params;
                uwsgi_pass  127.0.0.1:9090;
                uwsgi_param UWSGI_SCRIPT demosite.wsgi;
                uwsgi_param UWSGI_CHDIR /website/demosite;
                index  index.html index.htm;
                client_max_body_size 35m;
            }
        }
    
        server {
            listen       1300;
            
            location / {            
                include  uwsgi_params;
                uwsgi_pass  127.0.0.1:9091;
                uwsgi_param UWSGI_SCRIPT DjangoStudy.wsgi;
                uwsgi_param UWSGI_CHDIR /website/DjangoStudy;
                index  index.html index.htm;
            }
        }

    然后我们就可以通过http://127.0.0.1:1300来访问新的网站了。

    十:其他配置

    防火墙设置

    CentOS默认关闭外部对80、3306等端口的访问,所以要在其他计算机访问这台服务器,就必须修改防火墙配置,打开/etc/sysconfig/iptables

    在“-A INPUT –m state --state NEW –m tcp –p –dport 22 –j ACCEPT”,下添加:

    -A INPUT m state --state NEW m tcp p dport 80 j ACCEPT
    -A INPUT m state --state NEW m tcp p dport 3306 j ACCEPT

    然后保存,并关闭该文件,在终端内运行下面的命令,刷新防火墙配置:

    service iptables restart

    安装Mysqldb

    yum -y install mysql-devel
    

    easy_install-2.7

     MySQL-python

    注意红色部分,easy_install-2.7,否则它将默认安装到Python2.6环境内。

  • 相关阅读:
    Windows 科研软件推荐
    有关Python 包 (package) 的基本知识
    《Using Python to Access Web Data》Week4 Programs that Surf the Web 课堂笔记
    Coursera助学金申请模板
    《Using Databases with Python》 Week2 Basic Structured Query Language 课堂笔记
    Jupyter 解决单个变量输出问题
    解决 pandas 中打印 DataFrame 行列显示不全的问题
    《Using Python to Access Web Data》 Week3 Networks and Sockets 课堂笔记
    缓存击穿及解决方案
    jvm垃圾收集器
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/3381557.html
Copyright © 2011-2022 走看看