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

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

1.生命周期

首先理解一下整个 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
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 
#    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

你可能感兴趣的:(利用 Nginx 与 uwsgi 搭建 Django 框架WEB 应用)