总体情况
我有一个 Flask 网站,以前它在 Linode 上的 Ubuntu 上成功运行。我用 Yeoman 引导它,因此,我不需要弄清楚 nginx、wsgi/Werkzeug 和 gunicorn 之间的区别。
但是,现在我正尝试将其迁移到我的第一个 Digitalocean droplet,使用他们预先配置的 Ubuntu 16.04 磁盘映像和 Dokku 0.7.2,这让我很为难。这是我第一次使用 Docker 或 Dokku,或者一般的容器化。
部署我的 Flask 应用程序时,Dokku 没有给出错误——它告诉我该应用程序正在我的 droplet 的 IP 地址上运行,后跟:17520
。 (我没有使用域名,只使用 IP 地址。)
问题定义
我的网站没有响应 HTTP 请求,尽管 Dokku 表示已成功部署。Chrome 提示“无法访问此站点”。
我已经尝试过的解决方案
Dokku 尝试了几次才成功部署了我的应用程序,因为我需要将一些文件添加到本地存储库的根目录,然后尝试再次推送。
Procfile
首先我需要 Procfile,它包含单行网页:python run.py
其中run.py
:
from app import app app.run(host = '0.0.0.0', debug = True)
忽略我的 Node.js 开发工具
接下来,我需要阻止 Dokku 看到我的 Node.js 开发工具并尝试将其部署为 Node.js 应用程序。因此,我添加了.slugignore
包含单行的package.json
,以及.buildpacks
包含单行的https://github.com/heroku/heroku-buildpack-python
,然后再次推送到git push dokku
。
古尼康
当我启动此应用程序时,Yeoman 并未包含 -gunicorn
只有 nginx 和 wsgi/Werkzeug。我注意到所有 Python Procfile 示例都用作gunicorn
HTTP 服务器,因此我将“web: gunicorn app:app”添加gunicorn==0.17.2
到我的requirements.txt. I changed
Procfile中to
。安装此版本时,Dokku 没有抛出错误,但仍然没有对 HTTP 请求的响应。
日志
Dokku日志
当我登录到我的 droplet 并运行命令时dokku log [my_app_name]
,它显示:
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
所以我也尝试在 IP 地址后附加 :5000。当然,为了安全起见,我也尝试了端口 80。还是没成功。
我安装后gunicorn
,日志显示:
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
事件日志
仍然登录到我的 droplet,我转到 var/log/dokku 并打开文件events.log
,最后得到以下内容:
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
答案1
您的 nginx 配置和 nginx 日志是什么?此 nginx 实例是否在主机上本地运行并使用 systemd 进行管理?
netstat -tulpn
服务器上说什么?
您是否看到容器中的端口 5000 转发到主机上的端口?(检查docker ps
此信息)