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

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

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

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

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

---

- hosts: all # Хосты для которых выполняется ansible
  gather_facts: yes
  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: Deploy application
  hosts: all
  gather_facts: no
  remote_user: root
  tasks:
    - 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:
          # Переменная server_message зашифрована с помощью Ansible Vault
          # https://docs.ansible.com/ansible/latest/user_guide/vault.html
          SERVER_MESSAGE: "{{ server_message }}"

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

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

roles: []

Пример файла inventory.ini

; определяем один хост в группе webservers
[webservers]
; указываем алиас, IP-адрес хоста, пользователя для подключения
web1 ansible_host=62.181.155.200 ansible_user=root

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

# Переменная будет доступна только для хостов внутри группы webservers
# https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html
server_message: !vault |
  $ANSIBLE_VAULT;1.1;AES256
  61616366656238646232393330626537366635333261373337386361376666643765303531383237
  3338656135653333363061636563356365376164306334300a643662323230383133386136393238
  32613131386130623262346332323765316236313936366638613636393234616237373934653237
  3531616332626533330a646231373739346532393837656165386635356339623636653838323965
  35363538613863333235613339323563376566393465373232326233626633656264

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

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

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

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

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

# Выполняем плейбук с зашифрованной переменной
ansible-playbook -i inventory.ini -v playbook.yml --vault-password-file vault-password

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

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

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

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

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

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

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

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

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

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

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

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

Задавайте вопросы, если хотите обсудить теорию или упражнения. Команда поддержки Хекслета и опытные участники сообщества помогут найти ответы и решить задачу