Flask - 使用 Gunicorn、Nginx 和 Supervisor 部署,Supervisor 错误日志
Flask - Deployment with Gunicorn, Nginx and Supervisor, Supervisor error log
我已经使用 Gunicorn + Nginx + Supervisor 部署了一个 Flask 应用程序。它不起作用。
在线搜索发现了几个类似问题的报告,但 none 有适合我们情况的解释或解决问题的修复程序。
Here 据说要关闭 daemonize gunicorn。如果我是对的,那不是我的情况。
好像是什么东西启动了监听8000端口的服务。
Supervisor 每秒向日志文件发送错误。
有什么可以帮助我的?
Supervisor 应用程序的错误-stderr.log:
[2015-02-19 18:56:19 +0300] [964] [INFO] Starting gunicorn 19.2.1
[2015-02-19 18:56:19 +0300] [964] [INFO] Listening at: http://127.0.0.1:8000 (964)
[2015-02-19 18:56:19 +0300] [964] [INFO] Using worker: sync
[2015-02-19 18:56:19 +0300] [1078] [INFO] Booting worker with pid: 1078
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
* Restarting with stat
[2015-02-19 18:56:20 +0300] [1081] [INFO] Starting gunicorn 19.2.1
[2015-02-19 18:56:20 +0300] [1081] [ERROR] Connection in use: ('localhost', 8000)
[2015-02-19 18:56:20 +0300] [1081] [ERROR] Retrying in 1 second.
[2015-02-19 18:56:21 +0300] [1081] [ERROR] Connection in use: ('localhost', 8000)
[2015-02-19 18:56:21 +0300] [1081] [ERROR] Retrying in 1 second.
[2015-02-19 18:56:22 +0300] [1081] [ERROR] Connection in use: ('localhost', 8000)
[2015-02-19 18:56:22 +0300] [1081] [ERROR] Retrying in 1 second.
[2015-02-19 18:56:23 +0300] [1081] [ERROR] Connection in use: ('localhost', 8000)
[2015-02-19 18:56:23 +0300] [1081] [ERROR] Retrying in 1 second.
[2015-02-19 18:56:24 +0300] [1081] [ERROR] Connection in use: ('localhost', 8000)
[2015-02-19 18:56:24 +0300] [1081] [ERROR] Retrying in 1 second.
[2015-02-19 18:56:25 +0300] [1081] [ERROR] Can't connect to ('localhost', 8000)
[2015-02-19 18:56:25 +0300] [1078] [INFO] Worker exiting (pid: 1078)
[2015-02-19 18:56:25 +0300] [1122] [INFO] Booting worker with pid: 1122
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
* Restarting with stat
[2015-02-19 18:56:27 +0300] [1148] [INFO] Starting gunicorn 19.2.1
[2015-02-19 18:56:27 +0300] [1148] [ERROR] Connection in use: ('localhost', 8000)
[2015-02-19 18:56:27 +0300] [1148] [ERROR] Retrying in 1 second.
[2015-02-19 18:56:28 +0300] [1148] [ERROR] Connection in use: ('localhost', 8000)
[2015-02-19 18:56:28 +0300] [1148] [ERROR] Retrying in 1 second.
[2015-02-19 18:56:29 +0300] [1148] [ERROR] Connection in use: ('localhost', 8000)
[2015-02-19 18:56:29 +0300] [1148] [ERROR] Retrying in 1 second.
[2015-02-19 18:56:30 +0300] [1148] [ERROR] Connection in use: ('localhost', 8000)
[2015-02-19 18:56:30 +0300] [1148] [ERROR] Retrying in 1 second.
[2015-02-19 18:56:31 +0300] [1148] [ERROR] Connection in use: ('localhost', 8000)
[2015-02-19 18:56:31 +0300] [1148] [ERROR] Retrying in 1 second.
[2015-02-19 18:56:32 +0300] [1148] [ERROR] Can't connect to ('localhost', 8000)
[2015-02-19 18:56:32 +0300] [1122] [INFO] Worker exiting (pid: 1122)
[2015-02-19 18:56:32 +0300] [1206] [INFO] Booting worker with pid: 1206
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
* Restarting with stat
[2015-02-19 18:56:32 +0300] [1211] [INFO] Starting gunicorn 19.2.1
[2015-02-19 18:56:32 +0300] [1211] [ERROR] Connection in use: ('localhost', 8000)
我的supervisor.conf:
[program:app]
command = /home/www/app/flask/bin/gunicorn app:app -b localhost:8000 --preload
directory = /home/www/app
user = webhost
Netstat -tulpin
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 930/nginx
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 855/sshd
tcp 0 0 127.0.0.1:8000 0.0.0.0:* LISTEN 1392/python3
tcp6 0 0 :::22 :::* LISTEN 855/sshd
和ps辅助 | grep python
root 954 0.1 2.4 60564 12440 ? Ss 18:56 0:01 /usr/bin/python /usr/bin/supervisord -c /etc/supervisor/supervisord.conf
webhost 1392 0.0 3.2 67148 16512 ? S 19:00 0:00 /home/www/app/flask/bin/python3 /home/www/app/flask/bin/gunicorn app:app -b localhost:8000
webhost 2124 5.2 4.2 86072 21344 ? S 19:12 0:00 /home/www/app/flask/bin/python3 /home/www/app/flask/bin/gunicorn app:app -b localhost:8000
webhost 2126 5.2 3.2 67148 16488 ? S 19:12 0:00 /home/www/app/flask/bin/python3 /home/www/app/flask/bin/gunicorn app:app -b localhost:8000
webhost 2130 0.0 0.1 11744 920 pts/0 S+ 19:13 0:00 grep --color=auto python
更新。
主管配置在上面
nginx.conf
server {
location / {
proxy_pass http://127.0.0.1:8000;
}
location /static {
alias /home/www/myapp/app/static/;
}
}
文件结构
myapp
|
|-app-
| |
| __init__.py
|
run.py
|
config.py
__init__.py
from flask import Flask
app = Flask(__name__)
app.config.from_object('config')
from app import views
run.py
#!flask/bin/python
from app import app
app.run()
config.py
# For valid forms
CSRF_ENABLED = True
SECRET_KEY = 'never-guess'
我吓坏了。感谢@Ibrahim
我在 run.py
通过 gunicorn 启动了一个应用程序
#!flask/bin/python
from app import app
app.run()
gunicorn 也创建了进程 app.run()
。
他们互相冲突。
刚刚删除了那个字符串。
我遇到了同样的问题,通过调整 Alwx 的回答,我的解决方案是仅 运行 如果模块被称为主应用程序 (run.py):
from my_app import create_app
app = create_app()
if __name__ == '__main__':
app.run(host='0.0.0.0', port=8080, debug=True)
然后我 运行 它与 gunicorn:
gunicorn run:app
而且我仍然可以 运行 像以前一样 python run.py
我已经使用 Gunicorn + Nginx + Supervisor 部署了一个 Flask 应用程序。它不起作用。 在线搜索发现了几个类似问题的报告,但 none 有适合我们情况的解释或解决问题的修复程序。 Here 据说要关闭 daemonize gunicorn。如果我是对的,那不是我的情况。
好像是什么东西启动了监听8000端口的服务。 Supervisor 每秒向日志文件发送错误。
有什么可以帮助我的?
Supervisor 应用程序的错误-stderr.log:
[2015-02-19 18:56:19 +0300] [964] [INFO] Starting gunicorn 19.2.1
[2015-02-19 18:56:19 +0300] [964] [INFO] Listening at: http://127.0.0.1:8000 (964)
[2015-02-19 18:56:19 +0300] [964] [INFO] Using worker: sync
[2015-02-19 18:56:19 +0300] [1078] [INFO] Booting worker with pid: 1078
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
* Restarting with stat
[2015-02-19 18:56:20 +0300] [1081] [INFO] Starting gunicorn 19.2.1
[2015-02-19 18:56:20 +0300] [1081] [ERROR] Connection in use: ('localhost', 8000)
[2015-02-19 18:56:20 +0300] [1081] [ERROR] Retrying in 1 second.
[2015-02-19 18:56:21 +0300] [1081] [ERROR] Connection in use: ('localhost', 8000)
[2015-02-19 18:56:21 +0300] [1081] [ERROR] Retrying in 1 second.
[2015-02-19 18:56:22 +0300] [1081] [ERROR] Connection in use: ('localhost', 8000)
[2015-02-19 18:56:22 +0300] [1081] [ERROR] Retrying in 1 second.
[2015-02-19 18:56:23 +0300] [1081] [ERROR] Connection in use: ('localhost', 8000)
[2015-02-19 18:56:23 +0300] [1081] [ERROR] Retrying in 1 second.
[2015-02-19 18:56:24 +0300] [1081] [ERROR] Connection in use: ('localhost', 8000)
[2015-02-19 18:56:24 +0300] [1081] [ERROR] Retrying in 1 second.
[2015-02-19 18:56:25 +0300] [1081] [ERROR] Can't connect to ('localhost', 8000)
[2015-02-19 18:56:25 +0300] [1078] [INFO] Worker exiting (pid: 1078)
[2015-02-19 18:56:25 +0300] [1122] [INFO] Booting worker with pid: 1122
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
* Restarting with stat
[2015-02-19 18:56:27 +0300] [1148] [INFO] Starting gunicorn 19.2.1
[2015-02-19 18:56:27 +0300] [1148] [ERROR] Connection in use: ('localhost', 8000)
[2015-02-19 18:56:27 +0300] [1148] [ERROR] Retrying in 1 second.
[2015-02-19 18:56:28 +0300] [1148] [ERROR] Connection in use: ('localhost', 8000)
[2015-02-19 18:56:28 +0300] [1148] [ERROR] Retrying in 1 second.
[2015-02-19 18:56:29 +0300] [1148] [ERROR] Connection in use: ('localhost', 8000)
[2015-02-19 18:56:29 +0300] [1148] [ERROR] Retrying in 1 second.
[2015-02-19 18:56:30 +0300] [1148] [ERROR] Connection in use: ('localhost', 8000)
[2015-02-19 18:56:30 +0300] [1148] [ERROR] Retrying in 1 second.
[2015-02-19 18:56:31 +0300] [1148] [ERROR] Connection in use: ('localhost', 8000)
[2015-02-19 18:56:31 +0300] [1148] [ERROR] Retrying in 1 second.
[2015-02-19 18:56:32 +0300] [1148] [ERROR] Can't connect to ('localhost', 8000)
[2015-02-19 18:56:32 +0300] [1122] [INFO] Worker exiting (pid: 1122)
[2015-02-19 18:56:32 +0300] [1206] [INFO] Booting worker with pid: 1206
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
* Restarting with stat
[2015-02-19 18:56:32 +0300] [1211] [INFO] Starting gunicorn 19.2.1
[2015-02-19 18:56:32 +0300] [1211] [ERROR] Connection in use: ('localhost', 8000)
我的supervisor.conf:
[program:app]
command = /home/www/app/flask/bin/gunicorn app:app -b localhost:8000 --preload
directory = /home/www/app
user = webhost
Netstat -tulpin
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 930/nginx
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 855/sshd
tcp 0 0 127.0.0.1:8000 0.0.0.0:* LISTEN 1392/python3
tcp6 0 0 :::22 :::* LISTEN 855/sshd
和ps辅助 | grep python
root 954 0.1 2.4 60564 12440 ? Ss 18:56 0:01 /usr/bin/python /usr/bin/supervisord -c /etc/supervisor/supervisord.conf
webhost 1392 0.0 3.2 67148 16512 ? S 19:00 0:00 /home/www/app/flask/bin/python3 /home/www/app/flask/bin/gunicorn app:app -b localhost:8000
webhost 2124 5.2 4.2 86072 21344 ? S 19:12 0:00 /home/www/app/flask/bin/python3 /home/www/app/flask/bin/gunicorn app:app -b localhost:8000
webhost 2126 5.2 3.2 67148 16488 ? S 19:12 0:00 /home/www/app/flask/bin/python3 /home/www/app/flask/bin/gunicorn app:app -b localhost:8000
webhost 2130 0.0 0.1 11744 920 pts/0 S+ 19:13 0:00 grep --color=auto python
更新。 主管配置在上面
nginx.conf
server {
location / {
proxy_pass http://127.0.0.1:8000;
}
location /static {
alias /home/www/myapp/app/static/;
}
}
文件结构
myapp
|
|-app-
| |
| __init__.py
|
run.py
|
config.py
__init__.py
from flask import Flask
app = Flask(__name__)
app.config.from_object('config')
from app import views
run.py
#!flask/bin/python
from app import app
app.run()
config.py
# For valid forms
CSRF_ENABLED = True
SECRET_KEY = 'never-guess'
我吓坏了。感谢@Ibrahim
我在 run.py
#!flask/bin/python
from app import app
app.run()
gunicorn 也创建了进程 app.run()
。
他们互相冲突。
刚刚删除了那个字符串。
我遇到了同样的问题,通过调整 Alwx 的回答,我的解决方案是仅 运行 如果模块被称为主应用程序 (run.py):
from my_app import create_app
app = create_app()
if __name__ == '__main__':
app.run(host='0.0.0.0', port=8080, debug=True)
然后我 运行 它与 gunicorn:
gunicorn run:app
而且我仍然可以 运行 像以前一样 python run.py