在研究院服务器部署指南(Django + uwsgi + nginx)

本文介绍了一种常见的Django部署方案,使用nginx+uwsgi配置,详细讲解了部署步骤及注意事项,包括uwsgi和nginx配置文件的编写。

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

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

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

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

二、必要的前提

2.1 准备知识

django

一个基于python的开源web框架,请确保自己熟悉它的框架目录结构。

uWSGI

一个基于自有的uwsgi协议、wsgi协议和http服务协议的web网关

nginx

常用高性能代理服务器

wsgi.py

django项目携带的一个wsgi接口文件
如果项目名叫destiny的话,此文件就位于[destiny/destiny/wsgi.py]

服务器上的nginx

服务器上的nginx已经安装好了,在/etc/nginx 目录下,部署自己的django程序时,最好写自己的conf配置文件,然后按照自己的配置文件启动,配置文件写法下面会说。

uwsgi的安装

首先要在自己的目录下安装anaconda环境,安装包在 /home/updatefiles 目录下,是一个sh文件,启动安装一路回车即可,然后为自己的项目建造虚拟环境,具体做法看这里,建造虚拟环境后,安装你的程序对应各种包,例如django-1.11.2等等,最后在虚拟环境中,使用pip安装uwsgi

上面的工作都完成了,最后在虚拟环境中,使用pip安装uwsgi

pip install uwsgi

测试uWSGI: 新建文件test.py,写入以下内容

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

运行

uwsgi --http 0.0.0.0:8000 --wsgi-file test.py

如果端口占用,使用

lsof -i :8000

列出占用端口的程序的pid号,并使用以下命令杀掉所有占用端口的程序

sudo kill -9 pid

然后浏览 http://127.0.0.1:8000(或http://内网ip:8000、或http://外网ip:8000)查看效果,有”Hello World”输出即安装成功。

首先确定你的django程序没什么问题了,再开始部署流程,往往会有但不仅限于以下问题:

setting.py里debug没关

setting.py里数据库信息没有更换为服务器数据库信息

setting.py里没有设置allow_host

setting.py里没有设置template或static目录信息

 

建立单独的uwsgi配置文件

首先,建议工程目录采取这样的结构

|--工程
   |
   |--Django程序
   |--setting

自己的工程目录下,建立两个文件夹,一个是django程序,一个是setting,用来装部署配置文件。

在setting中建立如destiny.ini的配置文件

下面是个例子(以图书管理系统为例,把该改的地方改成你自己的)

# backend_uwsgi.ini file
[uwsgi]

# Django-related settings
# the base directory (full path)
chdir           = /home/yangtz/booksManage

# Django's wsgi file
module          = booksManage.wsgi

 
# process-related settings
# master
master          = true
# maximum number of worker processes
processes       = 10
# the socket (use the full path to be safe),将socket写入sock文件,安全又便捷
socket          = /home/yangtz/booksManage/booksManage/booksManage.sock
# ... with appropriate permissions - may be needed
chmod-socket    = 666
# clear environment on exit
vacuum          = true

daemonize = /home/yangtz/booksManage/log/uwsgi.log

 

 

建立工程单独的nginx配置文件 

在setting中建立如destiny.conf的配置文件, 
下面是个例子(以图书管理系统为例,把该改的地方改成你自己的)

user www-data;
worker_processes auto;
pid /run/nginx.pid;
# 如果是非root用户,user设为nobody

events {
	worker_connections 768;
	# multi_accept on;
}

http {

	##
	# Basic Settings
	##

	# backend_nginx.conf

	# the upstream component nginx needs to connect to
        upstream bookmanager {
            server unix:/home/yangtz/booksManage/booksManage/booksManage.sock; #读取uwsgi生成的socket文件中的socket信息
            # server 127.0.0.1:8000; # sever信息,有上边sock文件,这个就可以注掉了
        }
        # configuration of the server,最重要的部分
        server {
            # 你的服务站点挂载的端口号
            listen      4020;
            # the domain name it will serve for
            server_name 192.168.100.18; # 一般写你服务器的ip或你的域名
            charset     utf-8;

            # access_log      /home/yangtz/webback/backend/log/nginx_access.log;
            # error_log       /home/yangtz/webback/backend/log/nginx_error.log;

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

            # Finally, 设置总目录,实际就是映射到uwsgi的socket
            location / {
                uwsgi_pass  bookmanager;
                include     /etc/nginx/uwsgi_params; # the uwsgi_params file you install
            }
            
            # 如果有media或者静态文件需要挂载就加上,前后端各自分开的,不加或者注掉就行
            # Django media
            # location /media  {
            #     alias /path/to/your/mysite/media;  # your Django project's media files - amend as required
            # }

            # location /static {
            #    alias /home/yangtz/webback/backend/static; # your Django project's static files - amend as required
            # }
        }


}

 

最后启动uwsgi和nginx

uwsgi --ini  /×××/你的工程/setting/destiny.ini

nginx -c  /×××/你的工程/setting/destiny.conf (如果权限问题,你是root的话,可以在前面加sudo)

如果是非root用户,不能listen 1024以下的端口。

那么只好,在你的conf文件中配置user nobody; listen <1024+>;

 

温馨提示:

使用 lsof -l 查看端口占用

kill 进程号 (杀掉进程,只能kill自己的进程)

 

前端代码部署只需将包含前端代码文件夹放到 tomcat/webapps下,然后到tomcat/bin里启动 ./startup.sh即可

转载于:https://my.oschina.net/u/2277123/blog/997749

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值