HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-02-26
1 <p><strong>Ниже приведён пример файлов конфигурации<a>Ansible</a>для деплоя приложения на два сервера с добавлением роли мониторинга с помощью<a>Datadog</a>.</strong></p>
1 <p><strong>Ниже приведён пример файлов конфигурации<a>Ansible</a>для деплоя приложения на два сервера с добавлением роли мониторинга с помощью<a>Datadog</a>.</strong></p>
2 <h2>Пример файла playbook.yml</h2>
2 <h2>Пример файла playbook.yml</h2>
3 --- - 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<h2>Пример файла requirements.yml</h2>
3 --- - 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<h2>Пример файла requirements.yml</h2>
4 # Определяем коллекцию # https://galaxy.ansible.com/community/docker collections: - name: community.docker # Добавляем роль для работы мониторинга roles: - name: datadog.datadog<h2>Пример файла hosts</h2>
4 # Определяем коллекцию # https://galaxy.ansible.com/community/docker collections: - name: community.docker # Добавляем роль для работы мониторинга roles: - name: datadog.datadog<h2>Пример файла hosts</h2>
5 ; определяем один хост с именем webserver [webservers] ; указываем список хостов web1 ansible_host=204.189.100.169 ansible_user=root web2 ansible_host=234.189.100.185 ansible_user=root<h2>Пример файла group_vars/webservers/vars.yml</h2>
5 ; определяем один хост с именем webserver [webservers] ; указываем список хостов web1 ansible_host=204.189.100.169 ansible_user=root web2 ansible_host=234.189.100.185 ansible_user=root<h2>Пример файла group_vars/webservers/vars.yml</h2>
6 # Когда переменная зашифрована в файле, # то удобно ссылаться на неё и использовать обычную переменную # (например, чтобы найти все места, гда она используется) 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<h2>Пример файла group_vars/webservers/vault.yml</h2>
6 # Когда переменная зашифрована в файле, # то удобно ссылаться на неё и использовать обычную переменную # (например, чтобы найти все места, гда она используется) 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<h2>Пример файла group_vars/webservers/vault.yml</h2>
7 # Содержимое этого файла зашифровано с помощью vault. # Для простоты выводится как есть vault_variable: "значение переменной" # Зашифрованная переменная datadog_api_key: !vault | $ANSIBLE_VAULT;1.1;AES256 36306462306166623932306230663334336562623061383533363634383431373063666239616564 3866383737376430396565393961333134353938343535390a616635353638633232306334346134 64663263663334653565303762323137646665643931663330373731303435393238626430316361 6434396639333238350a333965633639346631633532313961303563373263653162333738333332 66316137383034393133393134326363626230633166663864323038383436613734376561373164 6339316335613235636637396563306465623138323331393137<h2>Пример файла ansible.cfg</h2>
7 # Содержимое этого файла зашифровано с помощью vault. # Для простоты выводится как есть vault_variable: "значение переменной" # Зашифрованная переменная datadog_api_key: !vault | $ANSIBLE_VAULT;1.1;AES256 36306462306166623932306230663334336562623061383533363634383431373063666239616564 3866383737376430396565393961333134353938343535390a616635353638633232306334346134 64663263663334653565303762323137646665643931663330373731303435393238626430316361 6434396639333238350a333965633639346631633532313961303563373263653162333738333332 66316137383034393133393134326363626230633166663864323038383436613734376561373164 6339316335613235636637396563306465623138323331393137<h2>Пример файла ansible.cfg</h2>
8 [defaults] inventory = hosts # определяем инвентори файл по умолчанию<h2>Примеры команд</h2>
8 [defaults] inventory = hosts # определяем инвентори файл по умолчанию<h2>Примеры команд</h2>
9 # Таким образом можно зашифровать значение 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
9 # Таким образом можно зашифровать значение 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