Я пытаюсь развернуть приложение Flask, используя uWSGI и Nginx в качестве обратного прокси.
Они подключены через сокет 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 - это пользовательское изображение Iсоздано (очевидно), что nginx и python готовы к работе.
А это мой demoapp.ini для uWSGI:
[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 использует для связи с uWSGI через сокет Unix.
И 6666
на 80
, который является сервером по умолчанию для Nginx (тот, который загружаетстраница приветствия Nginx).
Почему я упоминаю об этом?Потому что получается, что когда я перехожу к:
http://localhost:7777/
Это говорит о том, что страница не может быть достигнута.
НО когда я перехожу к:
http://localhost:6666/
Он прекрасно отображает страницу приветствия Nginx.
И так же, какЗаметьте, я знаю, что я мог бы использовать Docker Compose и разделить приложение Flask на свой собственный контейнер, а Nginx - на другой контейнер.
Я делаю это так же, как самостоятельную практику.