Créez rapidement un environnement d'exécution d'application Web Python3.4 + Nginx + uWSGI + Flask en utilisant pyenv sur Ubuntu 12.04 http://qiita.com/5t111111/items/e170fead91261621b054
Dans cette version 14.04, la dépendance pyenv est arrêtée et seul venv est utilisé.
--JE Un lycéen ordinaire qui fréquente un lycée privé qui était une école de filles jusqu'à l'année dernière. Je déteste les humains. Il n'apparaîtra plus après cela.
$ 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
Connectez-vous à votre navigateur et vérifiez que la page d'accueil Nginx est affichée.
Créez un répertoire d'applications. Tous les fichiers liés à l'application, y compris l'environnement virtuel venv, y sont stockés.
$ sudo mkdir -p /var/www/demoapp
Si l'autorité utilisateur reste root, remplacez-la par l'utilisateur que vous utilisez
$ sudo chown -R username:username /var/www/demoapp/
Malheureusement, il semble que la création de venv avec Python 3.4 ne fonctionne pas pour le moment. http://qiita.com/5t111111/items/1643ba04104e75589ad4
Vous devez donc créer un venv avec l'option --without-pip
, puis installer pip manuellement.
$ 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
Créez / 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)
Avec venv activé.
$ python /var/www/demoapp/hello.py
Vérifiez en vous connectant au port du serveur: 8080 avec un navigateur Web.
$ sudo rm /etc/nginx/sites-enabled/default
Créez / 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;
}
}
Le serveur uWSGI communique avec le serveur Web Nginx via un socket UNIX ou TCP.
Les paramètres ci-dessus spécifient la communication avec un socket UNIX.
uwsgi_pass unix:/var/www/demoapp/demoapp_uwsgi.sock;
Mettre un lien symbolique dans le répertoire du fichier de configuration Nginx
$ sudo ln -s /var/www/demoapp/demoapp_nginx.conf /etc/nginx/sites-enabled/
$ sudo /etc/init.d/nginx restart
Connectez-vous au serveur avec un navigateur Web et vérifiez. ** À ce stade, le serveur uWSGI n'est pas démarré, vous devriez donc obtenir une erreur "502 Bad Gateway" comme celle-ci. ** **
uWSGI peut également être installé à partir d'apt, mais comme la version est un peu ancienne, installez la dernière avec pip.
Je pense que uWSGI sera partagé par plusieurs applications à l'avenir, donc je vais le préparer séparément au lieu de l'installer dans venv pour l'application, mais comme je ne veux pas jouer avec l'environnement Python du système, ici j'utilise aussi venv sous / opt
et uWSGI Créez un environnement pour.
Si vous avez activé demoapp
venv pour votre application, désactivez-le.
$ deactivate
Vous aurez besoin de ce qui suit, alors installez-le.
--C compilateur
$ sudo apt-get install build-essential python3-dev
Comme il est créé sous / opt
, le travail est effectué en tant que root, mais si vous êtes concerné, vous pouvez changer un autre emplacement ou une autre autorité.
Dans ce cas, il est nécessaire de modifier le chemin du binaire uWSGI avec les paramètres suivants.
Comme avec le venv pour l'application, la méthode habituelle ne fonctionne pas, alors installez pip manuellement. (Gênant ...) Ce qui suit décrit la procédure en supposant que la source lors de la création de venv pour l'application reste.
$ 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
Créez / 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
Connectez-vous au serveur avec un navigateur Web et vérifiez. Si Nginx et uWSGI sont capables de communiquer avec le socket sans aucun problème, «Hello World!» S'affiche.
uWSGI Emperor
uWSGI Emperor est une fonction qui lit le fichier de configuration uWSGI et démarre le processus uWSGI. Plusieurs paramètres peuvent être lus et le démarrage du processus peut être géré collectivement.
Créez / 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
La dernière ligne ci-dessus signifie rechercher le fichier de configuration qui existe dans / etc / uwsgi / vassals
et démarrer le démon uWSGI, donc
Créez un lien symbolique vers le fichier d'installation uWSGI de l'exemple d'application dans / etc / uwsgi / vassals
.
$ sudo mkdir -p /etc/uwsgi/vassals
$ sudo ln -s /var/www/demoapp/demoapp_uwsgi.ini /etc/uwsgi/vassals
Le démon uWSGI est configuré pour démarrer en tant qu'utilisateur www-data
.
Par conséquent, gardez le propriétaire de l'application et enregistrez les répertoires en tant que «www-data».
$ sudo chown -R www-data:www-data /var/www/demoapp/
$ sudo chown -R www-data:www-data /var/log/uwsgi/
Puisque Nginx et uWSGI fonctionnent avec le même utilisateur www-data
, modifiez l'autorisation de socket sur 644.
Modifier / var / www / demoapp / demoapp_uwsgi.ini
...
#permissions for the socket file
chmod-socket = 644
$ sudo start uwsgi
Connectez-vous au serveur avec un navigateur Web et vérifiez. Si tout va bien jusqu'à présent, "Hello World!" Sera affiché.
Vous pouvez maintenant exécuter l'application Flask. Je pense qu'il y a plusieurs points à prendre en compte. Surtout autour de Nginx et uWSGI, veuillez presser les paramètres dans leurs documents et googles respectifs.
http://vladikk.com/2013/09/12/serving-flask-with-nginx-on-ubuntu/
Recommended Posts