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

一、前期准备工作

  • 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
    

七、查看博主更多文章

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

水痕01

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值