部署django到服务器

Posted jackzz

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了部署django到服务器相关的知识,希望对你有一定的参考价值。

部署

服务器环境配置

  • 在本地的虚拟环境中,项目根目录下,执行命令收集所有的包

  •  pip freeze > plist.txt 
  • 安装并创建虚拟环境,如已创建则跳过此步 sudo apt-get install python-virtualenv 


  • sudo apt-get install python-virtualenv sudo easy_install virtualenvwrapper mkvirtualenv [虚拟环境名称]

    workon [虚拟环境名称]

    pip install -r plist.txt
     

     

  • 更改settings.py文件

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

     

  • 启动服务器,运行正常,但静态文件无法加载

     

    WSGI


     

  • 在生产环境中使用WSGI

  • WSGI:Web服务器网关接口,英文为python web server gateway interface,缩写wsgi,是python应用程序或框架和web服务器之间的一种接口,被广泛接受

  • WSGI没有官方的实现,因为WSGI更像是一个协议,只要遵照这些协议,WSGI应用都可以在任何服务器上运行

  • 命令 django-admin startproject会生成一个简单的wsgi.py文件,确定了settings、application对象

    • application对象:在python模块中使用application对象与应用服务器交互
    • settings模块:Django需要导入settings模块,这里是应用定义的地方

     

 

uWSGI

  • uwsgi实现了wsgi的所有接口,是一个快速、自我修复、开发人员和系统管理员友好的服务器

  • uWSGI代码完全用C编写

  • 安装uWSGI

    pip install uwsgi

     

    [uwsgi]
    socket=外网ip:端口(使用nginx连接时,使用socket)
    http=外网ip:端口(直接做web服务器,使用http)
    chdir=项目根目录
    wsgi-file=项目中的wsgi.py文件的目录,相对于项目根目录
    processes=4
    threads=2
    master=True
    pidfile=uwsgi.pid
    daemonize=uswgi.log

     

     

  • 停止:uwsgi --stop uwsgi.pid
  • 重启:uwsgi -- reload uwsgi.pid
  • 使用http协议查看网站运行情况,运行正常,但是静态文件无法加载
  • socket 和http 地址选一个即可,另外一个注掉,另外需要注意端口占用

 

nginx

  • 使用nginx的作用

    • 负载均衡:多台服务器轮流处理请求
    • 反射代理:隐藏真实服务器
  • 实现构架:客户端请求nginx,再由nginx请求uwsgi,运行django框架下的python代码

  • nginx+uwsgi也可以用其他框架的python web代码,不限于django

  • 到官网下载nginx压缩文件或通过命令安装

  • sudo apt-get nginx

     

  • 这里以下载压缩文件为例

     
    解压缩:
    tar zxvf nginx-1.6.3.tar.gz
    ?
    进入nginx-1.6.3目录依次执行如下命令进行安装:
    ./configure
    make
    sudo make install

     

  • 查看版本:sudo sbin/nginx -v

  • 启动:sudo sbin/nginx

  • 停止:sudo sbin/nginx -s stop

  • 重启:sudo sbin/nginx -s reload

  • 通过浏览器查看nginx运行结果

  • 指向uwsgi项目:编辑conf/nginx.conf文件

     
    sudo conf/nginx.conf
    在server下添加新的location项,指向uwsgi的ip和端口
    location /{
        include uwsgi_params;将所有的参数转到uwsgi下
        uwsgi_pass uwsgi的ip和端口;
    }

     

以上是关于部署django到服务器的主要内容,如果未能解决你的问题,请参考以下文章

导致资产预编译在heroku部署上失败的代码片段

python之Django部署

DJANGO项目部署到服务器上

Fabric 和 Django 部署场景

Django 博客开发教程 15 - 使用 Fabric 自动化部署

Django 博客开发教程 15 - 使用 Fabric 自动化部署