利用 Nginx 与 uwsgi 搭建 Django 框架WEB 应用

本篇所使用的环境为 Ubuntu 16.04 LTS 云提供商为 cloud.google.com

1.生命周期

首先理解一下整个 WEB 应用的

WEB 应用的生命周期
WEB 应用的生命周期
1.Ubuntu 为操作系统运行环境
2.高性能 Nginx
3.虚拟的 Python 运行环境(原因为这样不会影响系统内其他服务)
4.是基于 Django 封装的更高的WEB 框架
5.uWSGI 用来桥接 Nginx 与 Django 的通道
6.配置 Nginx 
7.配置 uWSGI

2.配置服务器( Ubuntu 16.04 LTS)

如果不差钱,随意选择一个运营商即可,如果只是想体会一下,推荐使用 Google Cloud ,免费,且拥有台湾节点,对大陆友好度很高,缺点是申请需要翻墙

1.准备纯净的系统(建议初始化的时候配置 SSH 密钥会很方便)
2.利用 SSH 连接服务器,更新必要的系统软件(可选,建议)
#获取更新列表
sudo apt-get update

#更新系统
sudo apt-get dist-upgrade
  1. Tips:如果觉得主机名很长且名字不好看可用 hostname 主机名 来修改, 再输入su 刷新一下即可看到修改后的主机名
  2. 如果登录用户为非root用户,可通过 sudo -i 来进行提权操作
3.安装 Nginx

1.安装

#安装 Nginx
apt install Nginx

2.测试
测试 Nginx 服务器可用性
用浏览器打开服务器 IP 地址就可以看到 Nginx 欢迎页面即表示安装成功

Tips:
Nginx 的启动/停止/重启 命令

/etc/init.d/nginx start(& stop/ restart)
4.虚拟Python 环境与系统的关系
2
2
5.安装虚拟环境
#如果想使用 Python3.x 的环境 来部署你的 WEB 应用,可将下面的pip 更改为 pip3

#安装虚拟环境
pip install virtualenv

#如果出现以下错误,请尝试使用 export LC_ALL=C 这个命令来解决此问题
#root@instance-5:~# pip3 install virtualenv
#Traceback (most recent call last):
 # File "/usr/bin/pip3", line 11, in <module>
#    sys.exit(main())
#  File "/usr/lib/python3/dist-packages/pip/__init__.py", line 215, in main
#    locale.setlocale(locale.LC_ALL, '')
#  File "/usr/lib/python3.5/locale.py", line 594, in setlocale
#    return _setlocale(category, locale)
#locale.Error: unsupported locale setting


#如果提示 pip 版本过低,可通过下面的命令来升级
pip install --upgrade pip

#创建虚拟环境(选择合适的目录,本文选用的目录为 /var/www/
#前进到相关目录
cd /var/www

#创建虚拟环境
virtualenv env27

#进入虚拟环境
source env27/bin/activate

#如果你的 终端命令前显示 (env27) root@name:/var/www# 就代表你已经进入虚拟环境

#查看当前 Python 版本
Python -V

6.安装 Django 与 Mezzanine
#安装 Django
pip install Django

#安装 Mezzanine (直接安装这个也可以,该框架依赖 Django, 会自动将 安装Django)
pip install Mezzanine

#创建项目
mezzanine-project mySite

#前进到 mySite
cd mySite

#目录下应该会有以下文件
deploy (部署相关模版)
fabfile.py (不知道有啥用,没细看)
__init__.py 
mySite  (网站目录)
manage.py   (管理文件)
requirement.txt (依赖)

#创建数据库
python manage.py createdb

#根据提示输入相关信息即可

#收集相关静态资源
python manage.py collectstatic

#提示后输入 YES 即可

#测试当前项目
python manage.py runserver 0.0.0.0:8000

打开浏览器测试的时候你会发现这个错误


原因是我们需要更改一下配置文件的 ALLOWED_HOSTS

#Ctrl + C 停止你的服务

#编辑文件
vi mySite/setting.py
找到 ALLOWED_HOSTS 字段
#修改为
ALLOWED_HOSTS = ["这里填写你的服务器 IP 地址"]
#保存即可

#测试当前项目
python manage.py runserver 0.0.0.0:8000

这时用浏览器打开 你的服务器IP:8000 就会看到项目已经跑起来

到这里说明虚拟环境内部的项目配置问题已经搞定了,接下来要配置 Nginx 与 uwsgi 相关文件

7.安装 uwsgi
#安装 uwsgi
pip install uswgi

#查看当前所在路径,是否为 /var/www/mySite
pwd

#通过 uwsgi 来跑起来网站
uwsgi --http :8000 --module mySite.uwsgi.ini

打开网站以后会发现和直接 runserver 方式有些不同,没有加载出相关 css 样式,不用担心,只是静态文件没有配置,接下来会配置,跟着教程继续往下走吧

8.配置 Nginx 与 uwsgi 联系

先来张介绍图


提供三个必要文件

#Nginx.conf

upstream django {
    server 127.0.0.1:8001;
}

server {
    #监听端口
    listen 80;
    #网站的域名,
    server_name localhost;
    #符号表
    charset utf-8;
    # 最大上传文件
    client_max_body_size 75M;
    #静态文件路径
    location /static {
        alias /var/www/mySite/static;
    }
    #网站路径
    location / {
        uwsgi_pass django;
        include /var/www/uwsgi_params;
    }
}
# uwsgi.ini

[uwsgi]
#网站目录
chdir = /var/www/mySite
#配置文件
module =  mySite.wsgi
#家目录
home = /var/www/env27
#不知道干啥用的
master = true
# 开十个线程
processes = 10
# 端口与上个 Nginx 的配置文件相同
socket = :8001
chmod-socket = 666
vacuum = true
#uwsgi_params 
#nginx 与 uswgi 的对应集合
    
uwsgi_param  QUERY_STRING       $query_string;
uwsgi_param  REQUEST_METHOD     $request_method;
uwsgi_param  CONTENT_TYPE       $content_type;
uwsgi_param  CONTENT_LENGTH     $content_length;

uwsgi_param  REQUEST_URI        $request_uri;
uwsgi_param  PATH_INFO          $document_uri;
uwsgi_param  DOCUMENT_ROOT      $document_root;
uwsgi_param  SERVER_PROTOCOL    $server_protocol;
uwsgi_param  REQUEST_SCHEME     $scheme;
uwsgi_param  HTTPS              $https if_not_empty;

uwsgi_param  REMOTE_ADDR        $remote_addr;
uwsgi_param  REMOTE_PORT        $remote_port;
uwsgi_param  SERVER_PORT        $server_port;
uwsgi_param  SERVER_NAME        $server_name;

开始建立 Nginx 与网站目录做关联

cd /etc/nginx/sites-enabled

#会发现有一个 default 软连接到 /etc/nginx/sites-available/default
ll default 

#先删除 
rm -rf default

#建立软连接
ln -s /var/www/nginx.conf mySite

#重新启动 Nginx 服务
/etc/init.d/nginx restart

#提示 ok 代表已启动成功

#前进到网站目录下
cd /var/www/

#再次启动 uwsgi
uwsgi --ini uwsgi.init

到目前为止 网站已经可以部署了.

接下来配置 uswgi 自启动(不知道是不是正统的做法,但是可以解决此问题)

接下来的命令要退出虚拟环境

#真实环境要安装 uwsgi(依旧为 Python3要将 pip 更换为 pip3)
pip install uwsgi

#编辑启动文件
vim /etc/rc.local

#添加以下语句
/usr/local/bin/uwsgi --ini /var/www/uwsgi.ini

#重启服务器就可以打开域名或者 IP 地址看到网站已经正常工作了

'''
2017年11月27日更新
部署改为supervisor

'''

参考文献:
uWSGI官方文档
自由小径
pip-install-locale-error-unsupported-locale-setting

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,132评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,802评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,566评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,858评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,867评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,695评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,064评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,705评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,915评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,677评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,796评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,432评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,041评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,992评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,223评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,185评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,535评论 2 343

推荐阅读更多精彩内容