Полезные задачи для Capistrano (работаем с конфигами nginx сервера)

[ Нет описания ]

В предыдущем посте я рассказал про то, как запускать, останавливать и перезапускать nginx используя Capistrano. Попробуем сделать с nginx-сервером что-нибудь посложнее.

Не знаю как вам, но мне больше всего нравиться редактировать какие-либо файлы (в особенности конфигурационные) на локальной машине, а не в маленьком окне терминала с открытым в нём vi :) Вот для этих целей я и написал пару задач которые позволяют решить эту небольшую проблему.

Как я сказал выше задач - две. Первая скачивает конфигурационный файл с сервера во временную директорию где я его смогу изменить. А вторая закачивает его на сервер (при этом проверяя нет ли в нём ошибок и делая резервную копию предыдущего конфигурационного файла)

namespace :nginx do
  set :nginx_pid, "/usr/local/etc/nginx/logs/nginx.pid"
  set :nginx_cfg, "/usr/local/etc/nginx/nginx.conf"
  set :keep_backups, 10

  set :backup_dir, File.join(File.dirname("#{nginx_cfg}"), "backup")

  desc "Get nginx.conf from server"
  task :get_config do
    # Загружаем конфигурационный файл в tmp директорию вашего проекта
    download "#{nginx_cfg}", "tmp/nginx.conf"
  end

  desc "Upload nginx.conf to server"
  task :set_config do
    # Загружаем конфигурационный файл на сервер
    upload "tmp/nginx.conf", "/tmp/nginx.conf"
    # Прежде чем подменить конфигурационный файл проверяем что файл не содержит ошибок
    # Если на этом этапе будут найдены ошибки, то обработка задачи прекратиться в этом месте
    sudo "nginx -t -c /tmp/nginx.conf 2>&1"

    # Создаём директорию для хранения бекапов
    run "([ ! -d #{backup_dir} ] && sudo mkdir #{backup_dir}) || true"

    # Делаем бекап и очищаем директорию с бекапами от старых файлов
    backup_file_name = Time.now.strftime("nginx_%Y-%m-%d-%H-%M-%S.conf")
    sudo "cp #{nginx_cfg} #{backup_dir}/#{backup_file_name}"
    cleanup_nginx_backups

    # Подменяем конфигурационный файл
    sudo "cp /tmp/nginx.conf #{nginx_cfg}"

    # Заставляем nginx перечитать конфигурационный файл
    sudo "kill -s HUP #{get_nginx_pid}"
  end

  def cleanup_nginx_backups
    # Формируем массив из файлов которых находятся в директории backup
    backup_files = capture("ls -x #{backup_dir}").split.sort

    # Формируем список файлов на удаление
    files_for_remove = (backup_files - backup_files.last(keep_backups)).map { |file|
        File.join(backup_dir, file) }.join(" ")

    # Удаляем устаревшие файлы
    sudo "rm -rf #{files_for_remove}"
  end

  def get_nginx_pid
    capture "if [ -f #{nginx_pid} ] ; then cat #{nginx_pid}; fi"
  end
end

Как видите некоторые параметры и методы взяты из предыдущей стати (т.е. параметры :nginx_pid, :nginx_cfg и метод get_nginx_pid). Но так же я добавил и пару новых: параметр :keep_backups указывает сколько последних конфигурационных файлов должно оставаться в директории backup, а метод cleanup_nginx_backups занимается непосредственно очисткой этой директории.

Как видите ничего особо сложного в этих задачах нет, и при необходимости они могут быть легко настроены на работу с используемыми вами конфигурационными файлами.

Тэги: capistrano nginx
Будь всегда в курсе последних новостей блога подписавшись на новости
в формате RSS. Присоединяйся!
* * *

Добавить новый комментарий

Доступные BB теги

*

* (не будет опубликован)

(если есть)

  • Multi CAPTCHA Refresh2
  • *

1. Проверьте комментарий перед отправкой
2. Все комментарии проходят модерацию перед публикацией в блоге