整理使用NGINX和gunicorn来运行Django的流程(仅用于个人备忘)
首先
由于努力学习后,在将Django部署到远程主机后,我对NGINX和gunicron的配置变得有些困惑,因此为了自己做个备忘录。
やりたいこと
必要な作業の流れ
1. NGINXがDjangoサイトを呼び出す用の設定ファイル作成
2. Djangoを呼び出す設定ファイルへのシンボリック・リンク作成
3. NGINXとgunicornを再起動
我想做的事情 (Wǒ zuò de
我想在云端部署使用Django开发的应用程序,并且希望通过Web服务器(NGINX)处理一些轻量级的任务,比如只是显示静态文件,而将一些动态的重量级任务交给AP服务器(gunicorn)来处理。
-
- nginx
主に静的ファイルを表示するウェブサーバー
自分自身は重たい仕事はしない(ngninxにさせるのはHTMLの表示くらい)
ロードバランサー的に振る舞い、重い処理だけgunicornに振る
gunicorn
Djangoを動かすAPサーバー
静的ファイル(HTMLとか)のみ表示する場合には不要なので、Pythonが必要な場合だけ呼び出したい。
必要的工作流程
为了实现上述内容,需要进行以下工作(假设Django应用程序已经部署到服务器上)
-
- 准备一个配置文件来调用Django网站的NGINX。
配置文件应以随意的名称在“/etc/nginx/sites-available”文件夹中创建。
配置文件的内容可以是“使用此端口”。
在“/etc/nginx/sites-enabled”文件夹中,创建一个指向上述步骤1中所创建的文件的符号链接。
通过这样做,如果步骤1中的文件变为无效,只需断开符号链接即可。
如果不知道什么是符号链接的人,可以将其视为“快捷方式的链接”。重新启动NGINX和gunicorn,并进行访问。
1. 为NGINX创建配置文件,用于调用Django网站。
将网站(这里是Django应用程序)的配置文件添加到「/etc/nginx/sites-available」中,这样NGINX就可以调用该网站了。
cd /etc/nginx/sites-available
sudo vi djangapp
根据这个”djangapp”中的配置,NGINX将调用Django。
接下来,将信息写入所创建的配置文件。此次NGINX希望实现以下两个目标:
1. 显示静态文件
2. 将请求信息传递给”djangapp.sock”(与gunicorn连接的套接字文件)。
设置文件的内容类似这样
server {
# 設定しているウェブサイトへのリクエストを通すポート
listen 80;
# ウェブサイトのIPもしくはドメイン名
server_name xx.xx.xx.xxx;
# ファビコンが見つからないというエラーを回避するおまじない
location = /favicon.ico {access_log off; log_not_found off;}
### 以下、リクエストURLとNGINX上のパスとの対応を定義
# Django静的ファイルへのパスを設定
location /static/ {
root /home/ubuntu/djangapp;
}
# 管理者用ページのCSSを表示するためのパスを設定
location /static/admin {
root /home/ubuntu/venv/lib/python3.6/site-packages/django/contrib/admin/static/admin;
}
# リクエストをウェブページに流すためにunixソケットへのパスを設定
location / {
# 「/etc/nginx/proxy_params」にプロキシの設定が記載してある
include proxy_params;
# djangapp.sockにリクエスト結果を流している
proxy_pass http://unix:/home/ubuntu/djangapp/djangapp.sock;
}
}
创建指向调用Django的配置文件的符号链接
只需要一个选项,用中文将以下内容改写成本地化的句子:
刚刚创建的“sites-available/djangapp”将创建一个符号链接到“site-enabled”,以表示“已启用”。
如果想临时中断连接,只需删除该符号链接即可。
sudo ln -s /etc/nginx/sites-available/djangapp /etc/nginx/sites-enaled
通过这样,创建了一个名为sites-enabled/djangapp到sites-available/djangapp的符号链接。进行了大致的确认。
(venv) ubuntu@ip-172-31-45-165:/etc/nginx/sites-available$ ls -la /etc/nginx/sites-enabled/
total 8
drwxr-xr-x 2 root root 4096 Apr 29 13:26 .
drwxr-xr-x 8 root root 4096 Apr 29 13:27 ..
lrwxrwxrwx 1 root root 34 Apr 29 06:54 default -> /etc/nginx/sites-available/default
# シンボリック・リンクになってる
lrwxrwxrwx 1 root root 36 Apr 29 13:26 djangapp -> /etc/nginx/sites-available/djangapp
3. 重新启动 NGINX 和 gunicorn。
首先尝试测试NGINX是否正常运行
$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
确认一切正常运行。
接下来,重新启动各种事物。
sudo systemctl restart nginx
sudo systemctl restart gunicorn
最后只需要连接到URL即可结束。