El panorama

El panorama

El panorama

Tengo un sitio Flask que, anteriormente, se ejecutaba correctamente en Ubuntu en Linode. Lo inicié con Yeoman y, como resultado, no tuve que descubrir la diferencia entre nginx, wsgi/Werkzeug y gunicorn.

Sin embargo, eso me está molestando ahora que estoy intentando migrarlo a mi primer droplet de Digitalocean, usando su imagen de disco preconfigurada de Ubuntu 16.04 con Dokku 0.7.2. Esta es la primera vez que uso Docker o Dokku, o la contenedorización en general.

Dokku no dio ningún error al implementar mi aplicación Flask; me dijo que la aplicación se está ejecutando en la dirección IP de mi droplet seguida de :17520. (No estoy usando un nombre de dominio, solo la dirección IP).

Definición del problema

Mi sitio no responde a solicitudes HTTP, a pesar de que Dokku dijo que su implementación fue exitosa. Chrome dice "No se puede acceder a este sitio".

Soluciones que ya he probado

Dokku tardó algunos intentos en implementar mi aplicación sin errores, porque necesitaba agregar algunos archivos a la raíz de mi repositorio local e intentar enviarla nuevamente.

El perfil

Primero necesitaba Procfile, que contiene la web de una sola línea: python run.pydonde run.pyestá:

from app import app app.run(host = '0.0.0.0', debug = True)

Ignorar mis herramientas de desarrollo de Node.js

Lo siguiente que necesitaba era evitar que Dokku viera mis herramientas de desarrollo de Node.js e intentara implementarlas como una aplicación de Node.js. Entonces agregué .slugignoreque contiene la línea única package.jsony .buildpacksque contiene la línea única https://github.com/heroku/heroku-buildpack-pythony presioné nuevamente a git push dokku.

gunicornio

Yeoman no incluyó gunicorncuando inicié esta aplicación, solo nginx y wsgi/Werkzeug. Noté que todos los ejemplos de Python Procfile se usaban gunicorncomo servidor HTTP, así que agregué gunicorn==0.17.2a mi web requirements.txt. I changedProcfile to: gunicorn app:app`. Dokku no arrojó ningún error al instalar esta versión, pero aún no hay respuesta a las solicitudes HTTP.

Registros

registro de dokku

Cuando inicio sesión en mi droplet y ejecuto el comando dokku log [my_app_name], dice:

2017-01-17T17:11:04.733185275Z app[web.1]: * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit) 2017-01-17T17:11:04.734938531Z app[web.1]: * Restarting with stat 2017-01-17T17:11:05.024834922Z app[web.1]: * Debugger is active! 2017-01-17T17:11:05.029750092Z app[web.1]: * Debugger pin code: 208-261-801 Entonces también intenté agregar :5000 a la dirección IP. Y, por supuesto, para estar seguro, también probé el puerto 80. Todavía no hubo suerte.

Después de instalar gunicorn, el registro decía:

2017-01-18T17:09:38.303046670Z app[web.1]: 2017-01-18 17:09:38 [8] [INFO] Starting gunicorn 0.17.2 2017-01-18T17:09:38.303864158Z app[web.1]: 2017-01-18 17:09:38 [8] [INFO] Listening at: http://0.0.0.0:5000 (8) 2017-01-18T17:09:38.304140278Z app[web.1]: 2017-01-18 17:09:38 [8] [INFO] Using worker: sync 2017-01-18T17:09:38.310057688Z app[web.1]: 2017-01-18 17:09:38 [148] [INFO] Booting worker with pid: 148

Eventos.log

Todavía conectado a mi droplet, fui a var/log/dokku y abrí el archivo events.log, terminando con esto: Jan 17 16:27:55 [my-app-name] dokku-installer.py[7291]: 127.0.0.1 - - [17/Jan/2017 16:27:55] "GET /favicon.ico HTTP/1.0" 200 - Jan 17 16:28:27 [my-app-name] dokku-installer.py[7291]: 127.0.0.1 - - [17/Jan/2017 16:28:27] "HEAD / HTTP/1.0" 200 - Jan 17 16:29:49 [my-app-name] dokku-installer.py[7291]: SHA256: [then the SHA] Jan 17 16:29:50 [my-app-name] dokku-installer.py[7291]: 127.0.0.1 - - [17/Jan/2017 16:29:50] "POST /setup HTTP/1.0" 200 - Jan 17 16:29:50 [my-app-name] dokku-installer.py[7291]: Stopping nginx (via systemctl): nginx.service. Jan 17 16:29:51 [my-app-name] dokku-installer.py[7291]: Starting nginx (via systemctl): nginx.service. Jan 17 16:29:51 [my-app-name] dokku-installer.py[7291]: /bin/sh: 1: stop: not found

Respuesta1

¿Cuál es su configuración de nginx y sus registros de nginx? ¿Esta instancia de nginx se ejecuta de forma nativa en el host y se administra con systemd?

¿Qué dice netstat -tulpnen el servidor?

¿Ve el puerto 5000 del contenedor reenviado a un puerto en la computadora host? (verifique docker psesta información)

información relacionada