使用 FlaskApp 配置 uWSGI
uWSGI configuration with FlaskApp
为了切换到 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 /var/www/FlaskApp/FlaskApp/runserver.ini
[uwsgi]
module = wsgi:app
master = true
processes = 5
logto = /home/jmc856/error.log
socket = runserver.sock
chmod-socket = 666
vacuum = true
die-on-term = true
假设站点可用链接到站点启用
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 图像
https://github.com/tiangolo/uwsgi-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=多-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 tail -f /var/log/nginx/error.log
如果一切正常 运行,请确保执行以下操作:
$ sudo systemctl restart {app}
$ sudo start {app}
$ sudo enable {app}
最后一个命令是我忘记的东西,它让我很长一段时间都没有意识到我的配置是好的。在我的例子中,{app} 是 'runserver'
为了切换到 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 /var/www/FlaskApp/FlaskApp/runserver.ini
[uwsgi]
module = wsgi:app
master = true
processes = 5
logto = /home/jmc856/error.log
socket = runserver.sock
chmod-socket = 666
vacuum = true
die-on-term = true
假设站点可用链接到站点启用
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 图像 https://github.com/tiangolo/uwsgi-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=多-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 tail -f /var/log/nginx/error.log
如果一切正常 运行,请确保执行以下操作:
$ sudo systemctl restart {app}
$ sudo start {app}
$ sudo enable {app}
最后一个命令是我忘记的东西,它让我很长一段时间都没有意识到我的配置是好的。在我的例子中,{app} 是 'runserver'