我正在尝试使用uWSGI和Nginx作为反向代理来部署Flask应用程序。
它们通过unix套接字连接(至少是这样)。
这是我的烧瓶应用程序:
app.py:
from flask import Flask
def create_app():
app = Flask(__name__)
@app.route("/")
def root():
return "Hello, world!"
return app
这是我的Dockerfile:
FROM nginx-python
WORKDIR /app
COPY ./app .
RUN pip3 install -r requirements.txt
COPY ./demoapp.conf /etc/nginx/conf.d/demoapp.conf
EXPOSE 9090
CMD uwsgi --ini demoapp.ini
在nginx-python是我创建的自定义图像的地方,(显然)已经准备好使用nginx和python。
这是我的uWSGI的demoapp.ini:
[uwsgi]
module = app:create_app()
master = true
processes = 2
socket = demoapp.sock
chmod-socket = 666
vacuum = true
die-on-term = true
然后,这是我的Nginx配置:
server {
listen 9090;
server_name localhost;
location / {
include uwsgi_params;
uwsgi_pass unix:/app/demoapp.sock
}
}
这就是我运行图像的方式:
$ docker container run -it -p 7777:9090 -p 6666:80 demoapp
如您所见,我正在映射两个端口。
7777
应该重定向到9090
,这是Nginx通过unix套接字与uWSGI通信的那个。
然后将6666
到80
,这是Nginx的默认服务器(加载Nginx欢迎页面的服务器)。
我为什么要提这个?因为事实证明,当我导航到:
它说无法访问该页面。
但,当我导航至:
它使Nginx欢迎页面完美显示。
还有一点,我知道我可以使用Docker Compose并将Flask应用程序分离到其自己的容器中,并将Nginx分离到另一个容器中。
我正按照自己的做法这样做。
答案 0 :(得分:1)
在demoapp.ini
中,您拥有
socket = demoapp.sock
哪个与nginx配置中的路径不匹配。我总是在项目中使用完整路径,并将.sock
文件放在/tmp/
您还在做我以前从未见过的事情,因此,如果无法解决上述问题,请尝试更改
[uwsgi]
module = app:create_app()
到
[uwsgi]
module = app:app
并添加
app = create_app()
到app.py
的底部。