Как настроить frontail с Django и Docker
Я пытаюсь настроить Frontail для доступа к журналам для приложения Django, развернутого с помощью Docker локально. Кто-нибудь делал это раньше? В сети очень мало документации или другой информации.
Я нашел одно решение этой проблемы. Вы можете установить npm внутри образа Docker (credit), что позволит вам также установить Frontail. Это делается путем добавления следующего кода в Dockerfile:
# Install npm to use frontail
RUN apt-get update && apt-get install -y \
npm
RUN npm install npm@latest -g && \
npm install n -g && \
n latest
# Install frontail
RUN npm i frontail -g
После этого необходимо добавить порт Frontail в файл docker-compose.yml:
ports:
- "XXXX:XXXX"
- "9001:9001"
На этом этапе вы должны быть в состоянии успешно запустить Frontail из оболочки Django, используя frontail path_to_log_file, но если вы хотите, чтобы он автоматически запускался при запуске вашего контейнера, вам нужно добавить это в сценарий оболочки точки входа. Например, если в вашем Dockerfile точка входа имеет значение run_server.sh и изначально Django запускается с помощью python manage.py runserver 0.0.0.0:8000, это нужно изменить на:
python manage.py runserver 0.0.0.0:8000 & frontail path_to_log_file
& позволяет выполнять обе команды параллельно. Это не является предлагаемым использованием контейнера Docker (один сервис на контейнер) (см. здесь и здесь), но на данный момент работает для меня.
Лучшим способом использования Frontail было бы использование его как отдельного контейнера, но мне до сих пор не удалось заставить его работать. Было бы здорово услышать от тех, кому это удалось :)
Я нашел решение, добавив Frontail как еще один сервис в файл docker-compose.yml. После извлечения образа Frontail из Docker Под вашими другими сервисами вы можете добавить:
services:
...
logs:
image: mthenw/frontail
ports:
- "9001:9001"
command: /var/log/log_filename.log
volumes:
- type: bind
source: path_to_logs_directory
target: /var/log
Где log_filename.log - это имя файла, который использует ваш логгер Django, а path_to_logs_directory - относительный каталог этого файла. Аргумент command - это то, что передается Frontail (т.е. файл журналов для мониторинга). Обратите внимание, что у меня нет никакой реальной причины использовать каталог /var/log в образе Frontail - это просто показалось логичным после изучения файловой структуры.
Единственный способ, которым я смог заставить это работать - это bind mount спасибо nonNumericalFloat но мне было бы интересно узнать, есть ли лучший способ сделать это.