Nginx+UWSGI+Django 整合安装

1、Nginx+openssl安装:
复制代码
一、下载依赖文件pcrenginx
    1、pcre:
        PCRE库是一组函数,它们使用与Perl 5相同的语法和语义实现正则表达式模式匹配.PCRE具有自己的本机API,以及一组与POSIX正则表达式API对应的包装函数。
        PCRE库是免费的,即使是用于构建专有软件。官网最新版本下载地址:https://sourceforge.net/projects/pcre/files/pcre/


    2、上面依赖关系软件下载存放目录(/usr/local/src)和下载链接地址
        wget https://sourceforge.net/projects/pcre/files/pcre/8.42/pcre-8.42.tar.gz
        
    3、nginx: 
        nginx[engine x]是一个HTTP和反向代理服务器,一个邮件代理服务器和一个通用的TCP / UDP代理服务器。
        官网最新下载地址:http://nginx.org/en/download.htm
        wget http://nginx.org/download/nginx-1.16.1.tar.gz
        

二、软件进行安装
    需要安装的软件都下载到了/usr/local/src/目录
    1、安装编译环境
        yum install -y gcc gcc-c++ pcre-devel zlib zlib-devel openssl openssl-devel
    
        
    2、pcre安装
        cd /usr/local/src/
        tar zxf pcre-8.42.tar.gz
        cd pcre-8.42
        ./configure --prefix=/usr/local/pcre
        make
        make install
        
        可以无视下面的warning
        libtool: warning: relinking 'libpcreposix.la'
        libtool: warning: relinking 'libpcrecpp.la'
        
    
        
    3、nginx安装,软件存放在 /usr/local/src目录下面
        1、cd /usr/local/src/
            tar zxf nginx-1.16.1.tar.gz
            groupadd nginx
            useradd -g nginx nginx -s /bin/false
            mkdir /usr/local/nginx
            cd nginx-1.16.1
            ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module --with-http_sub_module --with-http_ssl_module --with-http_gzip_static_module --with-pcre=/usr/local/src/pcre-8.42
            make
            make install
            
            
        2、编译参数说明:
            1)查看nginx 启动配置文件缺少动态文件命令
                ldd $(which /usr/local/nginx/sbin/nginx)
            2)如果缺少利用下面查找缺号的.so动态文件 ln -sv解决
                find / -type f -name "libprofiler.so*" 查找文件是否存在
                ln -sv /usr/local/lib/libprofiler.so.0.4.8 /lib64/libprofiler.so.0
                ln -sv /usr/local/lib/libunwind.so.8.0.1 /lib64/libunwind.so.8
            3)查看编辑了哪些nginx模块
                /usr/local/nginx/sbin/nginx -V
                这里利用的全路径命令/usr/local/nginx/sbin/nginx 
            
            4)nginx编辑安装参数说明

                1)--prefix=/usr/local/nginx
                    定义安装目录,默认是/usr/local/nginx
                    
                2)--user=nginx 
                    设置非特权用户的名称,其凭据将由工作进程使用。安装后,可以在配置文件 nginx.conf 中使用user指令更改名称 。默认用户名是nobody。
                    
                3)--group=nginx
                    设置其凭据将由工作进程使用的组的名称。安装后,可以在配置文件 nginx.conf 中使用user指令更改名称 。默认情况下,组名称设置为非特权用户的名称。
                    
                4)--with-http_realip_module
                    启用HTTP_Realip模块,用于修改客户端请求头中客户端IP地址值,一般用于反向代理中,将真实的客户端IP传送给后端的应用服务器。默认情况下不构建此模块
                    
                5)--with-http_stub_status_module
                    启用HTTP_Stub_Status模块,状态信息统计模块,用于返回一个Nginx状态信息统计信息页面,管理员访问这个页面可以获取Nginx的请求处理、当前连接、
                    等待连接等统计信息,一般用于监控Nginx的运行状态。默认情况下不构建此模块。
                    
                6)--with-http_sub_module
                    启用http_sub模块,这个模块是一个过滤器,用于修改响应的内容,可以将一个指定的字符串替换成另一个字符串。默认情况下不构建此模块。
                    
                7)--with-http_ssl_module 
                    允许构建一个模块,将HTTPS协议支持添加到HTTP服务器。默认情况下不构建此模块。需要OpenSSL库来构建和运行此模块。
                    
                8)--with-http_gzip_static_module 
                    启用http_gzip_static模块,用于将静态内容压缩成".gz"为文件扩展名的预压缩文件,并缓存在本地,在响应时会将此文件发送以替代普通文件。
                    运用此模块的好处就是不需要(Gzip)每次传输时都需要对文件进行处理压缩。在用于Squid+Nginx环境下,当Nginx启用(Gzip)内容传输压缩功能时,
                    在使用Squid3.0以前版本搭建环境时会发现,Squid返回给客户端的并不是压缩状态,这就是由于没有启用此模块导致的。默认情况下不构建此模块。
                    
                9)--with-pcre=/usr/local/src/pcre-8.38
                    启用PCRE库的使用。PCRE库是一个Perl库,包含Perl兼容的正则表达式。若你是源码安装的PCRE库,则需要通过此项设置PCRE库的所在目录路径。    
                    
                    
                10)--with-openssl=/usr/local/src/openssl-1.1.1d 
                    若你是源码安装的OpenSSL库,则需要通过此项设置OpenSSL库的所在目录路径。
                    
                    1、openssl:
                        OpenSSL是一种功能强大的商用级全功能工具包,适用于传输层安全性(TLS)和安全套接字层(SSL)协议。它也是一个通用的加密库。
                        官方最新版本下载地址:https://www.openssl.org/source/
                    
                    2、openssl下载
                        wget https://www.openssl.org/source/openssl-1.1.1d.tar.gz
                    
                    3、openssl安装
                            cd /usr/local/src/
                            tar zxf openssl-1.1.1d.tar.gz
                            cd openssl-1.1.1d
                            ./config 
                            make
                            make install
                    
                11)--with-zlib=/usr/local/src/zlib-1.2.11 
                    若你是源码安装的Zlib库,则需要通过此项设置Zlib库的所在目录路径。当启用HTTP_Gzip模块的时候需要此库的支持。
                    1、zlib:
                        一个大型漂亮但又精美不引人注目的压缩库(也是免费的,不提及不受专利限制)
                        官网最新下载地址:https://zlib.net/
                    
                    2)zlib下载
                        wget https://zlib.net/zlib-1.2.11.tar.gz
                    
                    3、zlib 安装
                        cd /usr/local/src/
                        tar zxf zlib-1.2.11.tar.gz
                        cd zlib-1.2.11
                        ./configure 
                        make
                        make install
复制代码

2、编辑nginx启动脚本

  2-1、利用/etc/init.d/nginx启动脚本

vi /etc/init.d/nginx

复制代码
#!/bin/bash
# nginx Startup script for the Nginx HTTP Server
# chkconfig: - 85 15
# description: Nginx is a high-performance web and proxy server.
#              It has a lot of features, but it's not for everyone.
# processname: nginx
# pidfile: /var/run/nginx.pid
# config: /usr/local/nginx/conf/nginx.conf
nginxd=/usr/local/nginx/sbin/nginx
nginx_config=/usr/local/nginx/conf/nginx.conf
nginx_pid=/usr/local/nginx/logs/nginx.pid
RETVAL=0
prog="nginx"
# Source function library.
.  /etc/rc.d/init.d/functions
# Source networking configuration.
.  /etc/sysconfig/network
# Check that networking is up.
[ ${NETWORKING} = "no" ] && exit 0
[ -x $nginxd ] || exit 0

# Start nginx daemons functions.
start() {
    if [ -e $nginx_pid ];then
        echo "nginx already running...."
        exit 1
    fi
    echo -n $"Starting $prog: "
    daemon $nginxd -c ${nginx_config}
    RETVAL=$?
    echo
    [ $RETVAL = 0 ] && touch /var/lock/subsys/nginx
    return $RETVAL
}

# Stop nginx daemons functions.
stop() {
    echo -n $"Stopping $prog: "
    killproc $nginxd
    RETVAL=$?
    echo
    [ $RETVAL = 0 ] && rm -f /var/lock/subsys/nginx /usr/local/nginx/logs/nginx.pid
}

reload() {
    echo -n $"Reloading $prog: "
    #kill -HUP `cat ${nginx_pid}`
    killproc $nginxd -HUP
    RETVAL=$?
    echo
}

# See how we were called.
case "$1" in
    start)
        start
        ;;
    stop)
        stop
        ;;
    reload)
        reload
        ;;
    restart)
        stop
        start
        ;;
    status)
        status $prog
        RETVAL=$?
        ;;
        *)
        echo $"Usage: $prog {start|stop|restart|reload|status|help}"
        exit 1
esac
    exit $RETVAL
复制代码

  nginx 启动脚本添加权限
  chmod 755 /etc/init.d/nginx

  nginx 设置开机启动
  chkconfig nginx on

  2-2、systemctl 启动nginx脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
vim /lib/systemd/system/nginx.service
 
 
[Unit]
Description=nginx
After=network.target
 
[Service]
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s quit
PrivateTmp=true
 
[Install]
WantedBy=multi-user.target

  配置文件注释如下:

    [Unit]:服务的说明
    Description:描述服务
    After:描述服务类别
    [Service]:服务运行参数的设置
    Type=forking :后台运行的形式
    ExecStart :服务的具体运行命令,“start”为启动
    ExecReload :“reload”为重启
    ExecStop :“stop”为停止
    PrivateTmp :“True”表示给服务分配独立的临时空间

  2-3、设置开机启动nginx,相关其它命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#设置开机启动
systemctl enable nginx.service
 
#启动Nginx:
systemctl start nginx.service
 
#重新启动Nginx:
systemctl restart nginx.service
 
#停止Nginx:
systemctl stop nginx.service
 
#查看Nginx当前状态:
systemctl status nginx.service

 

3、Python3安装

复制代码

1)Python3 下载地址:
wget https://www.python.org/ftp/python/3.6.10/Python-3.6.10.tar.xz


2)环境编译

yum -y install gcc gcc-c++ patch libffi-devel python-devel zlib-devel bzip2-devel openssl openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel expat-devel


3)python 安装
解压tar.xz 首先需要进行xz 命令安装yum install -y xz
解压:xz -d Python-3.6.10.tar.xz
再次解压:tar -xf Python-3.6.10.tar
mkdir /usr/local/python3.6/
cd Python-3.6.10
./configure --prefix=/usr/local/python3.6/ --enable-optimizatio --with-openssl=/usr/bin/openssl
make -j4
make install

4)建立软件连接生成python3和pip3
ln -s /usr/local/python3.6/bin/python3.6 /usr/bin/python3
ln -s /usr/local/python3.6/bin/pip3.6 /usr/bin/pip3

5)设置 python3 环境变量
export PATH=$PATH:/usr/local/python3.6/bin/
source /etc/profile

复制代码

4、ipython安装

  ipython是一个python的交互式shell,比默认的python shell好用得多,支持变量自动补全,自动缩进,

  支持bash shell命令,内置了许多很有用的功能和函数。学习ipython将会让我们以一种更高的效率来使用python

  同时它也是利用Python进行科学计算和交互可视化的一个最佳的平台。

  pip3 install ipython

  注:如出现下面图片问题

解决方法:在pip命令后面手动设置源(-i - url),这里手动指定的是豆瓣源

pip3 install ipython -i http://pypi.douban.com/simple --trusted-host pypi.douban.com

更改pip源

         采用国内pip源,下载模块会快

         常用pip源有:

                   豆瓣: https://pypi.douban.com/simple

      阿里云:https://mirrors.aliyun.com/pypi/simple

    加速安装命令:

       pip install 模块名称 –i https://pypi.douban.com/simple

使pip源永久生效:

  Linux系统:

    1、在用户根目录下面创建.pip隐藏目录文件

      mkdir ~/.pip

    2、进入 .pip隐藏目录创建pip.conf配置文件

      cd ~/.pip && touch pip.conf

    3、对pip.conf配置文件内容添加

      [global]

      index-url = http://pypi.douban.com/simple

      [install]

      use-mirrors =true

      mirrors =http://pypi.douban.com/simple/

      trusted-host =pypi.douban.com

5、安装虚拟环境,安装虚拟环境在使用django的时候可以创建不同的应用开发,使用自己需要的python模块

  1)安装虚拟环境命令
    pip3 install virtualenv
  2)使用虚拟环境命令

    cd /usr/local
    /usr/local/python3.6/bin/virtualenv -p python3 web
  3)生效创建的虚拟环境,并进入虚拟环境web中
    source web/bin/activate

  4)退出虚拟环境命令

    deactivate

  注:虚拟环境可以把pyhton虚拟成多个环境,一个项目使用一个环境。

6、安装Django

复制代码
1)这里进入到了python虚拟环境
    source /usr/local/web/bin/activate
2)安装django,
    pip3 install django==2.1.7
    注:diango==2.1.7 这里代表的是安装django哪个版本。diango==可以修改成自己想安装的django版本

3)创建一个django project,
    django-admin.py startproject myweb
  注:django project创建到了/usr/local/nginx/html/目录下面
4)在myweb目录下创建应用目录 python manage.py startapp blog 5)启动django项目 1)python manage.py runserver 8000 2)python manage.py runserver IP:8000 注: 1)当前访问路径是http://127.0.0.1:8000 2)当前访问路径是http://IP:8000 runserver 后面可以添加访问的IP:8000 和修改端口
复制代码

7、UWSGI安装

复制代码

1)uwsgi 安装

    pip3 install uwsgi

2)uwsgi 配置文件参数编写

  mkdir /etc/uwsgi

  vim /etc/uwsgi/uwsgi.ini

[uwsgi]
#启动uwsgi的用户名和用户组
uid = root
gid = root

#python 虚拟环境所在目录
home=/usr/local/web/
#指定wsgi所在路径
wsgi-file=/usr/local/nginx/html/myweb/myweb/wsgi.py
#项目目录
chdir=/usr/local/nginx/html/myweb
#指定项目的application,指的就是myweb
module=myweb.wsgi:application
#设置日志目录
daemonize=/var/log/uwsgi.log
#指定启动时的pid文件路径
pidfile = /var/run/uwsgi.pid
#指定sock的文件路径(nginx使用) 
socket=/tmp/uwsgi.sock
#启动主进程,来管理其他进程,其它的uwsgi进程都是这个master进程的子进程,如果kill这个master进程,相当于重启所有的uwsgi进程
master = true
#进程数 同 processes 官网给出的优化建议是CPU核数+1 
workers=3
#启用线程
enable-threads=true
#线程数
threads = 4
#设置在平滑的重启(直到接收到的请求处理完才重启)一个工作子进程中,等待这个工作结束的最长秒数
#这个配置会使在平滑地重启工作子进程中,如果工作进程结束时间超过了8秒就会被强行结束(忽略之前已经接收到的请求而直接结束)
reload-mercy = 8
#自动移除unix Socket和pid文件当服务停止的时候
vacuum=true
#序列化接受的内容,如果可能的话
thunder-lock=true
#设置自中断时间
harakiri=30
#设置缓冲
post-buffering=4096
复制代码

注:如果django代码里面设置了多线程,如果uwsgi配置文件里面没有开启多线程参数配置是不支持。

3)uwsgi启动参数命令
uwsgi --ini /etc/uwsgi/uwsgi.ini
4)编辑uwsgi 启动脚本
vim /etc/init.d/uwsgi

复制代码
#!/bin/bash
# chkconfig: 2345 75 10
DESC="uwsgi daemon"
NAME=uwsgi
DAEMON=/usr/local/python3.6/bin/uwsgi #python3下面的uwsgi路径
CONFIGFILE=/etc/uwsgi/$NAME.ini       #指定的配置uwsgi配置文件
PIDFILE=/var/run/$NAME.pid            #配置文件里面的pid路径
SCRIPTNAME=/etc/init.d/$NAME          #启动脚本所在路径
FILEOFILE=/tmp/uwsgififo

#set -e
#[ -x $"DAEMON" ] || exit 0

do_start(){
        if [ ! -f $PIDFILE ];then
                $DAEMON $CONFIGFILE || echo -n "uwsgi runing"
        else
                echo "The PID is exist..."
        fi
}


do_stop(){
        if [ -f $PIDFILE ];then
                $DAEMON --stop $PIDFILE || echo -n "uwsgi not running"
                rm -fr $PIDFILE
                echo "$DAEMON STOPED."
        else
                echo "The $PIDFILE doesn't found"
        fi
}

do_reload(){
        if [ -p $FILEOFILE ];then
                echo w > $FILEOFILE
        else
                $DAEMON --touch-workers-reload $PIDFILE || "uwsgi can't reload"
        fi
}

do_status(){
        ps aux |grep $NAME|grep -v "/bin/bash"
}

case "$1" in
        status)
                echo -en "Status $NAME:\n"
                do_status
                ;;
        start)
                echo -en "Starting $NAME:\n"
                do_start
                ;;
        stop)
                echo -en "Stopping $NAME:\n"
                do_stop
                ;;
        restart)
                echo -en "Restarting $NAME:\n"
                do_stop
                do_start
                ;;
        reload|graceful)
                echo -en "Reloading $NAME:\n"
                do_reload
                ;;
        *)
                echo "Usage $SCRIPTNAME {start|stop|reload|status}"
                exit 3
esac
exit 0
复制代码

8、设置nginx+uwsgi整合,使nginx能访问django应用

 修改nginx.conf配置文件,在server下面添加

复制代码
 location / {
            #root   html;
            index  index.html index.htm;
            # 导入一个Nginx模块他是用来和uWSGI进行通讯的
            include uwsgi_params;
            #uwsgi_pass 127.0.0.1:9090;
            #uwsgi_param UWSGI_SCRIPT  myweb.wsgi;
            #uwsgi_param UWSGI_CHDIR /usr/local/nginx/html/myweb;
            client_max_body_size 35m;
            uwsgi_cache_valid 1m;
            uwsgi_temp_file_write_size 64k;
            uwsgi_busy_buffers_size 64k;
            uwsgi_buffers 8 64k;
            uwsgi_buffer_size 64k;
            uwsgi_read_timeout 300;
            uwsgi_send_timeout 300;
            # 设置连接uWSGI超时时间
            uwsgi_connect_timeout 60;
            # 指定uwsgi的sock文件所有动态请求就会直接丢给他
            uwsgi_pass unix:/tmp/uwsgi.sock;
        }
复制代码

注:这里可以直接把nginx server里的location 原配置基础上修改或者添加
1)uwsgi_pass 127.0.0.1:9090;
这里设置uwsgi 代理连接地址
2)uwsgi_param UWSGI_SCRIPT myweb.wsgi;
module指向项目下的wsgi.py文件。
3)uwsgi_param UWSGI_CHDIR /website/myweb;
django项目所在位置

 

posted @   点点滴滴的努力  阅读(275)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
点击右上角即可分享
微信分享提示