使用树莓派 + Nginx + uWSGI来搭建Web服务器并部署Django应用程序,尝试第二部分
首先
本文是《用Raspberry Pi + Nginx + uWSGI建立Web服务器并部署Django应用程序》系列文章的第一部分的续篇。如果您还没有阅读过之前的部分,请先去看一看。
在第一部分中,我们进行了Python虚拟环境的配置以及Django和uWSGI的安装和测试。接下来,我们将安装Web服务器Nginx。请一直支持到最后!
在安装Nginx之前
在安装之前简要介绍一下Nginx。
Nginx是一种Web服务器。当浏览器发出静态内容请求时,Nginx会响应并返回相应内容。对于动态内容,则会将请求发送给应用服务器(在本配置中为uWSGI)。
作为一种主要的Web服务器,Apache是很常见的选择,但与Apache相比,Nginx更轻量且能够处理大量请求。以前Apache曾是主流Web服务器,但近年来Nginx的份额大幅增加。
如果你对此有兴趣,请阅读此处有关详细比较的内容。比较了Apache和nginx的优缺点,来确定应该选择哪个。
如果您之前是从第一步继续进行的,那么我认为您现在处于虚拟环境(Test)中,所以先退出虚拟环境。
如果您按照第一步的指示进行,终端显示应该是这样的。
# その1の通りに進めている場合、ターミナルの表示は
(Test) pi@raspberrypi:~/Test/mysite $
# となっている筈なので、exitコマンドで仮想環境から抜けます
(Test) pi@raspberrypi:~/Test/mysite $ exit # exitコマンド
# (Test)が取れ、仮想環境から抜けた事がわかります
pi@raspberrypi:~/Test/mysite $
从虚拟环境退出后,我们将开始安装Nginx。虽然实际上我们想要安装最新版本,但因为有些麻烦,所以这次我们将省略(将在日后另行说明)。
(6/17更新)
我已经写了一篇关于安装最新版本Nginx的文章。请参考以下内容,在Raspberry pi上安装最新版本的Nginx。
安装Nginx
那么我们来安装Nginx吧。安装完成后,让我们尝试启动一下。
$ sudo apt install nginx # Nginxのインストール
$ sudo /etc/init.d/nginx start # Nginxの起動
# 起動が成功すると以下が表示されます
[ ok ] Starting nginx (via systemctl): nginx.service.
成功启动后,请尝试访问 http://127.0.0.1:80 。如果一切正常,应该会显示下方的“Welcome to nginx!”页面。
这样就确认了浏览器和Web服务器的协作。
Nginx的配置
接下来,您需要对Nginx进行配置。在/etc/nginx目录下,我认为应该有一个名为uwsgi_params的文件。请将其复制到/home/pi/Test/mysite目录并粘贴。
如果在/etc/nginx目录下没有找到该文件,请按照以下内容将其保存为uwsgi_param文件,并放置在/home/pi/Test/mysite目录中。
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;
接下来,在/etc/nginx目录下创建sites-available和sites-enabled文件夹,并在sites-available中创建mysite_nginx.conf文件。
$ sudo mkdir /etc/nginx/sites-available # sites-availableフォルダ作成
$ sudo mkdir /etc/nginx/sites-enabled # sites-enabledフォルダ作成
$ cd /etc/nginx/sites-available # 作成したsites-availableに移動
$ sudo vi mysite_nginx.conf # mysite_nginx.confを編集
请在mysite_nginx.conf文件中输入以下内容并保存。如果您是以pi用户的身份按照本文进行操作,则可以使用复制粘贴。其他情况下,请根据需要更改目录并保存。
# mysite_nginx.conf
# the upstream component nginx needs to connect to
upstream django {
# server unix:///home/pi/Test/mysite/mysite.sock; # for a file socket
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 example.com; # substitute your machine's IP address or FQDN
charset utf-8;
# max upload size
client_max_body_size 75M; # adjust to taste
# Django media
location /media {
alias /home/pi/Test/mysite/media; # your Django project's media files - amend as required
}
location /static {
alias /home/pi/Test/mysite/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/pi/Test/mysite/uwsgi_params; # the uwsgi_params file you installed
}
}
完成保存后,将mysite_nginx.conf文件复制到/home/pi/Test/mysite目录下。复制完成后,创建一个符号链接。
# mysite_nginx.confのコピペ
$ cp /etc/nginx/sites-available/mysite_nginx.conf ~/Test/mysite
# シンボリックリンクの作成
$ sudo ln -s ~/Test/mysite/mysite_nginx.conf /etc/nginx/sites-enabled/
检查在Nginx启动时是否会加载创建的符号链接sites-enabled。打开/etc/nginx/nginx.conf文件,确认是否已添加include /etc/nginx/sites-enabled/*;这一行。如果没有,请将其添加在include /etc/nginx/conf.d/*.conf;的下一行。这样,在Nginx启动时,将读取sites-enabled目录下的所有文件。
Django静态文件的部署
将Django静态文件解压到mysite/static目录中。在/home/pi/Test/mysite/mysite的settings.py文件末尾添加以下一行。
# 末尾に以下の一行を追加
STATIC_ROOT = os.path.join(BASE_DIR, "static/")
让我们按照以下的步骤来执行命令,先激活虚拟环境Test,然后进行Django静态文件的展开。
# Testディレクトリに移動してから仮想環境Testを実行
$ cd ~/Test
$ pipenv shell
$ cd mysite
# Django静的ファイルを展開
$ python manage.py collectstatic
你应该会在Test/mysite目录下生成一个名为static的文件夹及其子文件夹。请再次确认一下,以防万一。
确认媒体文件
# /home/pi/Test/mysite に移動
$ cd /home/pi/Test/mysite
# mediaフォルダを生成
$ mkdir media
# media.pngを保存後、Nginxを再起動
$ sudo /etc/init.d/nginx restart
猫真的很可爱。那么这次就结束在这里。下一部分是最后一部分,在前面的两个部分中我们已经安装了uWSGI和Nginx,现在将把Django应用程序部署起来。
下次更新(6月9日更新)
使用树莓派 + Nginx + uWSGI构建Web服务器并部署Django应用程序,第三部分(最终篇)