Ansible

Ansible — програмне забезпечення, що надає засоби для управління конфігурацією централізованої установки застосунків і паралельного виконання типових завдань на групі систем. Сирцевий код Ansible написаний мовою Python і розповсюджується під ліцензією GPLv3.

Ansible виконує сценарій певної роботи на віддаленому сервері, працює через SSH. На віддалений системі потрібно поставити Python, на момент написання цих рядків з версією 3.x не працював, прийшлось інсталювати 2.7

Взагалі потрібно інсталювати наступне на віддаленому сервері

Модулі

Джерела

[1], [2], [3]

Інсталюємо пакет Ansible на сервер, з якого буде виконуватися централізоване керування

Файл хостів /etc/ansible/hosts

задається у форматі

Приклад

Файли конфігурацій в YAML форматі

/etc/ansible/group_vars/server – для групи хостів
/etc/ansible/group_vars/all – для кожного серверу(будь яка група)
/etc/ansible/host_vars – каталог з індивідуальними налаштуваннями для конкретного хосту
Наприклад для host1 створимо файл /etc/ansible/host_vars/host1 та вкажимо ssh login при підключені

 

Прості команди 

Перевірка можливості взаємодії з уміса хостами (виконується спроба підключитися по ssh)

аналогічно для конкретного хосту або групи

Для декілька хостів – розділяємо двокрапкою

Модуль shell виконує команду на віддаленому хості та повертає результат, наприклад

Приклад: копіювання файлу

Плейбук (playbooks) Ansible – це сценарії, за допомогою яких на віддалені сервери відправляються набори команд. Замість того щоб запускати кожну команду Ansible окремо, ви можете створити цілий комплекс команд і помістити його в плейбук.

Ключ apt – це посилання на модуль Ansible; вона працює приблизно як запуск команди ansible або такої команди:

Цей модуль дозволяє вказати пакет і стан, в якому потрібно його підтримувати (наприклад, installed).

Рядок update-cache = true оновлює кеш пакетів віддаленої машини (apt-get update) перед установкою нового пакета.

Елемент notify містить список, що складається з одного елемента – start nginx. Це не внутрішня команда Ansible, а посилання на оброблювач, який при виклику всередині завдання може виконувати певні функції. 

Розділ handlers знаходиться на тому ж рівні, що hosts і tasks. Обробники теж є свого роду завданнями, але вони можуть запускатися тільки всередині завдання на клієнтській машині.

Наприклад, в даному файлі є обробник, який запускає сервіс Nginx після установки пакета. Оброблювач не викликається, якщо завдання «Installs nginx web server» не вносить змін в систему (тобто якщо в системі вже встановлено такий веб-сервер).

Запуск плейбук Ansible

якщо вам потрібно відфільтрувати список хостів і запустити плейбук тільки на одному хості зі списку, додайте прапор, щоб вказати підмножину хостів у файлі:

 

міграція з ActionCable на Anycable у Rails

Інсталюємо GO

Інсталюємо Anycable-go

За звичай go інсталюється або в ~./go або в /usr/local/go. 

інсталюємо Redis сервер

Додаємо(вносимо зміни) в наступні файли

Gemfile

config/anycable.yml

config/application.rb

config/environments/development.rb та config/environments/production.rb

Запускаємо в папці з проектом

та

Для автоматизації запуску anycable та anycable-go використаємо systemd

Створюємо два файли

/etc/systemd/system/anycable.service

/etc/systemd/system/anycable-go.service

Також потрібно модифікува bin/anycable вказавши повний шлях замість відносного

Дозволяємо запуск сервісів

Старт

 

Фільтр по таксонах у Spree

app/helpers/spree/frontend_helper.rb

app/views/spree/shared/_search.html.erb

lib/spree/core/search/base.rb

vendor/assets/javascripts/spree/frontend/all.js

 

Deliver_later

На одному проекті інтернет-магазину виникали помилка після завершення оформлення замовлення. В момент надсилання email повідомлення адміністратору магазину про нове замовлення, відбулась проблема з'єднання із SMTP-сервером, в наслідок чого користувач бачив у браузері помилку

Теоретично такого не мало б відбутися, оскільки за змовчанням у ActiveJob використовується ansync адаптер і виклик методу deliver_later мав би виконатися у фоновому режимі

Але ActiveJob виконувався синхроно, було б добре розібратися чому саме так.

Для вирішення даної проблеми, використаємо gem sidekiq який дозволяє rails породжувати нові процеси, які будуть працювати у фоновому режимі.  В основі гема задіяна модель акторів. Його інсталяція досить проста – додати гем в Gemfile:

Вказуємо сервер черги у config/application.rb:

Інсталюємо Redis сервер

Оскільки отримання email'а є важливим, задаю 100 спроб у разі невдачі

В development середовищі запускається досить просто:

Перевірка показала асинхронну роботу

Для деплоя добавляємо у Gemfile gem:

Добавляємо в Capfile

Як бачимо у нас буде інтегація з monit, який буде запускати sidekiq у разі його падіння, тому на продакшені інсталюємо його

В /etc/monit/monitrc дозволяємо http для localhost'у

Та перезапускаємо 

Action Mailer використовує чергу mailers, задаємо її для sidekiq у config/deploy.rb

Далі деплоємо проект

Deploy Ruby on Rails – Nginx/Passenger/Postgres/Capistrano (ОНОВЛЕНО)

Приклад деплою App на Ruby On Rails

В даній замітці розглядається приклад деплою проетку під назвою tools на  VPS-сервер Ubuntu 18.04 в каталог /home/deployer/apps/project/, код проекту знаходиться на git-сервері bitbucket.org у приватному репозиторію. Використовуємо Ruby 2.4.0 та Ruby On Rails 5

Continue reading

Owl Сarousel кастомізація стрілок

Приклад

 

Добавляємо class до картинки, яку вставляємо в CKEditor’і

ckeditor/config.js