Использование Ansible и Ansistrano для деплоймента Ruby-приложений

Мотивация такова: Capistrano недоопакечен, значит его никто не использует. Кроме того, Capistrano использует собственную структуру каталогов для размещения релизов, и вероятно эта структура каталогов не совпадает с политикой управления версиями в пакетном менеджере операционной системы. Если нет знаний ни по Ansible, ни по Capistrano, то нет разницы, какую из них начинать изучать. В то же время для последующего распространения приложения имеет значение что админов без знания Rake и Ruby больше, чем админов со знанием этих продуктов.

https://en.wikipedia.org/wiki/Ansible_(software)
https://ru.wikipedia.org/wiki/Ansible
https://github.com/ansible/ansible
https://packages.debian.org/bookworm/ansible-core
https://stackoverflow.com/questions/tagged/ansible

2022, James Freeman, Mastering Ansible : automate configuration management and overcome deployment challenges with Ansible (4-th ed), 540 pages
Library Genesis # 3169696
изображение
«This book will provide you with the knowledge and skills required to truly understand
how Ansible functions at a fundamental level, including all the latest features and changes
since the release of version 3.0»
(это вообще как, если последняя версия v2.15.1rc1
https://github.com/ansible/ansible/releases)

«System configuration is defined in part by using its own declarative language … The automation jobs are written in YAML»

Ansible Documentation

«study plan, you can follow these steps:

  • Start by familiarizing yourself with the prerequisites and make sure you have hands-on experience with running commands in a Linux shell.

  • Install Ansible on your control node, which can be your laptop or any machine with Ansible installed.

  • Learn about Ansible Playbooks, which are YAML files that define the desired state of a system and contain plays and tasks.

  • Understand Ansible Modules and how they are used in tasks to perform specific actions on managed nodes.

  • Explore Ansible Variables and how they can be used to manage differences between systems and alter the behavior of playbooks.

  • Dive into Ansible Conditionals and learn how to use them to control the flow of execution in a playbook based on specific conditions.

  • Practice writing and executing simple playbooks, starting with basic tasks and gradually incorporating more advanced concepts like variables and conditionals.

  • Explore additional concepts and features of Ansible, such as Ansible Inventory, Ansible Roles, and Collections, as you progress in your learning journey.
    »

Для начала нужно: установить ansistrano (после ansible). Это набор “ролей”. Роли надо вписать в описание “Inventory”, а затем как-то использовать в тексте Playbook-Play-Task-ов.

К ansistrano нет пакета в

  1. Debian – Package Search Results – ansistrano
  2. Gentoo Основное дерево, Сторонние пакеты

Предлагается использовать для установки команду

$ ansible-galaxy install carlosbuenosvinos.ansistrano-deploy carlosbuenosvinos.ansi

(но это приведёт к нарушению политики “не устанавливать выполняемый код в обход пакетного менеджера операционной системы”)

Ansistrano создаёт на целевом хосте структуру директорий, очень похожую на такую же у Capistrano (наверное в Ansistrano это можно поменять, но надо думать как).

В общем, в связи с неопакеченностью Ansistrano текущий подход такой:

  • добиться устанавливаемости моей программы в пакетном менеджере дистрибутива
  • автоматизировать эти команды при помощи чего-нибудь (будет ли это Ansible или тупо bash-скрипт через ssh пока неизвестно. Кривая обучения - она такая…)

Для того, чтобы что-нибудь установить в Gentoo нужно:

  1. собрать бинарники локально (или на билд-сервере)
  2. закачать бинарники в бинарный кеш на хостинге
    это можно сделать через утилиту rsync (и демона rsync, работающего на хостинге) через ssh.
    В man по rsync написано как:
    «There are two different ways for rsync to contact a remote system: using a remote-shell program as the transport (such as ssh or rsh) or contacting an rsync daemon directly via TCP. The remote-shell transport is used whenever the source or destination path contains a single colon (:) separator after a host specification. Contacting an rsync daemon directly happens when the source or destination path contains a double colon (::) separator after a host specification»
    Несколько примеров типовых команд:
    How to Transfer Files with Rsync over SSH {With Examples}
  3. выполнить команду установки бинарного пакета emerge -GK имяпакета
  4. выполнить команду установки веб-приложения webapp-config -U имяпакета нов.ая.вер.сия [-h адресхоста] [-d директория]
    https://wiki.gentoo.org/wiki/Webapp-config
  5. возможно ещё какие-то команды (вроде обновления БД, но это неточно)