Автор оригинала: Samuel James.
Обновление: Docker-Compose
Файл был обновлен, чтобы позволить серверу Django отправлять журналы для правильной логики. Пожалуйста, ссылайтесь на хранилище, а также settings.py Для настроек журнала.
Этот пост является продолжением использования Django с Elasticsearch, Logstash и Kibana (стек лося)
Исходный код для этого поста
Примечание : Наше внимание не на основе оснований докера. Если бы вы хотели иметь общее представление о Docker, затем следуйте этим ссылка Прежде чем вернуться в противном случае, и наслаждайтесь шоу.
Докер некоторое время был рядом с блоком, и некоторые люди не так знакомы со всей идеей докера, не говоря уже о том, чтобы его использовать. Здесь я сделаю смелую попытку показать ее приложение и как это делает развитие легко, поэтому будьте готовы ездить со мной, так как мы исследуем силу Docker и как его можно интегрировать в наше/ваше приложение.
Проблема!
В предыдущем сообщении блогов мы установили Elasticsearch, Kibana и logstash, и нам пришлось открыть разные терминалы в других, чтобы использовать его, он работал правильно? Но идея необходимости делать все, что может быть болью, если бы вам пришлось начать все этот процесс вручную. Moreso, если у вас были разные разработчики, работающие над таким проектом, им придется настроить в соответствии с их операционной системой (ОС) (MacOSX, Linux и Windows)
Это сделало бы окружающую среду разработки для разработчиков в том случае, в случае основы и повышения сложности и времени потребуется, чтобы решить любую проблему или проблемы, которые вы, вероятно, столкнулись, когда разрабатываются, не крутые правы?
Введите Docker
Docker предоставляет контейнерное изображение, которое является легким, автономным, исполняемым пакетом программного обеспечения, который включает в себя все необходимое для его запуска: код, время выполнения, системные инструменты, системные библиотеки, настройки и т. Д.
Независимо от окружающей среды, контейнерное программное обеспечение всегда будет запускать одинаково как на приложениях на основе Linux, так и на Windows, Ссылка Отказ
Помимо этого вступления, докера изолирует приложения друг от друга и из базовой инфраструктуры. Хотите узнать больше? Вот ссылка на Docker Мудрость Копать!
Докер и проект
Приложения обычно требуют одного или нескольких процесса (ES) для запуска, такие как веб-процесс, процесс DB, такой как Postgres или MySQL, Nginx, Elasticsearch и т. Д. Все эти процессы, как правило, будут работать в вашей системе на месте во время разработки перед использованием платформ, таких как AWS, платформа Google Cloud (GCP), цифровой океан, Azure и т. Д., Для их размещения.
С докером каждый из этого Процесс/Сервис помещается в изолированные Окружающая среда/контейнер И сделано, чтобы общаться друг с другом так же, как он будет работать непосредственно на вашей местной машине.
Docker отвлекает напрямую напрямую пробел весь этот процесс непосредственно на вашу машину, запустив весь процесс в изолированных и безопасных средах, которые все подключены друг к другу через ту же сеть или несколько сетей.
Что сказал Контейнер может быть только получена из Изображение И вам нужно построить один, используя Dockerfile Или, получив один из Докерный хаб (Репозиторий докеровских изображений что-то похожее на Github)
Так сколько у нас услуги? Для этого приложения мы используем следующие услуги
- Postgres/db.
- Elasticsearch/es.
- Логика
- Кибана
- django_web.
Вы также можете добавить Nginx Сервис к нему. Я должен оставить это тебе, погрузиться и пойти на него, когда вы будете готовы.
Postgres Service/Процесс
Используя Docker-Compose Файл, который позволяет нам подключать услуги вместе без использования фактических команд Docker CLI для этого, мы создаем Docker-Compose.yml
Файл в корне репозитория и добавьте этот фрагмент в файл для службы Postgres.
# docker-compose.yml file version: '3.2' services: db: restart: always image: postgres container_name: bookme_db volumes: - type: volume source: dbdata target: /pg_data ports: - "8001:5432"
Что я только что написал? Файл COMPOSE — это простой файл YML или YAML, который сообщает службу, как запустить и работать
Версия — Рассказывает docker-copose, какую версию вы используете, поскольку номера версий поставляются с прохладными возможностями и обновление до того, как вы можете настроить контейнеры Docker.
Услуги — Различный процесс, на котором работает ваше приложение.
DB — Служба/контейнер, который будет создан для нашей базы данных и будет построен из изображения PostGreS.
Перезапустить : Имеет несколько вариантов Но здесь мы собираемся перезапустить, если он опустится.
изображение — рассказывает Docker Daemon, какое изображение Docker должно начать контейнер от
Container_Name — имя Контейнер должен быть назван для простоты отладки и/или для справки
Объемы — Рассматривается с данными, которые следует поделиться между файлом хоста и контейнером (в простом относительном смысле думать о том, как у него есть как docker, чтобы отправить модифицированные данные из файла хоста в контейнер)
Порты — Здесь мы используем это для Map Port 8001 на локальной машине в порт 5432 на контейнере для этого процесса.
Elasticsearch Service/процесс
# docker-compose.yml ..... es: labels: com.example.service: "es" com.example.description: "For searching and indexing data" image: elasticsearch:5.4 container_name: bookme_es volumes: - type: volume source: esdata target: /usr/share/elasticsearch/data/ ports: - "9200:9200"
этикетки — Используйте для добавления метаданных (информация) к полученному образу
Служба/процесс logstash
# docker-compose.yml ... logstash: labels: com.example.service: "logstash" com.example.description: "For logging data" image: logstash:5.4.3 volumes: - ./:/logstash_dir command: logstash -f /logstash_dir/logstash.conf depends_on: - es ports: - "5959:5959"
Для нашей службы Logstash нам нужно редактировать наши logstash.conf
Файл, чтобы указать на нашу службу ES …
input { tcp { port => 5959 codec => json } } output { elasticsearch { hosts => ["http://es:9200"] } }
Здесь мы меняем наши хозяева
Значение от localhost: 9200
к http://es: 9200
Cibana Service/процесс
# docker-compose.yml .... kibana: labels: com.example.service: "kibana" com.example.description: "Data visualisation and for log aggregation" image: kibana:5.4.3 container_name: bookme_kibana ports: - "5601:5601" environment: - ELASTICSEARCH_URL=http://es:9200 depends_on: - es
окружающая среда — Установите окружающую среду Elasticsearch_url
к http://es: 9200
где es
Название нашей Elasticsearch Service — ссылка
Dependes_on — рассказывает службу Kibana, чтобы начать службу Elasticsearch перед началом.
django_web. Сервис/процесс
# docker-compose.yml .... django_web: container_name: django_web labels: com.example.service: "web" com.example.description: "Use for the main web process" build: context: ./bookme/docker_compose/django/ dockerfile: Dockerfile image: bookme_django_web:1.0 depends_on: - db - es - kibana command: ["./docker_compose/django/wait_for_postgres.sh"] ports: - "8000:8000" environment: - LOGSTASH_HOST=logstash expose: - "5959" logging: driver: "json-file" volumes: - ./bookme:/app
построить — Здесь мы используем сборку как объект, указав контекст (Путь к DockerFile) и Dockerfile (имя докера для использования в качестве имени может варьироваться вообще)
Говоря о DockerFile вот конфигурация DockerFile, размещенная в bookme/bookme/docker_compose/django/dockerfile
Путь репозитория.
FROM python:3.6.2 ENV PYTHONUNBUFFERED 1 # update package lists, fix broken system packages RUN apt-get update RUN apt-get -f install # install and cache dependencies in /tmp directory. # doing it this way also installs any newly added dependencies. RUN pip3 install --upgrade pip ADD requirements.txt /tmp/requirements.txt RUN pip3 install -r /tmp/requirements.txt # load project files and set work directory ADD . /app/ WORKDIR /app # create user and add to docker group RUN adduser --disabled-password --gecos '' djangobookme RUN groupadd docker RUN usermod -aG docker djangobookme # grant newly created user permissions on essential files RUN chown -R djangobookme:$(id -gn djangobookme) ~/ RUN chown -R djangobookme:$(id -gn djangobookme) /app/ # change user to newly created user USER djangobookme
А Dockerfile Используется для создания образа докера и состоит из таких инструкций, как из, Run, добавить и т. Д… Вот a Ссылка в прикладные инструкции и как можно использовать.
Команды — Использование Depends_ON Мы можем контролировать запуск приложения.
Потому что составить не дождаться до контейнера «Готовая» услуга, такая как Postgres, вызовет нашу настройку Docker, чтобы сломаться И поэтому мы вводим командную инструкцию, чтобы сказать Django Service ждать, пока служба Postgres не будет готова, прежде чем мы сможем полностью запускать службу Django_Web.
Вот сценарий и путь к скрипту bookme/bookme/docker_compose/django/wain_for_postgres.sh
из кодовой базы
#!/bin/bash # wait for Postgres to start function postgres_ready() { python << END import sys import psycopg2 try: conn = psycopg2.connect(dbname="postgres", user="postgres", password="postgres", host="db") except psycopg2.OperationalError: sys.exit(-1) sys.exit(0) END } until postgres_ready; do >&2 echo "Postgres is unavailable - sleeping" sleep 1 done # Start app >&2 echo "Postgres is up - executing command" ./docker_compose/django/start.sh
bookme/bookme/docker_compose/django/start.sh
#!/bin/bash # start django python manage.py makemigrations python manage.py migrate python manage.py runserver 0.0.0.0:8000
Не забудьте настроить базу данных для Django в settings.py
файл
... # settings.py Database # https://docs.djangoproject.com/en/1.11/ref/settings/#databases DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql', 'NAME': 'postgres', 'USER': 'postgres', 'HOST': 'db', 'PORT': 5432, } }
Регистрация — используется для Gatcher Logs о процессе докера
Еще кое-что
Поскольку приложению были приложены к приложению, нам нужно указать Elasticsearchearch к нашему приведенному экземпляру Elasticsearch, что сказало, что небольшая модификация будет сделана для нашей Bookemapi/Documents.py
файл
client = Elasticsearch(['es:9200'])
Здесь мы указываем на Docker Es, ссылаться на службу ES, определенную в файле Compose.
Это обертывание
Вот полная конфигурация файлов, используемая для проекта, помещенного в корне, если каталог. Исходный код
version: '3.2' services: db: restart: always image: postgres container_name: bookme_db volumes: - type: volume source: dbdata target: /pg_data ports: - "8001:5432" es: labels: com.example.service: "es" com.example.description: "For searching and indexing data" image: elasticsearch:5.4 container_name: bookme_es volumes: - type: volume source: esdata target: /usr/share/elasticsearch/data/ ports: - "9200:9200" kibana: labels: com.example.service: "kibana" com.example.description: "Data visualisation and for log aggregation" image: kibana:5.4.3 container_name: bookme_kibana ports: - "5601:5601" environment: - ELASTICSEARCH_URL=http://es:9200 depends_on: - es logstash: labels: com.example.service: "logstash" com.example.description: "For logging data" image: logstash:5.4.3 volumes: - ./:/logstash_dir command: logstash -f /logstash_dir/logstash.conf depends_on: - es ports: - "5959:5959" django_web: container_name: django_web labels: com.example.service: "web" com.example.description: "Use for the main web process" build: context: ./bookme/docker_compose/django/ dockerfile: Dockerfile image: bookme_django_web:1.0 depends_on: - db - es - kibana command: ["./docker_compose/django/wait_for_postgres.sh"] ports: - "8000:8000" environment: - LOGSTASH_HOST=logstash expose: - "5959" logging: driver: "json-file" volumes: - ./bookme:/app volumes: dbdata: esdata:
Теперь, когда мы устанавливаем все, что вам нужно сделать, это запускать эти команды с вашего терминала
докер
докер-состав
Когда вы запустите Docker-Compose вверх, происходит следующее:
Сеть называется bookme_default. Контейнер создается с помощью конфигурации Django_Web. Он присоединяется к сети Bookme_Default под именем django_web. Контейнер создается с использованием конфигурации БД. Он присоединяется к сети Bookme_Default под названием DB… До тех пор, пока все контейнеры будут созданы, и услуги будут работать вместе в синхронизации.
Это сказал, вы можете пойти в localhost: 8000.
, localhost: 9200.
и localhost: 5601.
Чтобы увидеть веб, Elasticsearch и Kibana Process/Running …
Заключение
Если вы допустили это до этого момента, поздравляем, вы избили все шансы, чтобы узнать и понять докера. Мы смогли докурировать заявку из предыдущего состояния в новое состояние.
Хотите сделать что-то круто, почему бы вам не добавить Nginx Конфигурация к этой установке, чтобы увидеть, как она будет играть.
Спасибо за чтение и не стесняйтесь любить этот пост.
Оригинал: «https://www.codementor.io/@samueljames/using-docker-with-elasticsearch-logstash-and-kibana-elk-dzucc3c94»