[Django] Django を Linux にデプロイする (nginx+uwsgi)

1. 説明

uwsgi を使用して Linux に Django プロジェクトをデプロイするプロセスは難しくありませんが、主に構成ファイル、特に nginx 構成ファイルの作成です。この記事では、uwsgi と nginx を介して Ubuntu20.04 に Django プロジェクトをデプロイします。

2. 設置環境

インストール環境には主にNginx、Python、MySQL、Redisが含まれており、実際の状況に応じてインストールできます。

2.1 nginxをインストールする

Linux のほとんどのディストリビューションは、パッケージ マネージャーを介した nginx の直接インストールをサポートしていますが、サポートしていない場合は、オンラインでソース コードをコンパイルすることによって nginx を見つけるしかありません。ここでは Ubuntu 20.04 にインストールしていますが、apt コマンドを使用して nginx を直接インストールできます。

sudo apt update
sudo apt install nginx

インストールが完了すると、nginx が自動的に実行され、マシンの IP にアクセスします (http://localhostこちらも利用可能)。Welcome to nginx!ページ プロンプトが表示されれば、インストールが成功したことを意味します。

2.2 Pythonをインストールする

私が使用している Ubuntu20.04 には既に Python3.8 が付属しているため、ここでは Python3.8 を直接使用します。他のバージョンが必要な場合は、前の記事を参照してください。 【Linux】Python3 と pip3 をインストールする Linux
システム

ここに別の pip をインストールするだけです

sudo apt install python3-pip

その後、プロジェクトに必要なライブラリを自分でインストールし、少なくとも Runnerser で Django プロジェクトを実行します

2.3 mysqlをインストールする

MySQL をインストールするには、
【mysql】Ubuntu18 で MySQL をインストールする、root パスワードを忘れるを参照してください。

2.4 Redisをインストールする

プロジェクトで Redis をインストールする必要がある場合は、
[redis] Redis の導入、インストール、および指定したライブラリへの接続を参照してください。

3. 静的ファイルを収集する

Django 構成ファイル (通常はsettings.py) を開き、DEBUGに変更しFalseSTATIC_ROOT静的ファイルを収集するパスを書き込みます。絶対パスを使用して承認された場所に置くこともできますが、既存のファイルが上書きされるため、パスを指定することをお勧めしますとは違うSTATICFILES_DIRS、私はここにいる/home/pan/productions/static

DEBUG = False
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, "static"),
]
STATIC_ROOT = '/home/pan/productions/static'

構成ファイルを変更した後、collectstatic静的ファイルを収集できます。この操作は、Django プロジェクトで使用される静的ファイルのコピーを指定されたフォルダーにコピーすることです。目的は、nginx プロキシを容易にすることです。

python3 manage.py collectstatic

エラーがなければSTATIC_ROOTパスを開くと、収集された静的ファイルが表示されるはずです。

4. uwsgi を使用して開始します

4.1 uwsgiのインストール

まず、uwsgi をインストールする必要があります。pip を使用してインストールします。

sudo pip install uwsgi

インストール後、ターミナルで実行してuwsgi出力があればOKです。

4.2 uwsgi設定ファイル

新しい ini ファイルを作成します。たとえばuwsgi.ini、次のようなuwsgi.ini構成ファイルを作成します。manage.pyファイルをディレクトリに置くだけです。

[uwsgi]
# 启动项目的IP端口,可以使用IP端口也可以使用本地文件
socket = 127.0.0.1:8000
# socket = /path/to/your/mysite/mysite.sock
# 项目目录(一般是manage.py所在目录)
chdir = /home/pan/productions/baiduwp_python/baiduwp_python
# 指定项目里的wsgi.py,绝对路径和相对路径都行
wsgi-file = baiduwp_python/wsgi.py
# 进程数
processes = 1
# 线程数
threads = 2
# 主程序
master = True
# 存放pid文件路径
pidfile = uwsgi.pid
# 存放日志文件路径
daemonize = uwsgi.log
# 缓存大小,如果提示缓存不够就需要改大一点
buffer-size=4095
# 虚拟环境路径(如果使用Python虚拟环境的话)
# virtualenv=/root/.virtualenvs/django_env
# 静态文件的路径,我们已经让nginx处理,所以注释掉
# static-map = /static=/home/pan/productions/static

wsgi.pyこのファイルは Django によって自動的に生成されるため、Django プロジェクトによって読み取られた設定ファイルが正しいかどうかを確認する必要があることに注意してください。プロジェクトの構造が変更されている場合は、手動で更新する必要があります

4.3 uwsgiの起動

ターミナルで実行される uwsgi の基本コマンド

uwsgi --ini uwsgi.ini  # 启动uwsgi
uwsgi --stop uwsgi.pid  # 关闭uwsgi
uwsgi --reload uwsgi.pid  # 重启uwsgi

その中にuwsgi.iniuwsgiを使った起動ファイルがあり、上記の場合に合わせて記述するだけで、起動後にuwsgi.pid対応するIDを保存するファイルが生成されるので、uwsgiを閉じる際にそのファイルを指定する必要がある

5. nginx プロキシを使用する

上記は、uwsgi を介してソケットの形式で Django プロジェクトを開始することですが、このプロトコル ブラウザーには直接アクセスできないため、nginx を使用してリクエストを Django に転送する必要があります

nginx の設定ファイルを変更したいのですが、ポート 80 を監視したい場合は、nginx のデフォルトの設定ファイルを直接変更できます。一般的には、管理の便宜のために、ここで新しい設定ファイルを作成し/etc/nginx/sites-enabled/defaultます/etc/nginx/conf.d。プロジェクトごとに設定ファイルがあると便利です。

sudo vim /etc/nginx/conf.d/django_8000.conf

構成は次のとおりです

# 这种写法比较方便配合负载均衡
upstream backend {
    
    
	# 这里的IP端口即Django项目的IP端口
    server 127.0.0.1:8000;
    # 如果uwsgi使用的本地文件,此处写法参考
    # server unix:/path/to/your/mysite/mysite.sock;
}
server {
    
    
	# nginx监听端口,即在浏览器访问时的端口,我这里是监听8080端口
    listen 8080;
    autoindex on;
    location /static {
    
    
        alias /home/pan/productions/static;
    }
    location / {
    
    
        include uwsgi_params;
        uwsgi_pass backend;
    }
}

nginx 構成ファイルを保存した後、nginx 構成を再ロードする必要があります

sudo nginx -t
sudo nginx -s reload

ブラウザを開いてアクセスすると、http://localhost:8080正常にアクセスできるはずです

一般に、Django プロジェクトと nginx が同じサーバー上にある場合、IP ポートよりも sock ファイルによる方法の方が効率的ですが、sock ファイルを使用する場合は、読み取りおよび書き込み権限があるかどうかに注意してください。

おすすめ

転載: blog.csdn.net/qq_39147299/article/details/131517356