큰 그림
이전에 Linode의 Ubuntu에서 성공적으로 실행되었던 Flask 사이트가 있습니다. Yeoman으로 부트스트랩을 수행한 결과 nginx, wsgi/Werkzeug 및 gunicorn의 차이점을 파악할 필요가 없었습니다.
그러나 Dokku 0.7.2와 함께 사전 구성된 Ubuntu 16.04의 디스크 이미지를 사용하여 첫 번째 Digitalocean 드롭릿으로 마이그레이션하려고 하기 때문에 이것이 나를 괴롭히고 있습니다. Docker나 Dokku 또는 일반적인 컨테이너화는 이번이 처음입니다.
Dokku는 내 Flask 앱을 배포할 때 오류를 표시하지 않았습니다. 앱이 내 드롭릿의 IP 주소 뒤에 :17520
. (도메인 이름은 사용하지 않고 IP 주소만 사용합니다.)
문제 정의
내 사이트가 HTTP 요청에 응답하지 않습니다., Dokku가 배치에 성공했다고 말했음에도 불구하고. 크롬에서 '이 사이트에 접속할 수 없습니다'라고 뜹니다.
이미 시도한 솔루션
내 로컬 저장소의 루트에 일부 파일을 추가하고 다시 푸시해야 했기 때문에 Dokku가 오류 없이 내 앱을 배포하는 데 몇 번의 시도가 필요했습니다.
프로필
python run.py
먼저 한 줄의 web:이 포함된 Procfile이 필요했습니다 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 서버로 사용되는 것을 확인하여 Procfile 웹 gunicorn==0.17.2
에 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
이 정보를 확인하세요)