直到将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来进行部署,但是…