J'ai créé un backend pour une certaine application avec Flask + uWSGI + Nginx, alors j'ai résumé ce que j'ai fait.
nginx.conf
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:3031;
}
uwsgi.ini
socket=127.0.0.1:3031
En passant, avec ce paramètre, je ne vois rien même si je frappe http://127.0.0.1:3031 avec un navigateur, en disant que seul uWSGI est le débogage de débogage. J'ai été accro pendant quelques minutes sans connaître la différence entre les options uwsgi socket
et http
.
nginx.conf
location / {
include uwsgi_params;
proxy_pass http://127.0.0.1:3031;
}
uwsgi.ini
http=127.0.0.1:3031
Proxy intuitif. Au début, je pensais que c'était le seul moyen. C'est celui que vous pouvez voir sur http://127.0.0.1:3031.
Fondamentalement, cela convient car il ne consomme pas de numéro de port supplémentaire lors de la publication de plusieurs applications. Ceci est adopté.
nginx.conf
location / {
include uwsgi_params;
uwsgi_pass unix:/path/to/app/app.sock;
}
uwsgi.ini
socket=/path/to/app/app.sock
uWSGI Emperor
Utilisez-le car il est pratique lors de la gestion de plusieurs applications avec uWSGI.
Référence: http://qiita.com/5t111111/items/e170fead91261621b054#1-8
Le démarrage automatique est également devenu plus facile!
process
, limit-as
, max-requests
, harakiri
. hara-kiri.
Référence: http://docs.djangoproject.jp/en/latest/howto/deployment/wsgi/uwsgi.html
C'est un site Django, mais s'il s'agit d'une application wsgi, Flask est également utile.
Au fait, daemonize
et master
utilisent Emperor, donc ils ne sont pas activés. Je pense que c'est probablement le cas, mais je suis désolé si c'est différent. J'attends Tsukkomi.
Ajustez les paramètres lors d'un test de charge.
Même si le fichier est modifié, il ne sera pas reflété, donc
uwsgi.ini
touch-reload=/path/to/app/reload.trigger
Quoi qu'il en soit, si vous touchez / chemin / vers / app / reload.trigger
au moment du déploiement, uWSGI se rechargera à la prochaine réception de la demande.
J'ai décidé de mettre la touche dans le script de déploiement.
Référence: http://field-notes.hatenablog.jp/entry/2012/05/09/115600
(Une autre solution) Surveillez le fichier. Référence: http://d.hatena.ne.jp/dayflower/20121017/1350447805
Le gars qui devient une fille après la sortie.
uwsgi.ini
touch-logreopen=/path/to/app/logreopen.trigger
En tous cas,
/path/to/uwsgi.log {
daily
rotate 7
missingok
notifempty
compress
sharedscripts
size 1M
postrotate
touch /path/to/app/logreopen.trigger
endscript
}
Référence: http://taichino.com/memo/3843
/etc/nginx/conf.d/sample_nginx.conf
sample_nginx.conf
#Je n'aime pas ça quand je suis frappé par IP. Tu n'as pas à
server {
listen 80 default_server;
server_name _;
root /var/app/dummy;
index index.html;
}
server {
listen 80;
server_name sample.com;
charset utf-8;
client_max_body_size 75M;
location / { try_files $uri @uwsgi; }
#Laissons statique à Nginx
location /static/ {
root /var/app/sample/webapp;
}
location @uwsgi {
include uwsgi_params;
uwsgi_pass unix:/var/app/sample/sample_uwsgi.sock;
}
}
/etc/uwsgi/vassals/sample_uwsgi.ini
Mettez uwsgi.ini dans / etc / uwsgi / vassals / pour uWSGI Emperor.
sample_uwsgi.ini
[uwsgi]
base = /var/app/sample
app = main #Flask est le principal pour commencer.Si c'est py, main
#Exemple pour Django.wsgi:Se sentir comme une application
module = %(app)
#Chemin d'accès à virtualenv exécutant cette application
#Si vous utilisez Python brut, est-ce le chemin vers le répertoire Python?
home = /home/www-data/venvs/sampleapp
pythonpath = %(base)
socket = %(base)/%n.sock
chmod-socket = 666
#the variable that holds a flask application inside the module imported at line #6
callable = app
#Enregistrement
logto = /var/log/uwsgi/%n.log
#Le gars qui met dans le postrotate de logrotate
touch-logreopen = %(base)/.logreopen_trigger
#Déclencheur pour recharger uwsgi
touch-reload = %(base)/.uwsgi_touch
max-requests = 1000
harakiri = 60
#Je l'ai utilisé de l'empereur alors je l'ai commenté
#master=True
#daemonize=/var/log/uwsgi/sample.log
uwsgi.conf
description "uWSGI"
start on runlevel [2345]
stop on runlevel [06]
respawn
#J'ai installé uniquement uwsgi pour uwsgi emperor et j'ai désactivé le virtualenv nommé uwsgi. JE.
#Sinon, vous devez spécifier la destination d'installation uwsgi et cela fonctionnera.
env UWSGI=/home/www-data/venvs/uwsgi/bin/uwsgi
env LOGTO=/var/log/uwsgi/emperor.log
#Modifiez l'uid et le gid le cas échéant
exec $UWSGI --master --emperor /etc/uwsgi/vassals --die-on-term --uid www-data --gid www-data --logto $LOGTO
start uwsgi
Démarrez toutes les applications uwsgi sous / etc / uwsgi / vassals. Faites un démarrage automatique si nécessaire
uwsgi.service
[Unit]
Description=uWSGI
After=syslog.target
[Service]
#J'ai installé uniquement uwsgi pour uwsgi emperor et j'ai désactivé le virtualenv nommé uwsgi. JE.
#Sinon, vous devez spécifier la destination d'installation uwsgi et cela fonctionnera.
#Modifiez également l'uid et le gid si nécessaire
ExecStart=/home/www-data/venvs/uwsgi/bin/uwsgi --master --emperor /etc/uwsgi/vassals --die-on-term --uid www-data --gid www-data --logto /var/log/uwsgi/emperor.log
Restart=always
KillSignal=SIGQUIT
Type=notify
StandardError=syslog
NotifyAccess=all
[Install]
WantedBy=multi-user.target
systemctl start uwsgi
Démarrez toutes les applications uwsgi sous / etc / uwsgi / vassals. Le démarrage automatique est approprié.