A grande imagem

A grande imagem

A grande imagem

Eu tenho um site Flask que - anteriormente - estava rodando com sucesso no Ubuntu no Linode. Eu inicializei com Yeoman e, como resultado, não precisei descobrir a diferença entre nginx, wsgi/Werkzeug e gunicorn.

No entanto, isso está me incomodando agora que estou tentando migrá-lo para meu primeiro droplet Digitalocean, usando sua imagem de disco pré-configurada do Ubuntu 16.04 com Dokku 0.7.2. Esta é minha primeira vez com Docker ou Dokku, ou conteinerização em geral.

Dokku não apresentou erro ao implantar meu aplicativo Flask - ele me disse que o aplicativo está sendo executado no endereço IP do meu droplet seguido por :17520. (Não estou usando um nome de domínio, apenas o endereço IP.)

Definição de problema

Meu site não responde a solicitações HTTP, apesar de Dokku dizer que a implantação foi bem-sucedida. O Chrome diz "Este site não pode ser acessado".

Soluções que já experimentei

Foram necessárias algumas tentativas para Dokku implantar meu aplicativo sem erros, porque eu precisava adicionar alguns arquivos à raiz do meu repositório local e tentar enviá-lo novamente.

O perfil

Primeiro eu precisava do Procfile, que contém a linha única web: python run.pyonde run.pyestá:

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

Ignorando minhas ferramentas de desenvolvimento Node.js

Em seguida, precisei evitar que Dokku visse minhas ferramentas de desenvolvimento Node.js e tentasse implantá-las como um aplicativo Node.js. Então adicionei .slugignorecontendo a linha única package.jsone .buildpackscontendo a linha única https://github.com/heroku/heroku-buildpack-pythone empurrei novamente para git push dokku.

Gunicórnio

Yeoman não incluiu gunicornquando inicializei este aplicativo - apenas nginx e wsgi/Werkzeug. Notei todos os exemplos do Procfile Python usados gunicorn​​​​como servidor HTTP, então adicionei gunicorn==0.17.2ao meu requirements.txt. I changedProcfile toweb: gunicorn app:app`. Dokku não gerou erro ao instalar esta versão, mas ainda não há resposta às solicitações HTTP.

Histórico

Registro Dokku

Quando eu faço logon no meu droplet e executo o comando dokku log [my_app_name], ele diz:

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 Então também tentei acrescentar :5000 ao endereço IP. E claro, só por segurança, tentei a porta 80 também. Ainda sem sorte.

Depois de instalar gunicorn, o log dizia:

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

Ainda logado no meu droplet, fui em var/log/dokku e abri o arquivo events.log, terminando com isto: 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

Responder1

Qual é a sua configuração e logs do nginx? Esta instância nginx está sendo executada nativamente no host e gerenciada com systemd?

O que netstat -tulpndiz no servidor?

Você vê a porta 5000 do contêiner encaminhada para uma porta no computador host? (verifique docker psesta informação)

informação relacionada