6

DjangoアプリケーションをnGINXサーバーにデプロイしたい。私はuWSGIを使用しています。私は多くのチュートリアルで調べましたが、どれもうまくいきませんでした。Djangoアプリケーションは、スタンドアロンアプリとして完全に実行されます。同じアプリをnGINXで実行する最も簡単な方法は何ですか?

私はここで立ち往生していて、解決策が欲しいです.. :-(

私のwwwフォルダは/usr/share/nginx/www

私のサイト対応のnconf.dとすべてが/etc/nginx/

uWSGIをインストールしましたが、アプリがインストールされたフォルダー/ファイルを含むuwsgiという名前のフォルダーが見つかりませんでした

4

4 に答える 4

12

dJangoアプリケーションを作成したら。次の手順に従ってください。

ステップ1.Djangoプロジェクトディレクトリにuwsgi.iniというファイルを作成します。つまり、manage.py以外に

[uwsgi]
# set the http port
http = :<port_no>

# change to django project directory
chdir = <project directory>

# add /var/www to the pythonpath, in this way we can use the project.app format
pythonpath = /var/www

# set the project settings name
env = DJANGO_SETTINGS_MODULE=<project_name>.settings

# load django
module = django.core.handlers.wsgi:WSGIHandler()

ステップ2./etc / nginx /sites-availableの下に.confファイルを追加します

server {
listen 84;
server_name example.com;
access_log /var/log/nginx/sample_project.access.log;
error_log /var/log/nginx/sample_project.error.log;

# https://docs.djangoproject.com/en/dev/howto/static-files/#serving-static-files-in-production
location /static/ { # STATIC_URL
    alias /home/www/myhostname.com/static/; # STATIC_ROOT
    expires 30d;
                  }

       }

ステップ3.nginx.confで、リクエストをDjangoアプリケーションに渡します

サーバー{}ブロックの下で、

location /yourapp {
           include uwsgi_params;
           uwsgi_pass <your app address, eg.localhost>:<portno>;
                   }

ステップ4.uwsgi.iniを実行します

> uwsgi --ini uwsgi.ini

これで、nGINXへのリクエストはすべて、uwsgi経由でDjangoアプリにリクエストを渡します。お楽しみください:)

于 2012-09-22T06:19:17.933 に答える
2

最も簡単な方法(そしてそれで非常に効率的)は、uWSGIに固執する必要がない限り、Gunicornを使用することです。彼らは素晴らしいドキュメントを持っており、それは迅速かつ非常に簡単に展開できます。

私はいくつかのウェブサイト(本番を含む)を持っていて、このようなものが機能します:

website_gunicorn.conf.py(好きな場所に配置):

import multiprocessing
daemon = False
bind = "unix:/tmp/gunicorn.sock"
workers = multiprocessing.cpu_count() * 2 + 1
timeout = 60

対応するNGINX構成(部分的、メイン構成に含める):

upstream gunicorn {
    server unix:/tmp/gunicorn.sock fail_timeout=0;
}

server {
    listen 80;
    server_name example.com;
    access_log /var/log/access.log combined;
    error_log /var/log/error.log error;

    keepalive_timeout 5;

    # path for static files
    root /path/to/your/static/files;

    location @django {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_ignore_client_abort off;
        proxy_buffering off;
        proxy_redirect off;
        proxy_pass   http://gunicorn;
        proxy_read_timeout 60;
    }         

    location / {
        try_files $uri @django;
    }
}

そうすれば、次のように開始できるはずです(もちろん、Gunicornをインストールした後- pip install gunicorn):

gunicorn_django -c /path/to/website_gunicorn.conf.py

NGINXはソケットに接続し、Webサイトを提供する必要があります(静的ファイルはNGINXによって直接提供され、メモリを節約します)。

詳細については、デプロイメント構成に関するGunicornのドキュメントを参照してください。daemon=False私はGunicornの設定にあることに注意してください。これは、スーパーバイザーを使用して制御しているためです。あなたはその線を取り除くことを望むかもしれないし、望まないかもしれません。

于 2012-09-08T10:44:08.697 に答える
2

ステップ1.システムにNginxをインストールします。

sudo apt-get install nginx

ステップ2.Djangoプロジェクト内のsetting.pyファイルを編集します

ALLOWED_HOSTS = []

ALLOWED_HOSTS = ['*']

ステップ3.gunicornをインストールします

pip3 install gunicorn

ステップ4..serviceファイルを作成し、独自の構成を記述します

    sudo vi /etc/systemd/system/gunicorn.service

[Unit]
Description=gunicorn daemon
After=network.target

[Service]
User=root
Group=www-data
WorkingDirectory=<your project root directory>
ExecStart=<path of your project>/venv/bin/gunicorn --access-logfile - --workers 3 --bind unix:<path of your wsgi file>/restapi.sock rest_Api.wsgi:application
[Install]
WantedBy=multi-user.target

ステップ5.指定されたコマンドを実行します

  sudo systemctl enable gunicorn

  sudo systemctl start gunicorn

ステップ6.サイト内にファイルを作成します-利用可能

 sudo vi /etc/nginx/sites-available/gunicorn

ステップ7.上記のファイル、つまりgunicorn内にgive構成を書き込みます

server {
    listen <port on which you want to configure>;
    server_name <ip address> or <name of the server>;

    location = /favicon.ico { access_log off; log_not_found off; }
    location <path of your static directory> {
        root <path of your root project>;
    }

    location / {
        include proxy_params;
        proxy_pass http://unix:<path of your restapi.sock file>/restapi.sock;
    }
}

ステップ8.デフォルトファイル内のすべての行にコメントを付けます。

    sudo vi /etc/nginx/sites-available/default

ステップ9.これらのコマンドを実行してテストします

  sudo ln -s /etc/nginx/sites-available/gunicorn1 /etc/nginx/sites-enabled/

  sudo nginx -t

ステップ10.Nginxサーバーを再起動します

   sudo systemctl restart nginx
于 2020-06-14T07:45:33.920 に答える
1

ディストロ関連のハウツーに近づかないようにしてください。彼らはあなたを間違った方向に簡単に押しやる可能性があります。

ここでクイックスタートに従ってください:

http://projects.unbit.it/uwsgi/wiki/Quickstart

(フォローする場合、つまり、「理解する」ではなく、コピー&ペーストする;)

nginxがすべてのリクエストをuWSGIに転送する単純な構成から始めます。

静的ファイルの提供は別の問題であり、アプリケーションサーバーに依存しないため、公式のDjangoドキュメントに従うことができます。

于 2012-09-08T11:23:16.983 に答える