Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flask uWSGI配置,带烧瓶应用程序_Flask_Uwsgi_Ubuntu 16.04_Systemd - Fatal编程技术网

Flask uWSGI配置,带烧瓶应用程序

Flask uWSGI配置,带烧瓶应用程序,flask,uwsgi,ubuntu-16.04,systemd,Flask,Uwsgi,Ubuntu 16.04,Systemd,在尝试切换到Nginx时,我遇到了配置问题,并出现了502网关错误。以下是连接时的错误日志: tail -f error.log 2016/10/08 16:09:31 [crit] 21682#21682: *29 connect() to unix:/var/www/FlaskApp/FlaskApp/runserver.sock failed (13: Permission denied) while connecting to upstream, client: 73.188.249.4

在尝试切换到Nginx时,我遇到了配置问题,并出现了502网关错误。以下是连接时的错误日志:

tail -f error.log
2016/10/08 16:09:31 [crit] 21682#21682: *29 connect() to unix:/var/www/FlaskApp/FlaskApp/runserver.sock failed (13: Permission denied) while connecting to upstream, client: 73.188.249.47, server: ceejcalvert.com, request: "GET / HTTP/1.1", upstream: "uwsgi://unix:/var/www/FlaskApp/FlaskApp/runserver.sock:", host: "website.com"
如果我在服务器的终端中,我可以通过以下方式手动引导套接字来启动站点:

如果运行以下命令,则此命令将使一切正常工作:

uwsgi -s /var/www/FlaskApp/FlaskApp/runserver.sock -w runserver:app --chmod-socket=666
问题是我无法让它在守护程序模式下工作。我的配置如下:

$ cat /etc/systemd/system/runserver.service 

[Unit]
Description=uWSGI instance to serve runserver
After=network.target

[Service]
User=username
Group=www-data
WorkingDirectory=/var/www/FlaskApp/FlaskApp
Environment="PATH=/var/www/FlaskApp/FlaskApp/venv/bin"
ExecStart=/var/www/FlaskApp/FlaskApp/venv/bin/runserver.sock --ini runserver.ini

[Install]
WantedBy=multi-user.target

假设可用站点链接到已启用的站点

cat /etc/nginx/sites-available/runserver 

server {
    listen 80;
    server_name website.com;

location / {
    include uwsgi_params;
    uwsgi_pass unix:/var/www/FlaskApp/FlaskApp/runserver.sock;
    }
}
有什么明显的我遗漏的吗

当我运行以下命令时,我得到退出代码3

sudo systemctl status runserver

runserver.service - uWSGI instance to serve runserver
Loaded: loaded (/etc/systemd/system/runserver.service; enabled; vendor preset: enabled)
Active: failed (Result: exit-code) since Sat 2016-10-08 16:08:45 EDT; 20min ago
Main PID: 22365 (code=exited, status=203/EXEC)

Oct 08 16:08:45 FirstNameLastName.com systemd[1]: Stopped uWSGI instance to serve runserver.
Oct 08 16:08:45 FirstNameLastName.com systemd[1]: Started uWSGI instance to serve runserver.
Oct 08 16:08:45 FirstNameLastName.com systemd[1]: runserver.service: Main process exited, code=exited, status=203/EXEC
Oct 08 16:08:45 FirstNameLastName.com systemd[1]: runserver.service: Unit entered failed state.
Oct 08 16:08:45 FirstNameLastName.com systemd[1]: runserver.service: Failed with result 'exit-code'.

我所有的nginx和flask应用程序都使用了这个Docker图像
解决了我的问题。在大多数情况下,我的配置都很好。下面是一份清单,列出了在遇到502个网关错误时要确保的事项

1) 我首先将所有绝对路径添加到配置文件中。例如,我将systemd配置更改为:

$ cat /etc/systemd/system/runserver.service 

[Unit]
Description=uWSGI instance to serve runserver
After=network.target

[Service]
User=username
Group=www-data
WorkingDirectory=/var/www/FlaskApp/FlaskApp
Environment="PATH=/var/www/FlaskApp/FlaskApp/venv/bin"
ExecStart=/var/www/FlaskApp/FlaskApp/venv/bin/runserver.sock --ini    /var/www/FlaskApp/FlaskApp/runserver.ini
[安装] WantedBy=multi-user.target

2) 将.ini文件更改为直接调用uWSGI应用程序:

 cat /var/www/FlaskApp/FlaskApp/runserver.ini 

[uwsgi]
chdir=/var/Webpage/
wsgi-file = wsgi.py
callable = app

master = true
processes = 5

logto = /home/error.log

socket = runserver.sock
chmod-socket = 666
vacuum = true

die-on-term = true
3) 确保FlaskApp主机为0.0.0.0:

if __name__ == "__main__":
app.run(host='0.0.0.0')
4) 使用这些命令尝试找出失败的地方

确保配置具有正确的语法

$ sudo nginx -t
确保nginx守护程序正常运行

$ systemctl status nginx.service
确保服务{app}的uWSGI实例正在运行

$ systemctl
如果一切正常,但仍发现错误,请在中搜索失败

$ sudo journalctl

如果一切正常运行,请确保执行以下操作:

$ sudo systemctl restart {app}
$ sudo start {app}
$ sudo enable {app}

最后一个命令是我忘记的,在很长一段时间里,它阻止我意识到我的配置是正确的。在我的例子中,{app}是“runserver”

我让docker在本地主机上工作。是否有任何教程可以帮助您展示如何在我的Ubuntu服务器上使用此图像并将其链接到我的域名?您是否尝试过在systemd下运行uWSGI服务的方法?
$ sudo tail -f /var/log/nginx/error.log
$ sudo systemctl restart {app}
$ sudo start {app}
$ sudo enable {app}