Django + uWSGI + Nginx 项目部署

背景:今天又进行了一次项目部署(第N+1次项目部署了),所以决定整理出一份完整的材料,下次直接CTRL+CCTRL+V就OK了。

一、Django项目配置

项目创建就不多说了,并且个人建议创建虚拟环境。

更改setting.py文件

DEBUG = False
ALLOW_HOSTS = ['*'] #表示可以访问服务器的ip,*表示所有

二、uWSGI配置

  1. 安装uWSGI

    pip install uwsgi
    
  2. 在项目目录下新建uwsgi.ini用于填写配置文件

    [uwsgi]
    socket = 127.0.0.1:8080                           # 和nginx通信的端口,直接做web服务器时把socket换成http
    chdir = /home/nginx_test                          # 项目路径(我的测试项目叫test)
    wsgi-file = /home/nginx_test/nginx_test/wsgi.py   # wsgi.py文件的路径
    processes = 4
    threads = 2
    master = true
    pidfile = uwsgi.pid                               # pid文件,用于脚本启动、停止进程
    daemonize = uswgi.log                             # 日志文件
    
  3. 启动uWSGI

    启动前注意:

    1. 启动前最好使用python manage.py runserver先测试启动一下,确保没有任何问题
    2. uwsgi的日志会在uwsgi.ini的相对路径下生成,如果有错误可以在此日志(uwsgi.log)里进行查看
    启动:uwsgi --ini uwsgi.ini
    停止:uwsgi --stop uwsgi.pid
    重启:uwsgi --reload uwsgi.pid
    

    如下表示启动成功:

    (venv) [root@localhost nginx_test]# uwsgi --ini uwsgi.ini 
    [uWSGI] getting INI configuration from uwsgi.ini
    (venv) [root@localhost nginx_test]# 
    

三、Nginx配置

  1. 安装Nginx

    我下载的是nginx-1.9.9,其他的请访问:http://nginx.org/download/

    cd /home/                                          # 找一个目录下载 Nginx
    yum -y install gcc gcc-c++ make libtool zlib zlib-devel openssl openssl-devel pcre pcre-devel    # 安装依赖包
    wget http://nginx.org/download/nginx-1.9.9.tar.gz  # 下载源码包
    tar -zxf nginx-1.9.9.tar.gz                        # 解压源码包
    cd nginx-1.9.9/                                    # 进入目录
    ./configure --prefix=/usr/local/nginx              # 安装路径为/usr/local/nginx
    make && make install                               # 编译安装
    
  2. 启动Nginx

    /usr/local/nginx/sbin/nginx            # 启动
    /usr/local/nginx/sbin/nginx -s stop    # 停止
    /usr/local/nginx/sbin/nginx -s reload  # 重启
    

    没有任何提示说明启动成功
    启动后在浏览器上输入虚拟机或服务器的IP测试一下,下图说明Nginx启动成功:

    如果无法访问可能是防火墙的问题:
    关闭防火墙:systemctl stop firewalld.service
    禁止防火墙开机自启动:systemctl disable firewalld.service

    在这里插入图片描述

  3. 配置nginx.conf
    打开/usr/local/nginx/conf/nginx.conf文件,按照下列各式修改或者添加

    user root; #在文件的开头加上
    
    http {
    	......
    	
    	server {
    	    listen 80;  #需要监控的端口
    	    server_name  localhost;
    	    
    	    location / {
    	        include uwsgi_params;
    	        uwsgi_pass 127.0.0.1:8080; #与uwsgi中ip:端口相同
    	        uwsgi_send_timeout 600;
    	    }
    		#静态文件
    		location /static { 
    	        alias /home/nginx_test/static/; #静态文件路径
    	    }
    	}
    	......
    }
    

    修改后的样子(文字太多,没截全,红框为修改的内容):
    在这里插入图片描述

  4. 重启Nginx

    /usr/local/nginx/sbin/nginx            # 启动
    /usr/local/nginx/sbin/nginx -s stop    # 停止
    /usr/local/nginx/sbin/nginx -s reload  # 重启
    
  5. 测试

    80端口可以忽略不写在这里插入图片描述

    urls.py:

    在这里插入图片描述
    views.py在这里插入图片描述

四、配置完成报错后如何排查

  1. ip是否正确
  2. 端口是否正确(Nginx配置文件中设置的:listen 80
  3. Nginx和uwsgi连接是否正确(nginx.conf和uwsgi.ini中连接的ip端口是否一致)
  4. 项目是否可启动(使用python manage.py runserver测试)
欢迎关注同名微信公众号:程序猿杂记

程序猿杂记

技术|交流|福利
发布了63 篇原创文章 · 获赞 87 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/weixin_44110998/article/details/104001529