使用nginx + uwsgi socket的方式来部署Django项目

时间:2022-06-02 00:15:20

一、前期准备工作

  • 1、在自己的服务器或者虚拟机上创建一个空间(本案例使用ubuntu的阿里云服务器)

    mkvirtualenv [空间名称]
    **查看全部的空间**
    workon
    **进入某一个空间**
    workon 空间名称
  • 2、把代码传到服务器上
  • 3、运行项目看看会正常吗

    python manage.py runserver
  • 4、关闭Debug模式(在项目的settings.py文件下)

    DEBUG = False
  • 5、修改允许所有的地方都可以访问

    **settings.py文件下**
    ALLOWED_HOSTS = ['*']
  • 6、自己实现一个404.html500.html模板,放在django能识别的templates文件夹中就可以了

    如果用pycharm创建的项目最外面就有templates目录

  • 7、运行命令试跑下

    python manage.py runserver 0.0.0.0:8000
  • 8、本地浏览器访问

二、使用nginx + uwsgi socket的方式来部署Django

也许你会疑惑,根据上面的方式就能直接运行项目了,为什么还要搞一个nginx + uwsgi socket,其实上面仅仅是一个测试环境,不能用于真实的项目部署上

三、安装工具

  • 1、 安装nginx服务器

    sudo apt-get install nginx
  • 2、 安装uwsgi(属于python包)

    sudo pip install uwsgi

四、测试刚刚安装的nginxuswgi是否成功

  • 1、启动nginx和停止nginx命令

    sudo service nginx start # 启动nginx
    sudo service nginx stop # 关闭nginx
    sudo /etc/init.d/nginx restart #重启
  • 2、直接输入网址看看是否出现nginx的欢迎页面

  • 3、在刚刚的项目中创建一个test.py文件测试uswgi

    def application(env, start_response):
    start_response('200 OK', [('Content-Type','text/html')])
    return ["Hello World"]
  • 4、运行命令

    uwsgi --http :8000 --wsgi-file test.py
    uwsgi --http :端口号 --wsgi-file 文件名
  • 5、浏览器输入网址访问成功显示hello word表示安装成功

  • 6、使用uwsgi测试自己上传的项目

    uwsgi --http :8000 --module 项目名称.wsgi

五、补充说明

  • 1、端口号被占用的处理方式

    lsof -i :9000 # 查看9000号端口
    (djangodemo)root@iZ941w016mwZ:/home/djangodemo/test02# lsof -i :9000
    COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
    nginx 21572 root 7u IPv4 2549884 0t0 TCP *:9000 (LISTEN)
    nginx 21573 nobody 7u IPv4 2549884 0t0 TCP *:9000 (LISTEN)
    nginx 21574 nobody 7u IPv4 2549884 0t0 TCP *:9000 (LISTEN)
    nginx 21575 nobody 7u IPv4 2549884 0t0 TCP *:9000 (LISTEN)
    nginx 21576 nobody 7u IPv4 2549884 0t0 TCP *:9000 (LISTEN)

    # 杀死进程释放端口

    sudo kill -9 21572 21573 21574 21575 21576
  • 2、查看某一个程序的进程

    ps aux | grep 程序名称(nginx/mysql)

六、部署项目

  • 1、下载uwsgi_param直接放到项目中就可以
  • 2、在项目目录下创建一个项目名称_nginx.conf的配置文件


    # 配置uwsgi的访问的

    upstream django {
    # server unix:///path/to/your/mysite/mysite.sock; # for a file socket
    server 127.0.0.1:8001; # for a web port socket (we'll use this first)
    }


    # 配置nginx的请求

    server {
    # the port your site will be served on
    listen 8000; # 端口好
    # the domain name it will serve for
    server_name 1**.**.156.230; # 域名或者ip地址
    charset utf-8;

    # max upload size
    client_max_body_size 75M; # adjust to taste

    # 媒体的存放路径
    location /media {
    alias /home/djangodemo/test02/media; # 你项目中的媒体存放路径(在本项目中创建一个media,使用pwd查看当前的位置)
    }

    location /static {
    alias /home/djangodemo/test02/static; # 你项目中静态文件的存放路径
    }

    # Finally, send all non-media requests to the Django server.
    location / {
    uwsgi_pass django;
    include /home/djangodemo/test02/uwsgi_params; # 上一步你存放的uwsgi_params路径
    }
    }
  • 3、收集全部的静态文件

    • 1、在setting.py中配置

      STATIC_ROOT = os.path.join(BASE_DIR, "static/")
    • 2、运行命令会自动在项目下创建一个static文件

      python manage.py collectstatic
  • 4、创建一个软连接将第二步生成的项目名称_nginx.conf文件映射到nginx配置文件中

    sudo ln -s 当前目录/项目名称_nginx.conf /etc/nginx/conf.d/

    #本人的


    #sudo ln -s /home/djangodemo/test02/test02_nginx.conf /etc/nginx/conf.d
  • 5、重启nginx

    sudo /etc/init.d/nginx restart
  • 6、重启uwsgi(还是测试刚刚创建的软连接)

    uwsgi --socket :8001 --wsgi-file test.py
  • 7、在浏览器访问8000端口看看可以显示hello word(不行重复4-6步骤)

  • 8、启动刚刚那个项目

    uwsgi --socket :8001 --module test02.wsgi

    # 指定静态文件路径

    uwsgi --http 0.0.0.0:8000 --module test02.wsgi --static-map=/stat=static