Nginx Gunicon Da sh (Flask) Приложение, кажется, где-то кеширует результаты (где ??) - PullRequest
0 голосов
/ 01 апреля 2020

Я настроил приложение da sh для визуализации развития инфекций COVID-19 в Германии с течением времени на виртуальной машине Google, работающей под управлением Ubuntu 18.04.

Приложение основано на трех docker контейнерах:

  1. Само приложение обслуживается gunicorn (на порту 5000)
  2. NGINX контейнера (делает перевод с 80 -> 443 -> 5000)
  3. Контейнер Certbot (для приобретения и обновления сертификатов SSL)

Теперь моя проблема в том, что я делаю, приложение, которое я получаю Сервис - довольно устаревшая версия приложения (данные точно такие, как при первом его развертывании. До 28 марта). Я попытался изменить исходные данные, чтобы включить более новые, но также включить меньшее количество данных, и не увидел никаких изменений вообще. Я также попытался изменить настройки Nginx для proxy_buffers, proxy_buffer_size, proxy_buffering, но безрезультатно.

Это заставляет меня поверить, что я получаю кэшированное приложение. Я пробовал разные браузеры / машины / устройства, что наводит меня на мысль, что кэширование происходит на стороне сервера.

Я не очень знаком с Nginx, ни с Gunicorn, ни с Da sh. Но что я нахожу очень странным, так это то, что результаты казались обналиченными, даже после многократных docker-compose up и down.

Чего мне здесь не хватает?

Найти репо здесь :

на основе следующего docker-compose файла:

version: '3.7'

services:
  web:
    build: ./services/web
    command: gunicorn --bind 0.0.0.0:5000 wsgi:app
    expose:
      - 5000

  nginx:
    image: nginx:1.17-alpine
    restart: unless-stopped
    volumes:
      - ./data/nginx:/etc/nginx/conf.d
      - ./data/certbot/conf:/etc/letsencrypt
      - ./data/certbot/www:/var/www/certbot
    ports:
      - "80:80"
      - "443:443"
    depends_on:
      - web
    command: "/bin/sh -c 'while :; do sleep 6h & wait $${!}; nginx -s reload; done & nginx -g \"daemon off;\"'"

  certbot:
    image: certbot/certbot
    restart: unless-stopped
    volumes:
      - ./data/certbot/conf:/etc/letsencrypt
      - ./data/certbot/www:/var/www/certbot
    entrypoint: "/bin/sh -c 'trap exit TERM; while :; do certbot renew; sleep 12h & wait $${!}; done;'"

1 Ответ

1 голос
/ 02 апреля 2020

Может быть потому, что в Интернете Dockerfile запускает команду COPY для копирования во весь этот каталог, включая data.csv.

. Поэтому, если вы поместите новый data.csv в этот каталог на хост, он будет скопирован в образ, только если вы выполните docker-compose build.

. Вероятно, это можно исправить, добавив монтирование тома в службу web и поместив туда data.csv, что позволит чтобы обновить этот файл на хосте, затем введите docker-compose restart web.

Чтобы избежать необходимости вводить команду перезапуска, вам, вероятно, придется изменить способ кодирования этой части :

def load_data():
    global data
    _ = pd.read_csv(os.path.join(os.path.dirname(__file__), '../data.csv'))
    return _

data = load_data()

Дайте мне знать, если вам нужен дополнительный совет по этому вопросу.

...