Je veux servir une application de flask qui utilise un service bokeh intégré depuis un serveur de mon réseau local. Pour illustrer mon propos, j’ai utilisé l’ exemple de l’exemple du service bokeh et une image du docker pour répliquer le serveur. L’image de Docker utilise Nginx et Gunicorn. Je pense qu’il y a un problème avec ma configuration nginx qui achemine les requêtes vers / bkapp uri.
J’ai détaillé le problème et fourni tout le code source dans le repository git suivant
J’ai commencé une discussion sur bokeh google group
Afin de réduire la complexité de l’exécution de nginx dans son propre conteneur, j’ai créé cette image qui s’exécute dans le même conteneur que l’application Web.
NOTE: J’utilise la version 17.09.0-ce de Docker
Téléchargez ou clonez repo et accédez à ce répertoire (single_container).
# as root docker build -f Dockerfile -t single_container .
construire
démarrer une session de terminal dans un nouveau conteneur
# as root docker run -ti single_container:latest
Dans le nouveau conteneur, commencez nginx
nginx
maintenant commencer gunicorn
gunicorn -w 1 -b :8000 flask_gunicorn_embed:app
début
dans un terminal séparé (sur la machine hôte) recherchez l’adresse IP du conteneur single_container que vous utilisez
#as root docker ps # then do copy CONTAINER ID and inspect it docker inspect [CONTIANER ID] | grep IPAddress
trouver
En utilisant IP trouvé ci-dessus (avec conteneur en cours d’exécution) consultez firefox avec inspecteur. Comme vous pouvez le faire dans la capture d’écran ci-dessus (voir le dossier des captures d’écran “single_container_broken.png” pour la demande de requête brute se bloque
cassé_1
Je peux vérifier que nginx sert les fichiers statiques en naviguant jusqu’à / bkapp / static / (voir bokeh_recipe / single_container / nginx / bokeh_app.conf pour config)
statique
Un autre problème est que j’essaye de bash directement le serveur bokeh intégré (avec / bkapp /) mais je me retrouve avec un 400 (refusé?)
bkapp
Je sais que vous pouvez simplement regarder bokeh_recipe / single_container / nginx / bokeh_app.conf mais je veux le montrer ici. Je pense que je dois config nginx pour rendre explicite que la “demande” à bkapp à la 127.0.0.1:46518 provient du serveur et non du client.
## Define the parameters for a specific virtual host/server server { # define what port to listen on listen 80; # Define the specified charset to the “Content-Type” response header field charset utf-8; # Configure NGINX to deliver static content from the specified folder # NOTE this should be a docker volume shared from the bokehrecipe_web container (css, js for bokeh serve) location /bkapp/static/ { alias /home/flask/app/web/static/; autoindex on; } # Configure NGINX to reverse proxy HTTP requests to the upstream server (Gunicorn (WSGI server)) location / { proxy_pass http://127.0.0.1:8000; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_http_version 1.1; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $host:$server_port; proxy_buffering off; } # deal with the http://127.0.0.1/bkapp/autoload.js (note hard coded port for now) location /bkapp/ { proxy_pass http://127.0.0.1:46518; } }