Большая картина

Большая картина

Большая картина

У меня есть сайт Flask, который раньше успешно работал на Ubuntu на Linode. Я загрузил его с помощью Yeoman, и в результате мне не пришлось разбираться в разнице между nginx, wsgi/Werkzeug и gunicorn.

Однако, это кусает меня за задницу сейчас, когда я пытаюсь перенести его на свой первый дроплет Digitalocean, используя их предварительно настроенный образ диска Ubuntu 16.04 с Dokku 0.7.2. Это мой первый опыт с Docker или Dokku, или контейнеризацией в целом.

Dokku не выдал ошибку при развертывании моего приложения Flask — он сообщил мне, что приложение запущено на IP-адресе моего дроплета, за которым следует :17520. (Я не использую доменное имя, а только IP-адрес.)

Определение проблемы

Мой сайт не отвечает на HTTP-запросы, несмотря на то, что Dokku утверждает, что успешно развернулся. Chrome сообщает: «Этот сайт не может быть доступен».

Решения, которые я уже пробовал

Dokku потребовалось несколько попыток, чтобы развернуть мое приложение без ошибок, поскольку мне нужно было добавить некоторые файлы в корень моего локального репозитория и попытаться отправить его снова.

Профайл

Сначала мне понадобился Procfile, содержащий одну строку web:, python run.pyгде run.pyнаходится:

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

Игнорирование моего инструментария Node.js Dev

Далее мне нужно было запретить 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-сервер, поэтому я добавил gunicorn==0.17.2в свой requirements.txt. I changedProcfile toweb: 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

решение1

Каковы ваши настройки nginx и логи nginx? Этот экземпляр nginx запущен изначально на хосте и управляется с помощью systemd?

Что netstat -tulpnнаписано на сервере?

Видите ли вы порт 5000 из контейнера, перенаправленный на порт на хост-компьютере? (проверьте docker psэту информацию)

Связанный контент