Django 部署(Nginx)

Django 部署(Nginx)

https://github.com/django/django

https://code.ziqiangxuetang.com/django/django-nginx-deploy.html

https://www.djangoproject.com/download/

==================

【环境】

Ubuntu18

==================

基础知识储备

当我们发现用浏览器不能访问的时候,我们需要一步步排查问题。

整个部署的链路是 Nginx -> uWSGI -> Python Web程序,通常还会提到supervisord工具。

uWSGI是一个软件,部署服务的工具,了解整个过程,我们先了解一下WSGI规范,uwsgi协议等内容。

WSGI(Web Server Gateway Interface)规范,WSGI规定了Python Web应用和Python Web服务器之间的通讯方式。

目前主流的Python Web框架,比如Django,Flask,Tornado等都是基于这个规范实现的。

uwsgi协议是uWSGI工具独有的协议,简洁高效的uwsgi协议是选择uWSGI作为部署工具的重要理由之一,详细的 uwsgi协议 可以参考uWSGI的文档。

uWSGI是 实现了uwsgi协议,WSGI规范和HTTP协议的 一个C语言实现的软件。

Nginx是一个Web服务器,是一个反向代理工具,我们通常用它来部署静态文件。主流的Python Web开发框架都遵循WSGI规范。

uWSGI通过WSGI规范和我们编写的服务进程通讯,然后通过自带的高效的 uwsgi 协议和 Nginx进行通讯,最终Nginx通过HTTP协议将服务对外透出。

当一个访问进来的时候,首先到 Nginx,Nginx会把请求(HTTP协议)转换uwsgi协议传递给uWSGI,uWSGI通过WSGI和web server进行通讯取到响应结果,再通过uwsgi协议发给Nginx,最终Nginx以HTTP协议发现响应给用户。

有些同学可能会说,uWSGI不是支持HTTP协议么,也支持静态文件部署,我不用Nginx行不行?

当然可以,这么做没问题,但目前主流的做法是用Nginx,毕竟它久经考验,更稳定,当然也更值得我们信赖。

supervisor 是一个进程管理工具。任何人都不能保证程序不异常退出,不别被人误杀,所以一个典型的工程做法就是使用supervisor看守着你的进程,一旦异常退出它会立马进程重新启动起来。

如果服务部署后出现异常,不能访问。我们需要分析每一步有没有问题,这时候就不得不用到Linux中一些命令。

======================================================

Django is a high-level Python Web framework that encourages rapid development

and clean, pragmatic design. Thanks for checking it out.

All documentation is in the "``docs``" directory and online at

https://docs.djangoproject.com/en/stable/. If you're just getting started,

here's how we recommend you read the docs:

* First, read ``docs/intro/install.txt`` for instructions on installing Django.

* Next, work through the tutorials in order (``docs/intro/tutorial01.txt``,

  ``docs/intro/tutorial02.txt``, etc.).

* If you want to set up an actual deployment server, read

  ``docs/howto/deployment/index.txt`` for instructions.

* You'll probably want to read through the topical guides (in ``docs/topics``)

  next; from there you can jump to the HOWTOs (in``docs/howto``) for specific

  problems, and check out the reference (``docs/ref``) for gory details.

* See ``docs/README`` for instructions on building an HTML version of the docs.

Docs are updated rigorously. If you find any problems in the docs, or think

they should be clarified in any way, please take 30 seconds to fill out a

ticket here: https://code.djangoproject.com/newticket

To get more help:

* Join the ``#django`` channel on irc.freenode.net. Lots of helpful people hang

  out there. Seehttps://en.wikipedia.org/wiki/Wikipedia:IRC/Tutorial if you're

  new to IRC.

* Join the django-users mailing list, or read the archives, at

  https://groups.google.com/group/django-users.

To contribute to Django:

* Check out https://docs.djangoproject.com/en/dev/internals/contributing/ for

  information about getting involved.

To run Django's test suite:

* Follow the instructions in the "Unit tests" section of

  ``docs/internals/contributing/writing-code/unit-tests.txt``, published online at

  https://docs.djangoproject.com/en/dev/internals/contributing/writing-code/unit-tests/#running-the-unit-tests

======================================================

/var/www/django/docs/intro$ vi install.txt 

===================

Quick install guide

===================

Before you can use Django, you'll need to get it installed. We have a

:doc:`complete installation guide ` that covers all the

possibilities; this guide will guide you to a simple, minimal installation

that'll work while you walk through the introduction.

Install Python

==============

Being a Python Web framework, Django requires Python. See

:ref:`faq-python-version-support` for details. Python includes a lightweight

database called SQLite_ so you won't need to set up a database just yet.

.. _sqlite: https://sqlite.org/

Get the latest version of Python at https://www.python.org/downloads/ or with

your operating system's package manager.

You can verify that Python is installed by typing ``python`` from your shell;

you should see something like::

    Python 3.x.y

    [GCC 4.x] on linux

    Type "help", "copyright", "credits" or "license" for more information.

    >>>

Set up a database

=================

This step is only necessary if you'd like to work with a "large" database engine

like PostgreSQL, MariaDB, MySQL, or Oracle. To install such a database, consult

the :ref:`database installation information `.

Install Django

==============

You've got three easy options to install Django:

* :ref:`Install an official release `. This

  is the best approach for most users.

* Install a version of Django :ref:`provided by your operating system

  distribution `.

* :ref:`Install the latest development version

  `. This option is for enthusiasts who want

  the latest-and-greatest features and aren't afraid of running brand new code.

  You might encounter new bugs in the development version, but reporting them

  helps the development of Django. Also, releases of third-party packages are

  less likely to be compatible with the development version than with the

  latest stable release.

.. admonition:: Always refer to the documentation that corresponds to the

    version of Django you're using!

    If you do either of the first two steps, keep an eye out for parts of the

    documentation marked **new in development version**. That phrase flags

    features that are only available in development versions of Django, and

    they likely won't work with an official release.

Verifying

=========

To verify that Django can be seen by Python, type ``python`` from your shell.

Then at the Python prompt, try to import Django:

.. parsed-literal::

    >>> import django

    >>> print(django.get_version())

    |version|

You may have another version of Django installed.

That's it!

==========

That's it -- you can now :doc:`move onto the tutorial `.

======================================================

【安装】Python3

$ sudo apt-get install python3

因此需要将Python2与Python3完美切换。

切换方法如下:

$ sudo update-alternatives --install /usr/bin/python python /usr/bin/python2 100

$ sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 200

查看Python的默认启动项

$ sudo update-alternatives --config python

根据数字选择你想要的Python版本。这时,Python及其对应的pip都跟着变成默认的了。

======================================================

$ cd /var/www/django

$ python manage.py runserver 127.0.0.1:8000

======================================================

【安装】Django

/var/www/django$ vi INSTALL 

Thanks for downloading Django.


To install it, make sure you have Python 3.6 or greater installed. Then run

this command from the command prompt:

    python setup.py install

If you're upgrading from a previous version, you need to remove it first.

For more detailed instructions, see docs/intro/install.txt.

【安装】pip

https://pip.pypa.io/en/latest/installing/#installing-with-get-pip-py

$ sudo apt-get install python-pip

或者

$ sudo curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py

【升级】pip

$ sudo pip install --upgrade pip

【安装】 Django

$ git clone https://github.com/django/django.git

【检查】Django是否安装成功

终端上输入 

$ python

>>> import django

>>> django.VERSION

3.0

======================================================

【安装】nginx

$ sudo apt-get install python-dev

$ sudo apt-get install nginx

【安装】supervisor

 supervisor,一个专门用来管理进程的工具,来管理 uwsgi 进程。

$ sudo pip install supervisor

======================================================

使用 uWSGI 部署

【安装】uwsgi

$ sudo pip install uwsgi --upgrade

使用 uwsgi 运行项目

$ uwsgi --http :8001 --chdir /path/to/project --home=/path/to/env --module project.wsgi

--home 指定virtualenv 路径,如果没有可以去掉。project.wsgi 指的是 project/wsgi.py 文件。

======================================================

使用【supervisor】来管理进程

【安装】supervisor

$ sudo pip install supervisor

生成 supervisor 默认配置文件,比如我们放在 /etc/supervisord.conf 路径中:

$ sudo echo_supervisord_conf > /etc/supervisord.conf

打开 supervisor.conf 在最底部添加(每一行前面不要有空格,防止报错):

[program:X]

command=/path/to/uwsgi --http :8003 --chdir /path/to/zqxt --module zqxt.wsgi

directory=/path/to/zqxt

startsecs=0

stopwaitsecs=0

autostart=true

autorestart=true

command 中写上对应的命令,这样,就可以用 supervisor 来管理了。

【启动】supervisor

$ sudo supervisord -c /etc/supervisord.conf

【重启】django程序(项目)

$ sudo supervisorctl -c /etc/supervisord.conf restart django

======================================================

【配置】Nginx

新建一个网站 django

$ sudo vi /etc/nginx/sites-available/django.conf

写入以下内容:

server {

    listen      80;

    server_name django.com;

    charset     utf-8;


    client_max_body_size 75M;


    location /media  {

        alias /var/www/django;

    }


    location /static {

        alias /var/www/django;

    }


    location / {

        uwsgi_pass  unix:///home/tu/zqxt/zqxt.sock;

        include     /etc/nginx/uwsgi_params;

    }

}

【激活】Nginx虚拟机

$ sudo ln-s /etc/nginx/sites-available/django.conf /etc/nginx/sites-enabled/django.conf

测试配置语法问题

sudo nginx -t

重启 nginx 服务器

sudo service nginx reload

你可能感兴趣的:(Django 部署(Nginx))