У меня есть сайт Flask, который ранее успешно работал на Ubuntu на Linode. Я загрузил его с помощью Yeoman, и в результате мне не нужно было выяснять разницу между nginx, wsgi / Werkzeug и gunicorn.
Однако теперь, когда я пытаюсь перенести его на свою первую каплю Digitalocean, это кусает меня в зад, используя их предварительно настроенный образ диска Ubuntu 16.04 с Dokku 0.7.2. Я впервые использую Docker или Dokku или контейнеризацию в целом.
Dokku не выдавал ошибки при развертывании моего приложения Flask - он сказал мне, что приложение работает на IP-адресе моей капли, а затем :17520
. (Я использую не доменное имя, а только IP-адрес.)
Мой сайт не отвечает на HTTP-запросы, несмотря на то, что Докку сказал, что это удалось. Chrome сообщает: «Этот сайт недоступен».
Dokku потребовалось несколько попыток, чтобы развернуть мое приложение без ошибок, потому что мне нужно было добавить некоторые файлы в корень моего локального репозитория и попробовать отправить его снова.
Сначала мне понадобился Procfile, содержащий однострочную сеть: python run.py
где run.py
является:
from app import app
app.run(host = '0.0.0.0', debug = True)
Затем мне нужно было запретить Dokku видеть мой инструмент разработки Node.js и пытаться развернуть его как приложение Node.js. Я добавил .slugignore
содержащий единственную строку package.json
, и .buildpacks
содержащий единственную строку https://github.com/heroku/heroku-buildpack-python
и снова нажал на git push dokku
.
Йомен не включил gunicorn
когда я загружал это приложение - только nginx и wsgi / Werkzeug. Я заметил все используемые примеры Python Procfile gunicorn
в качестве HTTP-сервера, поэтому я добавил gunicorn==0.17.2
к моему requirements.txt. I changed
Procfileto
web: gunicorn app: app`. Dokku не выдает ошибку при установке этой версии, но ответа на HTTP-запросы все равно нет.
Когда я вхожу в свою каплю и запускаю команду 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
Поэтому я также попытался добавить: 5000 к IP-адресу. И, конечно же, на всякий случай попробовал и порт 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
Все еще вошел в свою каплю, я зашел в 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
Какая у вас конфигурация nginx и журналы nginx? Этот экземпляр nginx изначально работает на хосте и управляется с помощью systemd?
Что значит netstat -tulpn
на сервере говорите?
Вы видите, что порт 5000 из контейнера перенаправлен на порт на главном компьютере? (чек docker ps
для этой информации)