Django的部署可以有很多方式,采用nginx+uwsgi的方式是其中比较常见的一种方式。

  在这种方式中,我们的通常做法是,将nginx作为服务器最前端,它将接收WEB的所有请求,统一管理请求。nginx把所有静态请求自己来处理(这是NGINX的强项)。然后,NGINX将所有非静态请求通过uwsgi传递给Django,由Django来进行处理,从而完成一次WEB请求。

  可见,uwsgi的作用就类似一个桥接器。起到桥梁的作用。

  Linux的强项是用来做服务器,所以,下面的整个部署过程我们选择在Ubuntu下完成。

一、安装Nginx

  Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好。

  Nginx同样为当前非常流行的web服务器。利用其部署Django,我们在此也做简单的介绍。

wuzlxadmin@WUZLX004:/$ sudo apt-get install nginx  # 安装nginx

  启动nginx:

wuzlxadmin@WUZLX004:~$ /etc/init.d/nginx start 

wuzlxadmin@WUZLX004:~$ /etc/init.d/nginx stop

wuzlxadmin@WUZLX004:~$ /etc/init.d/nginx restart 

  配置nginx

nginx默认会读取/etc/nginx/sites-enabled/default文件中的配置:

server {
listen default_server;
listen [::]: default_server;
...........

输入你的ubuntu ip即可访问, 正常是127.0.0.1:80

如果出现上图,则说明Nginx已经安装配置成功。

二、安装uwsgi

wuzlxadmin@WUZLX004:~$ pip3 install uwsgi

测试uwsgi,创建test.py文件:

def application(env, start_response):
start_response('200 OK', [('Content-Type','text/html')])
return [b"Hello World"]

通过uwsgi运行该文件

wuzlxadmin@WUZLX004:~$ uwsgi --http: --wsgi-file test.py

接下来配置Django与uswgi连接。我的Django项目位置为:

uwsgi支持通过配置文件的方式启动,可以接受更多的参数,高度可定制。我们在Django项目下新建ini文件default_app_uwsgi.ini(注意:不是django目录下的同名子文件夹)

# Django-related settings

socket = :

# the base directory (full path)
chdir = /usr/app/DataAnalysis # Django s wsgi file
module = DataAnalysis.wsgi # process-related settings
# master
master = true # maximum number of worker processes
processes = # ... with appropriate permissions - may be needed
# chmod-socket =
# clear environment on exit
vacuum = true

其中chdir是django项目的根目录、module是相对路径指向项目同名目录下的wsgi.py文件

接下来,切换到Django项目目录下,通过uwsgi命令读取default_app_uwsgi.ini文件启动项目。

wuzlxadmin@WUZLX004:/usr/app/DataAnalysis$ uwsgi --ini default_app_uwsgi.ini
[uWSGI] getting INI configuration from default_app_uwsgi.ini
*** Starting uWSGI 2.0. (64bit) on [Tue Jun :: ] ***
compiled with version: 5.4. on May ::
os: Linux-4.10.--generic #~16.04.-Ubuntu SMP Thu Jul :: UTC
nodename: WUZLX004
machine: x86_64
clock source: unix
detected number of CPU cores:
current working directory: /usr/app/DataAnalysis/DataAnalysis
detected binary path: /home/wuzlxadmin/.local/bin/uwsgi
!!! no internal routing support, rebuild with pcre support !!!
chdir() to /usr/app/DataAnalysis
your processes number limit is
your memory page size is bytes
detected max file descriptor number:
lock engine: pthread robust mutexes
thunder lock: disabled (you can enable it with --thunder-lock)
uwsgi socket bound to TCP address : fd
Python version: 3.5. (default, Nov , ::) [GCC 5.4. ]
*** Python threads support is disabled. You can enable it with --enable-threads ***
Python main interpreter initialized at 0x1d6b0d0
your server socket listen backlog is limited to connections
your mercy for graceful operations on workers is seconds
mapped bytes ( KB) for cores
*** Operational MODE: preforking ***
ImportError: No module named '/DataAnalysis'
unable to load app (mountpoint='') (callable not found or import error)
*** no app loaded. going in full dynamic mode ***
*** uWSGI is running in multiple interpreter mode ***
spawned uWSGI master process (pid: )
spawned uWSGI worker (pid: , cores: )
spawned uWSGI worker (pid: , cores: )
spawned uWSGI worker (pid: , cores: )
spawned uWSGI worker (pid: , cores: )

再接下来要做的就是修改nginx.conf配置文件。打开/etc/nginx/nginx.conf文件,如下内容,添加在http花括号里面。

server {
listen ;
server_name 10.202.143.240
charset UTF-;
access_log /var/log/nginx/DataAnalysis_access.log;
error_log /var/log/nginx/DataAnalysis_error.log; client_max_body_size 75M; location / {
include /etc/nginx/uwsgi_params;
uwsgi_pass 10.202.143.240:;
uwsgi_read_timeout ;
}
location /static {
expires 30d;
autoindex on;
add_header Cache-Control private;
alias /usr/app/DataAnalysis/static/;
}
}

listen 指定的是nginx代理uwsgi对外的端口号。

uwsgi_pass 10.202.143.240:8001;指的本机IP的端口号与ini文件配置中的必须一致。

/static 是配置静态文件的地方。可以直接通过10.202.143.240:8081/static访问此文件夹了。

重启nginx。

PS:

操作/etc/nginx/nginx.conf文件的时候,将下面这一句的注释去掉。

server_names_hash_bucket_size ;

另外注意一下  新加的server的位置问题:

http{
server{}
}

测试nginx的configuration是否ok

nginx -t -c /etc/nginx/nginx.conf

有时候我们会遇到报错说host不存在、那是因为没有把host加入到django项目的settings.py文件中。

ALLOWED_HOSTS = ['*']

改一下settings设置如上即可。记得重新运行一下。

Django admin css问题

1、修改django项目的settings.py文件

STATIC_ROOT = os.path.join(BASE_DIR, 'static')

2、执行语句将文件整体从django default路径copy到static文件中

python manage.py collectstatic

现在你会发现static文件夹下面多了一个子文件夹admin。

重启下uwsgi。

这里没找到什么好的方法,只能通过杀死进程、重新开启来执行。

killall - uwsgi

uwsgi --ini /usr/app/DataAnalysis/default_app_uwsgi.ini

Python 关于在ubuntu部署Django项目的更多相关文章

  1. ubuntu 部署Django项目+uwsgi+Nginx

    1.部署框架 Nginx负责静态资源请求,并且把无法处理的请求转发至uwsgi处理 2.安装并配置Nginx 2.1安装 apt-get install nginx (如果安装失败请先升级apt-ge ...

  2. ubuntu部署django详细教程

    教程使用的软件版本:Ubuntu 18.04.1 LTS,django2.0,Python 3.6.5.nginx-1.13.7.uWSGI (2.0.17.1),Ubuntu是纯净的,全新的.下面我 ...

  3. nginx+uwsgi部署Django项目到Ubuntu服务器全过程,以及那些坑!!!

    前言:自己在windows上用PyCharm编写的Django项目,编写完后在windows上运行一点问题都没有,但是部署到服务器上时却Bug百出.百度,CSDN,sf,各种搜索寻求解决方案在历时3天 ...

  4. Ubuntu+uWSGI部署Django项目【鸿篇巨制,事无巨细】

    背景 任务: 视频翻译项目需要在两个服务器上进行通信(国内&海外的阿里服务器). 因为python是主语言,选用了Django 来快速部署API. 注:Django中文文档:https://d ...

  5. 使用uWSGI+nginx部署Django项目

    最近使用django写了一些项目,不过部署到服务器上碰到一些问题,还有静态文件什么的一堆问题,这里总结一下碰到的问题和解决方案,总体思路是按照官方文档走的. 原文地址:http://uwsgi-doc ...

  6. 打造专属测试平台4-使用Docker部署Django项目

    编写完项目代码后,为了稳定的运行,需要将其部署至服务器.这里我选择了Docker去部署Django后端代码. 首先来看看Runoob对Docker的介绍: Docker 是一个开源的应用容器引擎,基于 ...

  7. mac osx 上面部署Django项目 apache+mysql+mod_wsgi

    1.安装Xcode command line tools 首先,编译mysql和Homebrew需要用到Xcode command line tools,所以首先安装command line tool ...

  8. Docker 部署Django项目

    使用docker部署django项目也很简单,挺不错,分享下 环境 默认你已安装好docker环境 django项目大概结构 (p3s) [root@opsweb]# tree opsweb opsw ...

  9. CentOS 6.8 部署django项目一

    CentOS 6.8 部署django项目二 1.安装python3.5(默认是2.6) 参考:http://blog.csdn.net/shaobingj126/article/details/50 ...

随机推荐

  1. 第十一节、Harris角点检测原理(附源码)

    OpenCV可以检测图像的主要特征,然后提取这些特征.使其成为图像描述符,这类似于人的眼睛和大脑.这些图像特征可作为图像搜索的数据库.此外,人们可以利用这些关键点将图像拼接起来,组成一个更大的图像,比 ...

  2. 第二十一节,使用TensorFlow实现LSTM和GRU网络

    本节主要介绍在TensorFlow中实现LSTM以及GRU网络. 一 LSTM网络 Long Short Term 网络—— 一般就叫做 LSTM ——是一种 RNN 特殊的类型,可以学习长期依赖信息 ...

  3. 第二十节,使用RNN网络拟合回声信号序列

    这一节使用TensorFlow中的函数搭建一个简单的RNN网络,使用一串随机的模拟数据作为原始信号,让RNN网络来拟合其对应的回声信号. 样本数据为一串随机的由0,1组成的数字,将其当成发射出去的一串 ...

  4. c#线程1

    开启一个线程的方式: 方式一:Thread t1 = new Thread(Method_1); t1.Start();方式二:委托 Action ac = Method_1; ac.BeginInv ...

  5. JDBC批处理(Batch)MySQL中的表

    在数据库test里先创建表school,内容如下 向school表中一次增加多行.addBatch,executeBatch import java.sql.Connection; import ja ...

  6. (线性dp 最大连续和)POJ 2479 Maximum sum

    Maximum sum Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 44459   Accepted: 13794 Des ...

  7. 剑指Offer_编程题_12

    题目描述 给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方. class Solution { public: double Power(d ...

  8. Tensorflow做阅读理解与完形填空

    catalogue . 前言 . 使用的数据集 . 数据预处理 . 训练 . 测试模型运行结果: 进行实际完形填空 0. 前言 开始写这篇文章的时候是晚上12点,突然想到几点新的理解,赶紧记下来.我们 ...

  9. 网络编程基础【day10】:进程与线程介绍(一 )

    本节内容 1.概述 2.什么是进程? 3.什么是线程? 4.什么是携程? 5.存在的疑问 6.总结 一.概述 我们知道,所有的指令的操作都是有CPU来负责的,cpu是来负责运算的.OS(操作系统) 调 ...

  10. H5新属性FileReader实现选择图片后立即显示在页面上

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...