[PYTHON] Stellen Sie Echtzeit-Webanwendungen mit swampdragon x apache bereit

(Wenn Sie sich unten ansehen, wie man httpd.conf schreibt, sollte dies im Allgemeinen ein Auslöser sein ...)

Annahme

Angenommen, Sie verwenden das Python-Modul django, gibt es verschiedene Möglichkeiten, das Echtzeit-Web zu realisieren. Es gibt jedoch nur wenige Möglichkeiten, diese Voraussetzungen zu nutzen (= kann als Erweiterung des Python-Moduls oder von Django verwendet werden). Was kommt nach einer leichten Untersuchung heraus?

Um.

Zu dieser Zeit wurde es mehr als nur Kanäle aktualisiert, und ich habe mich für swampdragon entschieden, weil es mehr japanische Dokumente (Beispiele) enthält (obwohl es nur wenige gibt).

Derzeit (16.12.29) scheint die Aktualisierung der offiziellen Website bereits eingestellt worden zu sein, aber zu diesem Zeitpunkt (16.07. / Xx) habe ich mich dafür entschieden (obwohl die offizielle Website zu diesem Zeitpunkt geschlossen war). .. Als Ergebnis werde ich den Prozess der harten Bereitstellung zusammenfassen.

Außerdem entfällt das Verfahren zum Installieren des Moduls, und in der Diskussion geht es darum, was installiert und wie es eingestellt wurde.

Was Sie bereitstellen möchten

Die Entwicklungsumgebung der Anwendung, die Sie bereitstellen möchten, lautet

Darüber hinaus wurde Folgendes als Modul eingeführt.

Das Bereitstellungsziel ist CentOS 7, das in AWS eingerichtet ist und keine anfänglichen Einstellungen hat. Da es sauber war, musste ich es vorerst von Apache aus eingeben.

Vorbereitung des Bereitstellungsziels

Erstellen Sie eine Grundlage für die Ausführung von Webanwendungen unter CentOS7. Dieses Mal werden wir Folgendes vorstellen.

Wenn beide die neuesten sind, gibt es kein Problem (sollte). Übrigens wird auch mod_wsgi eingeführt, um die wsgi-Umgebung vorzubereiten.

Da die in CentOS 7 enthaltene Python-Version 2.7 war, habe ich Python 3.5.1 installiert, damit es mit Befehlen der Form python3.5 verwendet werden kann.

Wenn redis ohne nachzudenken installiert wird, werden nur 2.8 und frühere Versionen enthalten sein, daher habe ich auf hier verwiesen und es direkt installiert.

Das ist das Hauptthema des Einsatzes.

Bereitstellen (gewöhnliches Verfahren für Django)

Die Anwendung, die ich bereitstellen wollte, wurde auf github abgelegt, also habe ich sie in das folgende Verzeichnis geklont und abgelegt.

/var/www/cgi-bin/

Der Speicherort entspricht der Standardeinstellung von Apache.

Ändern Sie anschließend, ohne über etwas Besonderes nachzudenken, httpd.conf gemäß Offizielles Dokument einer anderen Version.

Dies allein funktioniert jedoch nicht.

Um das Echtzeit-Web zu realisieren, musste swampdragon zum Server geleitet und der Redis-Server gestartet werden.

Bereitstellen (Verfahren bei Sumpfdrachen)

Dieses Mal müssen die folgenden vier Server unter CentOS ausgeführt werden.

Von diesen können die beiden ersteren mit den folgenden Befehlen gestartet werden.

systemctl start httpd
systemctl start postgresql

Da es im Hintergrund arbeitet, ist die Konsole nicht überfordert.

Das Problem sind die beiden letzteren. Django selbst läuft auf Apache, aber Swampdragon, das als Modul eingeführt wurde, muss einen Server separat von Django einrichten. Und wenn redis auch den Server startet, können keine anderen Vorgänge ausgeführt werden.

Daher wurde tmux neu eingeführt. Durch einfaches Einführen von tmux und Aufteilen der Konsole ist ein gleichzeitiger Start möglich.

Das Problem bleibt jedoch weiterhin bestehen. Das ist das Routing von Apache zum Swampdragon-Server. Ich hatte große Probleme, weil ich keine Literatur dazu finden konnte.

Der Inhalt der endgültigen Apache-Einstellungen (httpd.conf) lautet wie folgt (der App-Pfad ist unscharf).

Listen 80
Listen 443

<VirtualHost *:443>
ProxyPass /data ws://127.0.0.1:9999/data
ProxyPassReverse /data ws://127.0.0.1:9999/data
ProxyPass /settings.js http://127.0.0.1:9999/settings.js
ProxyPassReverse /settings.js http://127.0.0.1:9999/settings.js
ProxyPreserveHost On
ProxyRequests Off
ProxyVia On
</VirtualHost>

LoadModule wsgi_module /usr/lib64/httpd/modules/mod_wsgi.so
WSGIPythonPath /var/www/cgi-bin/path/to/app:/usr/local/bin/python3.5/site-packages
DocumentRoot "/var/www/cgi-bin/path/to/documentroot"
Alias /static/ /var/www/cgi-bin/path/to/static/

<Directory /var/www/cgi-bin/path/to/app/>
<Files wsgi.py>
Order deny,allow
Allow from all
</Files>
</Directory>
WSGIScriptAlias / /var/www/cgi-bin/path/to/wsgi.py

Außerdem ist ~: //127.0.0.1:9999/~ die Standardeinstellung (sollte sein), als swampdragon eingeführt wurde.

Unterhalb des Lademoduls in der unteren Hälfte entspricht fast der Inhalt der offiziellen Django-Website.

Die Leber ist die Einstellung von 443 Ports. swampdragon hat zwei Mitteilungen zu empfangen. / Daten für die Web-Socket-Kommunikation und /settings.js für http.

Wenn Sie es als virtuellen Host festlegen und auf einen separaten Swampdragon-Server übertragen, wird es weiter auf den Redis-Server übertragen und die Sitzungsinformationen werden gespeichert.

Zusammenfassung

Schließlich sollten Sie in der Lage sein, eine Echtzeit-Webanwendung mit einem solchen Befehl zu starten.

tmux
systemctl start postgresql
systemctl start httpd
sudo redis-server /etc/redis.conf

python3.5 server.py

Bei Verwendung von Sumpfdrachen

  1. Apache und Redis erforderlich
  2. Sie müssen die Übertragung von / data bzw. /settings.js angeben
  3. Wahrscheinlich der schnellste Weg, um einen Server mit tmux einzurichten.

Das Obige ist die Geschichte der ersten manuellen Bereitstellung.

Recommended Posts

Stellen Sie Echtzeit-Webanwendungen mit swampdragon x apache bereit
Stellen Sie eine mit Streamlit erstellte Web-App für Heroku bereit
So stellen Sie eine mit Flask erstellte Web-App für Heroku bereit
(Fehler) Stellen Sie eine mit Flask mit Heroku erstellte Web-App bereit
Spielen Sie wie eine Web-App mit ipywidgets
Dämonisieren Sie eine Python-Webanwendung mit Supervisor
Erstellen Sie eine einfache Web-App mit Flasche
Stellen Sie Python 3.6 / Django / Postgres-Webanwendungen in Azure bereit
Stellen Sie die mit PTVS erstellte Django-App in Azure bereit
Echtzeit-Web mit Django-Kanälen
Richten Sie einen Webserver mit CentOS7 + Anaconda + Django + Apache ein
Wenn ich eine Django-App auf Apache2 bereitstelle und keine statischen Dateien mehr liest
Stellen Sie die Django-Anwendung mit Docker bereit
Erstellen Sie eine Webanwendung mit Django
Entwicklungspraxis für Webanwendungen: Erstellen Sie mit Django eine Seite zum Erstellen von Schichten! (Einführung)
Maschinelles Lernen x Web App-Diagnose: Erkennen Sie CAPTCHA mit der Cloud Vision-API
Bis die mit Flasche erstellte Webanwendung auf Heroku veröffentlicht (bereitgestellt) wird
Stellen Sie die Kolben-App mit mod_wsgi bereit (mithilfe von pipenv).
[Python] Eine schnelle Webanwendung mit Bottle!
Einfache Web-App mit Python + Flask + Heroku
Ich kann nicht mehr mit der Google App Engine bereitstellen
Führen Sie eine Python-Webanwendung mit Docker aus
Erstellen Sie ein Webframework mit Python! (1)
Erstellen Sie einen Webdienst mit Docker + Flask
Erstellen Sie eine Desktop-App mit Python mit Electron
Erstellen Sie ein Webframework mit Python! (2)
Ich habe eine WEB-Bewerbung bei Django gemacht
Eine Web-App, die Hello World nur mit dem net / http-Paket von Go ausführt
Verbinden Sie Scratch X und Digispark mit der Flasche
So entwickeln Sie eine Cart-App mit Django
Gewinnen Sie die Python + Flask-Web-App mit Jenkins
GUI-Automatisierung mit Python x Windows App Driver
Starten Sie mit Docker einen einfachen Python-Webserver
Starten Sie einen Webserver mit Python und Flask
Verfahren zur Erstellung plattformübergreifender Apps mit kivy
Extrahieren Sie mit Python Daten von einer Webseite
Entwicklungspraxis für Webanwendungen: Erstellen Sie mit Django eine Seite zum Erstellen von Schichten! (Schreiben Sie eine Basisvorlage)
Entwicklungspraxis für Webanwendungen: Erstellen Sie mit Django eine Seite zum Erstellen von Schichten! (Authentifizierungsverarbeitung)
Quellkompilieren Sie Apache2.4 + PHP7.4 mit Raspberry Pi und erstellen Sie einen Webserver --3. Verwenden Sie MySQL
Entwicklungspraxis für Webanwendungen: Erstellen Sie mit Django eine Seite zum Erstellen von Schichten! (Experiment auf der Admin-Seite)