ubuntu下部署Django Web的两种方法

本文介绍如何使用Django自带服务器及uwsgi+nginx部署Django Web应用。包括利用screen保持Django服务器持续运行的方法,uwsgi与Django的配置,以及nginx的配置细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、利用 django 自带服务器框架发布 web

系统管理员经常需要 SSH  或者 telent  远程登录到 Linux  服务器,经常运行一些需要很长时间才能完成的任务,比如系统备份、 ftp  传输等等。通常情况下我们都是为每一个这样的任务开一个远程终端窗口,因为它们执行的时间太长了。必须等待它们执行完毕,在此期间不能关掉窗口或者断开连接,否则这个任务就会被杀掉,一切半途而废了。 这时screen 就可以派上用场了。

screen 进入一个新建的 screen ,此时关闭 shell 窗口, screen 为 detached 状态, exit 为退出回到正常的 shell 窗口,此时关闭 shell 窗口为 attached 状态

当在正常窗口要连接 detached 窗口时,命令: screen -r 查看所有 screen 及 pid ,当要连接某个的时候,命令: screen -r [pid],当要停止某个 screen 并且销毁时,我的作法是 kill -s 9 [pid],此时对应 screen 为 dead???  状态,再执行 screen -wipe清除即可。

参考: http://www.cnblogs.com/mchina/archive/2013/01/30/2880680.html

Django 自带了发布 Web 的功能,如命令

python manage.py runserver 8080

其服务器日志直接在接入 shell 界面输出( default ),通过一定设置应该也可以重定向到 log 文件中。

然而,当我们将 shell 关闭的时候,会发送关闭信号给 django 服务器,导致服务器关闭。有一种办法可以解决,利用 screen 。

只需新建一个screen,再输入指令python manage.py runserver 0.0.0.0:8080 & 即可。

缺 0.0.0.0:  或者  & 都不能成功。

二、利用 uwsgi+nginx 发布 django web

配置之前,随便看看这两篇,开始按照第一篇完全来是成功的,第二篇就不行了,然后就各种 google

http://django-china.cn/topic/101/

http://django-china.cn/topic/124/

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

本机部件为 python2.7 、 django1.7 、 nginx1.6 、 ubuntu12.04

先说说我的 django 工程文件部署情况

cimc2>

备注: cimc2 为工程中的主文件, hello 为 app 文件, static 存放各种要用到样式文件, js 或者 css , templates 存放各种 html 的模板文件。

1 、 uwsgi 与 django 

在与 manage.py 同级的文件目录下新建 django_socket.ini 文件,也可以新建 django_socket.xml文件,不过还要再装libxml( 命令: sudo apt-get install libxml2-dev ) ,因为编译 uwsgi 前需要将 libxml 编译,所以要先安装 libxml 再,安装 uwsgi( 网上的说法 ) ,所以要先卸载掉,甚至把文件夹 rm 掉再按照 libxml->uwsgi 进行。

不过我用 xml 方式没有成功,不知为什么,就配置 django_socket.ini 文件。

uwsgi 配置文件配置方法可以参考:

http://www.cnblogs.com/zhouej/archive/2012/03/25/2379646.html

http://blog.youkuaiyun.com/sasoritattoo/article/details/17187949

我是这么搞的:

[uwsgi]
socket=127.0.0.1:8011
pidfile=/var/run/nginx.pid
master=true
chmod-socket=777
enable-threads=true
workers=4
wsgi-file=django_wsgi.py
logdate=true
daemonize=/home/gugugujiawei/DjangoServer/cimc2/log/django.log

解释一下:

[uwsgi]

socket------------- 用于 uwsgi 与 nginx 的通信

pidfile------------ 当失去权限时写入信息到该处

master=true

chmod-socket=777---uwsgi 和 nginx 通信的 socket 权限,网上说 644 ,反正 777 我可以

enable-threads----- 允许多线程通信,感觉必须的

workers------------ 开启多个线程,一般 4 个, kill 时可以一次杀掉 4 个

wsgi-file----------uwsgi 和 django 的配置文件

logdate------------ 随便加进去的

daemonize---------- 日志文件,不写的话就和发布 python 一样裸奔在 shell 界面

在与 manage.py 同级的文件目录下新建 django_wsgi.py 文件,原因在上面

#coding:utf-8
import os
import sys
from django.core.wsgi import get_wsgi_application
reload(sys)
sys.setdefaultencoding('utf8')
 
sys.path.append(os.path.abspath(os.path.dirname(__file__)))
os.environ.setdefault("DJANGO_SETTINGS_MODULE","cimc2.settings"
)
#from django.core.handlers.wsgi import WSGIHandler
#application=WSGIHandler()
application=get_wsgi_application()

搞定这里之后,只是完成 uwsgi 与 django 的配置,接下来才是辛苦(调了好久)

2 、 Nginx

在捣腾 nginx 的时候,确实发现它的不少好处,规划性好,维护性强,各种配置用得好的话,可以优化你的系统,方便维护,也可以做出很好的负载均衡和系统资源分配。

在 /etc/ngin 目录下可以看到

\

看到网上 n 多种方法,各种试,以下亲测可用

在 sites-available 下有个 default 文件,该文件用来改变端口号即可,如

\

配置文件在这里,nginx.conf ,按照之前工程文件的部署情况,这里可以这么写:

user root;
worker_processes 4;
pid /run/nginx.pid;
 
events {
worker_connections 768;
# multi_accept on;
}
 
http {
 
##
# Basic Settings
##
 
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
# server_tokens off;
 
# server_names_hash_bucket_size 64;
# server_name_in_redirect off;
 
include /etc/nginx/mime.types;
default_type application/octet-stream;
 
##
# Logging Settings
##
 
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
 
##
# Gzip Settings
##
 
gzip on;
gzip_disable "msie6";
 
# gzip_vary on;
# gzip_proxied any;
# gzip_comp_level 6;
# gzip_buffers 16 8k;
# gzip_http_version 1.1;
# gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
 
##
# Virtual Host Configs
##
 
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
server{
listen 8080;
server_name 127.0.0.1;
charset utf-8;
client_max_body_size 25M;
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
# try_files $uri $uri/ =404;
include uwsgi_params;
uwsgi_pass 127.0.0.1:8011;
access_log off;
}
location /static{
alias /home/gugugujiawei/DjangoServer/cimc2/hello/static;
}
}
 
}
 
 
#mail {
#	# See sample authentication script at:
#	# http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript
# 
#	# auth_http localhost/auth.php;
#	# pop3_capabilities "TOP" "USER";
#	# imap_capabilities "IMAP4rev1" "UIDPLUS";
# 
#	server {
#	 listen     localhost:110;
#	 protocol   pop3;
#	 proxy      on;
#	}
# 
#	server {
#	 listen     localhost:143;
#	 protocol   imap;
#	 proxy      on;
#	}
#}

user 改为 root , uwsgi_pass 与 ini 中 socket 配置端口对应(注意别被其他程序占用了),再补充一点:

Html 里面如:

<script src="/static/js/jquery-1.11.0.js" ></script>

Settings.py 里面如:

\

还有STATIC_URL=’/static/’, STATIC_ROOT 我没加进去。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值