Das große Bild

Das große Bild

Das große Bild

Ich habe eine Flask-Site, die zuvor erfolgreich unter Ubuntu auf Linode lief. Ich habe sie mit Yeoman gebootet und musste daher den Unterschied zwischen nginx, wsgi/Werkzeug und gunicorn nicht herausfinden.

Das ärgert mich jedoch jetzt, da ich versuche, es auf mein erstes Digitalocean-Droplet zu migrieren, wobei ich ihr vorkonfiguriertes Disk-Image von Ubuntu 16.04 mit Dokku 0.7.2 verwende. Dies ist mein erstes Mal mit Docker oder Dokku oder Containerisierung im Allgemeinen.

Dokku hat beim Bereitstellen meiner Flask-App keinen Fehler ausgegeben. Es hat mir lediglich angezeigt, dass die App auf der IP-Adresse meines Droplets läuft, gefolgt von :17520. (Ich verwende keinen Domänennamen, sondern nur die IP-Adresse.)

Problem Definition

Meine Site antwortet nicht auf HTTP-Anfragen, obwohl Dokku angibt, dass die Bereitstellung erfolgreich war. Chrome sagt: „Diese Site kann nicht erreicht werden.“

Lösungen, die ich bereits ausprobiert habe

Dokku benötigte mehrere Versuche, um meine App ohne Fehler bereitzustellen, da ich einige Dateien zum Stammverzeichnis meines lokalen Repositorys hinzufügen und dann erneut versuchen musste, sie zu pushen.

Das Profil

Zuerst brauchte ich Procfile, das die einzeilige Datei web: enthält, python run.pyin der run.pysteht:

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

Ignorieren meiner Node.js-Entwicklertools

Als nächstes musste ich verhindern, dass Dokku meine Node.js-Entwicklungstools sieht und versucht, diese als Node.js-App bereitzustellen. Also habe ich „ .slugignoreenthält die einzelne Zeile“ hinzugefügt package.jsonund „ .buildpacksenthält die einzelne Zeile“ https://github.com/heroku/heroku-buildpack-pythonund erneut auf gepusht git push dokku.

Waffenhorn

Yeoman war gunicornbeim Bootstrapping dieser App nicht dabei – nur nginx und wsgi/Werkzeug. Mir ist aufgefallen, dass alle Python-Procfile-Beispiele gunicornals HTTP-Server verwendet wurden, also habe ich gunicorn==0.17.2zu meinem requirements.txt. I changedProcfile- toWeb Folgendes hinzugefügt: gunicorn app:app`. Dokku hat bei der Installation dieser Version keinen Fehler ausgegeben, aber es gibt immer noch keine Antwort auf HTTP-Anfragen.

Protokolle

Dokku-Protokoll

Wenn ich mich bei meinem Droplet anmelde und den Befehl ausführe dokku log [my_app_name], heißt es:

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 Also habe ich auch versucht, :5000 an die IP-Adresse anzuhängen. Und natürlich habe ich sicherheitshalber auch Port 80 probiert. Immer noch ohne Erfolg.

Nach der Installation gunicornlautete das Protokoll:

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

Events.log

Immer noch bei meinem Droplet angemeldet, ging ich zu var/log/dokku und öffnete die Datei events.log, die mit folgendem Inhalt endete: 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

Antwort1

Wie sehen Ihre Nginx-Konfiguration und Ihre Nginx-Protokolle aus? Läuft diese Nginx-Instanz nativ auf dem Host und wird sie mit systemd verwaltet?

Was steht netstat -tulpnauf dem Server?

Sehen Sie, dass Port 5000 vom Container an einen Port auf dem Hostcomputer weitergeleitet wurde? (Achten Sie docker psauf diese Information)

verwandte Informationen