Erstellen Sie mit pyenv unter Ubuntu 12.04 schnell eine Ausführungsumgebung für Python3.4 + Nginx + uWSGI + Flask-Webanwendungen http://qiita.com/5t111111/items/e170fead91261621b054
In dieser Version 14.04 wird die pyenv-Abhängigkeit gestoppt und nur venv verwendet.
--ICH Ein gewöhnlicher Gymnasiast, der eine private Highschool besucht, die bis letztes Jahr eine Mädchenschule war. Ich hasse Menschen. Danach wird es nicht mehr angezeigt.
$ sudo add-apt-repository ppa:nginx/stable
$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get install nginx
$ sudo /etc/init.d/nginx start
Stellen Sie eine Verbindung mit Ihrem Browser her und stellen Sie sicher, dass die Nginx-Begrüßungsseite angezeigt wird.
Erstellen Sie ein Anwendungsverzeichnis. Alle anwendungsbezogenen Dateien, einschließlich der virtuellen Umgebung von venv, werden in dieser Datei gespeichert.
$ sudo mkdir -p /var/www/demoapp
Wenn die Benutzerberechtigung root bleibt, ändern Sie sie in den Benutzer, den Sie verwenden
$ sudo chown -R username:username /var/www/demoapp/
Leider scheint das Erstellen von venv mit Python 3.4 derzeit nicht zu funktionieren. http://qiita.com/5t111111/items/1643ba04104e75589ad4
Sie müssen also ein venv mit der Option "--without-pip" erstellen und dann pip manuell installieren.
$ pyvenv-3.4 --without-pip /var/www/demoapp/venv
$ source /var/www/demoapp/venv/bin/activate
$ mkdir ~/src
$ cd ~/src
$ curl -O https://pypi.python.org/packages/source/s/setuptools/setuptools-3.4.4.tar.gz
$ tar xvfz setuptools-3.4.4.tar.gz
$ cd setuptools-3.4.4/
$ python setup.py install
$ cd ..
$ curl -O https://pypi.python.org/packages/source/p/pip/pip-1.5.4.tar.gz
$ tar xvfz pip-1.5.4.tar.gz
$ cd pip-1.5.4/
$ python setup.py install
$ source /var/www/demoapp/venv/bin/activate
$ pip install flask
Erstellen Sie / var / www / demoapp / hello.py
.
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello World!"
if __name__ == "__main__":
app.run(host='0.0.0.0', port=8080)
Mit aktiviertem venv.
$ python /var/www/demoapp/hello.py
Überprüfen Sie dies, indem Sie mit einem Webbrowser eine Verbindung zum Server-Port 8080 herstellen.
$ sudo rm /etc/nginx/sites-enabled/default
Erstellen Sie / var / www / demoapp / demoapp_nginx.conf
server {
listen 80;
server_name localhost;
charset utf-8;
client_max_body_size 75M;
location / { try_files $uri @yourapplication; }
location @yourapplication {
include uwsgi_params;
uwsgi_pass unix:/var/www/demoapp/demoapp_uwsgi.sock;
}
}
Der uWSGI-Server kommuniziert mit dem Webserver Nginx über einen UNIX-Socket oder TCP.
Die obigen Einstellungen geben die Kommunikation mit einem UNIX-Socket an.
uwsgi_pass unix:/var/www/demoapp/demoapp_uwsgi.sock;
Fügen Sie einen symbolischen Link in das Verzeichnis der Nginx-Konfigurationsdatei ein
$ sudo ln -s /var/www/demoapp/demoapp_nginx.conf /etc/nginx/sites-enabled/
$ sudo /etc/init.d/nginx restart
Stellen Sie mit einem Webbrowser eine Verbindung zum Server her und überprüfen Sie. ** Zu diesem Zeitpunkt ist der uWSGI-Server noch nicht gestartet, daher sollte der Fehler "502 Bad Gateway" wie folgt angezeigt werden. ** ** **
uWSGI kann auch über apt installiert werden. Da die Version jedoch etwas alt ist, installieren Sie die neueste Version mit pip.
Ich denke, dass uWSGI in Zukunft von mehreren Anwendungen gemeinsam genutzt wird, daher werde ich es separat vorbereiten, anstatt es in venv für die Anwendung zu installieren. Da ich jedoch nicht mit der Python-Umgebung des Systems spielen möchte, verwende ich hier auch venv unter / opt
und uWSGI Erstellen Sie eine Umgebung für.
Wenn Sie demoapp
venv für Ihre Anwendung aktiviert haben, deaktivieren Sie es.
$ deactivate
Sie benötigen Folgendes, installieren Sie es also.
--C Compiler
$ sudo apt-get install build-essential python3-dev
Da es unter / opt
erstellt wurde, arbeiten Sie als root. Wenn Sie jedoch betroffen sind, können Sie einen anderen Speicherort oder eine andere Berechtigung ändern.
In diesem Fall muss der Pfad der uWSGI-Binärdatei mit den folgenden Einstellungen geändert werden.
Wie beim venv für die Anwendung funktioniert die übliche Methode nicht. Installieren Sie pip daher manuell. (Problematisch ...) Im Folgenden wird die Vorgehensweise unter der Annahme beschrieben, dass die Quelle beim Erstellen von venv für die Anwendung erhalten bleibt.
$ sudo -s
# pyvenv-3.4 --without-pip /opt/venv/uwsgi
# source /opt/venv/uwsgi/bin/activate
# cd ~/src
# cd setuptools-3.4.4/
# python setup.py install
# cd ..
# cd pip-1.5.4/
# python setup.py install
$ source /opt/venv/uwsgi/bin/activate
$ pip install uwsgi
Erstellen Sie / var / www / demoapp / demoapp_uwsgi.ini
[uwsgi]
#application's base folder
base = /var/www/demoapp
#python module to import
app = hello
module = %(app)
#virtualenv folder
virtualenv = /var/www/demoapp/venv
pythonpath = %(base)
#socket file's location
socket = /var/www/demoapp/%n.sock
#permissions for the socket file
chmod-socket = 666
#the variable that holds a flask application inside the module imported at line #6
callable = app
#location of log files
logto = /var/log/uwsgi/%n.log
$ sudo mkdir -p /var/log/uwsgi
$ sudo chown -R username:username /var/log/uwsgi
$ uwsgi --ini /var/www/demoapp/demoapp_uwsgi.ini
Stellen Sie mit einem Webbrowser eine Verbindung zum Server her und überprüfen Sie. Wenn Nginx und uWSGI problemlos mit dem Socket kommunizieren können, wird "Hallo Welt!" Angezeigt.
uWSGI Emperor
uWSGI Emperor ist eine Funktion, die die uWSGI-Konfigurationsdatei liest und den uWSGI-Prozess startet. Es können mehrere Einstellungen gelesen und der Prozessstart gemeinsam verwaltet werden.
Erstellen Sie / etc / init / uwsgi.conf
description "uWSGI"
start on runlevel [2345]
stop on runlevel [06]
respawn
env UWSGI=/opt/venv/uwsgi/bin/uwsgi
env LOGTO=/var/log/uwsgi/emperor.log
exec $UWSGI --master --emperor /etc/uwsgi/vassals --die-on-term --uid www-data --gid www-data --logto $LOGTO
Die letzte Zeile oben bedeutet, nach der Konfigurationsdatei zu suchen, die in / etc / uwsgi / vassals
vorhanden ist, und den uWSGI-Daemon zu starten
Erstellen Sie einen symbolischen Link zur uWSGI-Installationsdatei der Beispielanwendung in "/ etc / uwsgi / vassals".
$ sudo mkdir -p /etc/uwsgi/vassals
$ sudo ln -s /var/www/demoapp/demoapp_uwsgi.ini /etc/uwsgi/vassals
Der uWSGI-Dämon wird so eingestellt, dass er als Benutzer "www-data" startet. Behalten Sie daher den Eigentümer der Anwendungs- und Protokollverzeichnisse als "www-data".
$ sudo chown -R www-data:www-data /var/www/demoapp/
$ sudo chown -R www-data:www-data /var/log/uwsgi/
Da Nginx und uWSGI mit demselben Benutzer "www-data" arbeiten, ändern Sie die Socket-Berechtigung in 644.
Bearbeiten Sie / var / www / demoapp / demoapp_uwsgi.ini
...
#permissions for the socket file
chmod-socket = 644
$ sudo start uwsgi
Stellen Sie mit einem Webbrowser eine Verbindung zum Server her und überprüfen Sie. Wenn bis jetzt alles in Ordnung ist, wird "Hallo Welt!" Angezeigt.
Jetzt können Sie die Flask-Anwendung ausführen. Ich denke, es gibt verschiedene Punkte, die beachtet werden müssen. Insbesondere in der Umgebung von Nginx und uWSGI drücken Sie bitte die Einstellungen in den jeweiligen Dokumenten und Google-Dateien aus.
http://vladikk.com/2013/09/12/serving-flask-with-nginx-on-ubuntu/
Recommended Posts