Heim  >  Artikel  >  Backend-Entwicklung  >  Lösen Sie alle Probleme bei der Bereitstellung von Django mit nginx+uwsgi (summary)_nginx

Lösen Sie alle Probleme bei der Bereitstellung von Django mit nginx+uwsgi (summary)_nginx

不言
不言Original
2018-04-08 11:20:371661Durchsuche

Dieser Artikel stellt hauptsächlich alle Probleme der Nginx + Uwsgi-Bereitstellung von Django vor (Zusammenfassung). Jetzt werde ich ihn mit Ihnen teilen und Ihnen eine Referenz geben. Schauen wir uns das mal an

Vor Kurzem habe ich das kleine Projekt, das ich in den Sommerferien geschrieben habe, fertiggestellt. Ich dachte ursprünglich, dass ich einfach den Port öffnen und ausführen sollte python3 manager runserver 0.0.0.0:80 und es wird erledigt, und schließlich habe ich erfahren, dass dies nur für den Entwicklungsmodus von Django gilt und nur den Einzelbenutzerzugriff unterstützt. Ich habe Nginx verwendet

Nginx?

Warum Nginx?

Zuallererst denke ich, dass es klein, sehr leicht, einfach zu bedienen und nicht so kompliziert wie Apache ist. und online Es wird empfohlen, Nginx zum Bereitstellen von Django zu verwenden.

Installation

Ich werde es hier überspringen und sagen, dass Linux-Benutzer Ihnen empfehlen, vom Quellcode zu installieren, da die Befehlsinstallation dies möglicherweise vortäuscht sei ein Taobao II Für den neu entwickelten Nginx empfehle ich persönlich die Verwendung der Originalversion.

uwsgi

Warum brauchen Sie das?

Einfach ausgedrückt ist Nginx ein Reverse-Proxy-Server, das kann es Was ist los? Um einen Port wie 80 abzuhören, können Sie einen Reverse-Proxy-Port wie 8000 konfigurieren. Auf diese Weise fordert der Zugriff aller externen Benutzer auf Port 80 tatsächlich Daten von Port 8000 an, der Benutzer kommuniziert jedoch nicht mit ihm Port 8000. , aber 80 dieser Brücke passiert. Im Moment denke ich nur, dass dies meinen wahren Port verbergen kann. Wenn Sie Vorschläge haben, hinterlassen Sie bitte eine Nachricht.
In diesem Fall kann tatsächlich nur ein einzelner Benutzer darauf zugreifen. Daher benötigen wir ein Tool, auf das mehrere Benutzer gleichzeitig zugreifen können. Dann ist es uwsgi.

Wie installiere ich?

pip install uwsgi

Konfigurationsdatei

Zuerst , für alle Schauen Sie sich den Dateistatus meines Projekts an:

FlyCold
├── FlyCold
│  ├── settings.py
│  ├── urls.py
│  └── wsgi.py
├── manage.py
├── SchoolBuy
│  ├── admin.py
│  ├── forms.py
│  ├── __init__.py
│  ├── models.py
│  ├── urls.py
│  └── views.py
└── templates

Erläuterung unten, dies ist ein optimierter Verzeichnisbaum, das erstellte Projekt wird benannt FlyCold und das generierte FlyCold-Unterverzeichnis und das SchoolBuy-Unterverzeichnis. Mein Hauptcode befindet sich in SchoolBuy, Setting.py befindet sich im Flycold-Unterverzeichnis und manager.py befindet sich im Flycold-Stammverzeichnis.

Erstellen Sie nach der Installation eine Konfigurationsdatei mit folgendem Inhalt:

# myweb_uwsgi.ini file
[uwsgi]

# Django-related settings

socket = :8080
#真实服务的端口

# Django项目根目录 (绝对路径)
chdir      = /home/lyt/FlyCold

# wsgi.py文件在项目中的位置
module     = FlyCold.wsgi

# process-related settings
# master
master     = true

# 运行的进程数
processes    = 4

# ... with appropriate permissions - may be needed
# chmod-socket  = 664
# clear environment on exit
vacuum     = true

Diese INI-Datei kann an einer beliebigen Stelle abgelegt werden , starten Sie es, wenn uwsgi --ini ***.ini

nginx konfigurieren

nginx.conf finden und den folgenden Inhalt schreiben

  server {
    #这里是访问时用到的端口
  listen    80;
    server_name localhost;

    charset UTF-8;
    #这块存让日志文件
    access_log /var/log/nginx/SchoolBuy_access.log;
    error_log  /var/log/nginx/SchoolBuy_error.log;


    client_max_body_size 75M;
    location / {
        include uwsgi_params;
        #同uwsgi内容
        uwsgi_pass 127.0.0.1:8001;
        #链接超时时间
        uwsgi_read_timeout 30;
    }
  }

Starten Sie auf diese Weise Ihren Nginx neu, greifen Sie auf Port 80 zu und Sie werden den Effekt sehen.

Haben Sie Fragen?

Möglicherweise haben Sie festgestellt, dass auf die statischen Ressourcen auf Ihrer Webseite nicht zugegriffen werden kann! ! Beispielsweise ist die Admin-Seite sehr einfach. Dies liegt daran, dass Nginx bei Nginx + Uwsgi + Django (möglicherweise) nicht als Proxy für die Verarbeitung statischer Ressourcen durch Django verwendet werden kann. Kurz gesagt, Django sollte so etwas nicht tun dürfen, da Nginx eine stärkere Fähigkeit hat, mit statischen Ressourcen umzugehen. Lassen Sie Nginx damit umgehen.

Im Allgemeinen gibt es zwei Arten von statischen Ressourcen: Links, die mit /media/ beginnen, und Links, die mit /static/ beginnen. Statisch wird verwendet, um einige Originalbilder, Videos, JS- und CSS-Dateien der Website zu verarbeiten. Django selbst unterstützt diese Art von Link. So deaktivieren Sie Django, um Dateien zu verarbeiten, die mit /static/? beginnen. Es ist sehr einfach, den DEBUG-Wert in Setting.py zu ändern. Zu diesem Zeitpunkt verarbeitet Django die Datei /static/ nicht.

Was ist mit /media/? Im Allgemeinen speichern wir die von Benutzern hochgeladenen Bilder und verwenden /media/, wenn sie auf der Webseite angezeigt werden. Legen Sie

MEDIA_URL = '/media/' #访问的前缀链接
MEDIA_ROOT = os.path.join(BASE_DIR, '../media') #存放文件的具体位置

fest Fügen Sie

from django.conf import settings
from django.conf.urls.static import static
if settings.DEBUG:
  urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

zu url.py hinzu. Das bedeutet, dass bei DEBUG=True die Datei /media/ analysiert wird und die Datei gelöscht wird Die Position ist der zweite Parameter.


Auf diese Weise müssen Sie bei der Bereitstellung in einer Produktionsumgebung nur DEBUG auf False ändern, und Django verarbeitet keine statischen Daten und Medien.

Statische Dateien sammeln

Django verfügt über ein Tool, das alle in der Anwendung verwendeten statischen Dateien sammeln kann, um das Nginx-Parsen zu erleichtern. Konkret:


Setzen Sie STATIC_ROOT = os.path.join(BASE_DIR, '../collectedstatic') in Setting.py


Die auf diese Weise gesammelten statischen Dateien werden im Verzeichnis oben sein. Wie führe ich dieses Tool aus? python3 manager.py Collectstatic

Konfigurieren Sie Nginx zum Parsen statischer Dateien

Ähnlich, nginx.conf


Zuerst , Fügen Sie die Benutzer-Root-Anweisung


oben in der Datei hinzu, um dem Root-Benutzer die Ausführung von Nginx zu ermöglichen. Andernfalls kann der Zugriff auf statische Dateien dazu führen, dass keine Berechtigung vorhanden ist


Zweitens fügen Sie vor dem oben genannten Speicherort der Konfigurationsdatei den folgenden Inhalt hinzu:

    location /static/ {
      autoindex on;
      alias /root/SchoolBuyWeb/collectedstatic/;
    }

    location /media/ {
      autoindex on;
      alias /root/SchoolBuyWeb/media/;
    }

Achten Sie auf den Alias ​​und passen Sie ihn dann an das von Ihnen festgelegte Verzeichnis an!


Nginx neu starten, jetzt ist es in Ordnung~~


Das obige ist der detaillierte Inhalt vonLösen Sie alle Probleme bei der Bereitstellung von Django mit nginx+uwsgi (summary)_nginx. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn