大きな絵
私は Flask サイトを持っていますが、以前は Linode 上の Ubuntu で正常に動作していました。私はこれを Yeoman でブートストラップしたので、nginx、wsgi/Werkzeug、gunicorn の違いを理解する必要はありませんでした。
しかし、私は今、Dokku 0.7.2 を搭載した Ubuntu 16.04 の事前構成済みディスク イメージを使用して、最初の Digitalocean ドロップレットに移行しようとしているので、それが問題になっています。Docker や Dokku、あるいはコンテナ化全般を扱うのは今回が初めてです。
Dokku は、Flask アプリをデプロイするときにエラーを出力しませんでした。アプリはドロップレットの IP アドレスの後に が続く形式で実行されていると表示しました:17520
。(ドメイン名は使用せず、IP アドレスのみを使用しています。)
問題の定義
私のサイトはHTTPリクエストに応答しませんDokku は展開に成功したと言っているにもかかわらず、Chrome は「このサイトにアクセスできません」と表示します。
すでに試した解決策
Dokku がエラーなしでアプリをデプロイするには、ローカル リポジトリのルートにいくつかのファイルを追加して再度プッシュする必要があったため、数回の試行が必要でした。
プロセスファイル
まず、次の 1 行の web: を含む 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
という 1 行を含むpackage.json
と という.buildpacks
1 行を含むを追加しhttps://github.com/heroku/heroku-buildpack-python
、 に再度プッシュしましたgit push dokku
。
ガンイコーン
Yeoman は、gunicorn
このアプリをブートストラップしたときには含まれていませんでした。nginx と wsgi/Werkzeug のみが含まれていました。すべての Python Procfile の例がgunicorn
HTTP サーバーとして使用されていることに気づいたので、Procfilegunicorn==0.17.2
にweb: gunicorn app:app` を追加しました。Dokku はこのバージョンのインストール時にエラーをスローしませんでしたが、HTTP リクエストにはまだ応答がありません。requirements.txt. I changed
to
ログ
ドックログ
ドロップレットにログオンしてコマンドを実行すると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
イベントログ
まだドロップレットにログインしたまま、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
この情報を確認してください)