Как настроить nginx, dockerfile и запуск gunicorn для flask-приложения, чтобы работали вместе?

  • 25 августа 2023 г. 14:06
Ответы на вопрос 2
Для настройки nginx, Dockerfile и запуска gunicorn для Flask-приложения, следуйте следующим шагам:

1. Создайте файл Dockerfile:

```Dockerfile
FROM python:3.8-alpine

# Установка зависимостей
RUN apk update && \
    apk add --no-cache nginx && \
    apk add --no-cache --virtual .build-deps gcc musl-dev linux-headers

# Копирование приложения и установка зависимостей Flask
COPY . /app
WORKDIR /app
RUN pip install --upgrade pip && \
    pip install -r requirements.txt

# Копирование конфигурации nginx
COPY nginx.conf /etc/nginx/nginx.conf

# Открытие порта
EXPOSE 80

# Запуск Gunicorn и Nginx
CMD gunicorn --workers 4 --bind 0.0.0.0:5000 app:app && nginx -g "daemon off;"
```

2. Создайте файл nginx.conf:

```conf
worker_processes 1;

events {
    worker_connections 1024;
}

http {
    sendfile on;

    include mime.types;
    default_type application/octet-stream;

    server {
        listen 80;
        server_name _;

        location / {
            proxy_pass http://127.0.0.1:5000; # Прокси к Gunicorn
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
        }
    }
}
```

3. Создайте bash-скрипт start.sh для запуска Docker-контейнера:

```bash
#!/bin/bash

docker build -t flask-app .
docker run -d -p 80:80 --name my-app flask-app
```

4. Убедитесь, что у вас есть файл requirements.txt, содержащий зависимости вашего Flask-приложения.

5. Запустите скрипт start.sh:

```bash
bash start.sh
```

Теперь ваше Flask-приложение должно быть доступно на внешнем IP-адресе без указания порта.
Вы должны избегать объединения нескольких сервисов в один контейнер. Вместо этого, каждый контейнер должен иметь свое собственное пространство имен, чтобы взаимодействовать друг с другом. Для доступа снаружи, вы можете настроить контейнер с Nginx для экспозиции портов 80 и 443.
Похожие вопросы