Зарегистрируйтесь для доступа к 15+ бесплатным курсам по программированию с тренажером

Monitoring DevOps: Деплой и эксплуатация

Видео может быть заблокировано из-за расширений браузера. В статье вы найдете решение этой проблемы.

Ниже приведён пример файлов конфигурации Ansible для деплоя приложения на два сервера с добавлением роли мониторинга с помощью Datadog.

Пример файла playbook.yml

---

- hosts: all # Хосты для которых выполняется ansible
  remote_user: root
  tasks:
    - name: Install packages for
      ansible.builtin.apt:
        name: python3-pip
        update_cache: yes

    - name: Install Docker Module for Python
      ansible.builtin.pip:
        name: docker

    - name: Run container
      # Используем модуль community.docker.docker_container
      community.docker.docker_container:
        name: hexlet-app # Имя контейнера
        image: hexlet/hexlet-app # Имя используемого образа
        # Публикуемые порты. Слева порт внутри контейнера,
        # справа порт по которому он будет доступен снаружи
        published_ports: 80:8080
        restart_policy: always
        restart: yes
        container_default_behavior: no_defaults
        pull: yes
        # Задаём переменные окружения
        env:
          # Тут должна быть переменная из сбора фактов
          # которая выводит IP-адрес текущего сервера
          SERVER_MESSAGE: '...'

# Можем использовать отдельный блок (play) для подготовки мониторинга
# Другой вариант - использовать include_role для задавания порядка
# (сперва выполняются роли, потом таски)
- hosts: all
  gather_facts: yes
  remote_user: root
  roles:
    - name: datadog.datadog

Пример файла requirements.yml

# Определяем коллекцию
# https://galaxy.ansible.com/community/docker
collections:
- name: community.docker

# Добавляем роль для работы мониторинга
roles:
  - name: datadog.datadog

Пример файла hosts

; определяем один хост с именем webserver
[webservers]
; указываем список хостов
web1 ansible_host=204.189.100.169 ansible_user=root
web2 ansible_host=234.189.100.185 ansible_user=root

Пример файла group_vars/webservers/vars.yml

# Когда переменная зашифрована в файле,
# то удобно ссылаться на неё и использовать обычную переменную
# (например, чтобы найти все места, гда она используется)
variable: "{{ vault_variable }}"
# Переменная datadog_api_key зашифрована с помощью Ansible Vault
# https://docs.ansible.com/ansible/latest/user_guide/vault.html

# регистрироваться и получать api_key нужно на datadoghq.com.
# Datadog использует 5000 порт, на котором работает,
# поэтому используем другой порт
app_port: "3000"
# datadoghq.eu - содержит свои, другие апикеи
datadog_site: "datadoghq.com"
datadog_checks:
  http_check:
    init_config:
    instances:
      - name: Application health check status
        url: "http://localhost:{{ app_port }}"
        timeout: 5
        method: GET

Пример файла group_vars/webservers/vault.yml

# Содержимое этого файла зашифровано с помощью vault.
# Для простоты выводится как есть
vault_variable: "значение переменной"

# Зашифрованная переменная
datadog_api_key: !vault |
  $ANSIBLE_VAULT;1.1;AES256
  36306462306166623932306230663334336562623061383533363634383431373063666239616564
  3866383737376430396565393961333134353938343535390a616635353638633232306334346134
  64663263663334653565303762323137646665643931663330373731303435393238626430316361
  6434396639333238350a333965633639346631633532313961303563373263653162333738333332
  66316137383034393133393134326363626230633166663864323038383436613734376561373164
  6339316335613235636637396563306465623138323331393137

Пример файла ansible.cfg

[defaults]
inventory = hosts # определяем инвентори файл по умолчанию

Примеры команд

# Таким образом можно зашифровать значение hexlet в переменную the_secret
# с помощью пароля в файле vault-password
ansible-vault encrypt_string --vault-password-file vault-password 'hexlet' --name 'the_secret'

# Чтобы расшифровать зашифрованные с помощью Ansible Vault переменные
# если пароль хранится в файле, используется флаг --vault-password-file
ansible-playbook -v --vault-password-file vault-password playbook.yml

# Устанавливаем коллекции определённые в файле requirements.yml
ansible-galaxy collection install -r requirements.yml

# Деплоим приложение
ansible-playbook -v playbook.yml

# Подключаемся по ssh к хосту с IP 192.168.0.2
ssh username@192.168.0.2

Аватары экспертов Хекслета

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff

Используйте Хекслет по-максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

Зарегистрируйтесь или войдите в свой аккаунт

Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»