直到将Django部署到NanoPI为止

概述

Django是一个用于创建Web应用程序的功能强大的框架。由于它有内置的HTTP引擎,所以它可以独立于其他软件在这个引擎上运行,直到调试完成。但是在发布工程时,您可以通过WSGI服务器使用Nginx或Apache 2作为前端。如果你调用Python,吞吐量和稳定性是不平衡的。以下是在NanoPI Neo2上安装Python3.5、Django2.0、Nginx、uwsgi以及将Django工程部署到Armbian(Debian stretch)的步骤。

首先

Django是一個強大的框架,用於創建Web應用程序。它內部集成了HTTP引擎,因此在調試結束之前不需要依賴其他軟件即可在該引擎中運行,但在公開成果物時,通過將Nginx或Apache2作為前端,通過WSGI服務器調用Python可以大幅提高吞吐量和可靠性。在這裡,我們將介紹在NanoPI Neo2上安裝Armbian(Debian stretch)、Python 3.5、Django 2.0、Nginx和uWSGI,並展示部署Django成果物的步驟。

安装

Django、Python、pip正常可用,我们将省略讨论这些。
nginx则是…

apt install nginx uwsgi uwsgi-plugin-python

请安装。

制作Django项目

cd /home/www/
django-admin startproject dj
cd dj
vi dj/setting.py

允许的主机 = [‘192.168.254.30’]
请将NanoPI的IP地址放入这样。通常情况下,可以从本地主机连接到浏览器,但是对于没有显示器的NanoPI,需要从其他机器进行连接,所以这个更改是必需的。
为了确保,我们将使用内置服务器进行确认。

python manage.py runserver 0:8000

部署

转到/etc/nginx/sites-available目录下,使用vi命令编辑django.conf文件。

# the upstream component nginx needs to connect to
upstream django {
    server 127.0.0.1:8001; # for a web port socket (we'll use this first)
}

# configuration of the server
server {
    # the port your site will be served on
    listen      8000;
    # the domain name it will serve for
    server_name ['192.168.254.30']; # substitute your machine's IP address or FQDN
    charset     utf-8;

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

    location /static {
        alias /home/www/dj/static; # your Django project's static files - amend as required
    }

    # Finally, send all non-media requests to the Django server.
    location / {
        uwsgi_pass  django;
        include     /home/www/dj/uwsgi_params; # the uwsgi_params file you installed
    }
}

创建一个链接。

ln -s django.conf ../sites-enable

准备 /home/www/dj/uwsgi_params。

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;

我会编写uwsgi的启动脚本。
虽然实际上只需要在/etc/uwsgi/apps-arivale中设置参数,但是由于出了些问题,我不得不自己编写了/etc/init.d/django脚本。

#!/bin/sh
### BEGIN INIT INFO
# Provides:          uwsgi
# Required-Start:    $local_fs
# Required-Stop:     $local_fs
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: uwsgi
### END INIT INFO

case $1 in
        start)
                (cd /home/www/dj;
                uwsgi --master --socket :8001 --module dj.wsgi \
                  --uid www-data --gid www-data \
                  --processes 2 \
                  --pidfile /var/run/uwsgi.pid \
                  --daemonize /var/log/nginx/uwsgi.log
                )
                ;;
        stop)
                kill -9 `cat /var/run/uwsgi.pid`;
                ;;
        restart|reload)
                $0 stop;
                $0 start;
                ;;
esac
exit 0;

将其设置为自动启动。

update-rc.d django defaults

将服务器重新启动。

systemctl restart django nginx

如果能够访问到 http://192.168.254.30:8000 ,那就算成功。

最后

在部署Django方面的信息似乎意外地很少。即使有一些,也可能涉及到使用apache2、nginx或uwsgi,但并未对其进行守护进程化,这导致了很多不能被嵌入的麻烦。实际上,我本人也想使用Lighttpd来进行部署,但是…

广告
将在 10 秒后关闭
bannerAds