Очень удобно заливать проект одной командой, не заливая по FTP кучу файлов. К тому же, можно автоматически ставить новые пакеты через Composer и выполнять последние миграции.
Данная методика позаимствована с Ruby On Rails. Сам Capistrano написан на Ruby, но это не мешает использовать его для других языков.
Устанавливаем сам Capistrano:
gem install capistrano
Инициализация Capistrano:
cap install
После данной команды в папке проекта создадутся папки и файлы: config и Capfile.
Все нужные Вам настройки находятся в папке config.
config/deploy.rb содержит основные настройки деплоя
Пример deploy.rb
lock '3.8.1'
# Название приложения
set :application, 'app_name'
set :repo_url, 'git@your-host.com/repo.git'
# Директория, где на сервере будет располагаться Ваше приложение
set :deploy_to, '/var/www/app_name.com'
# Система управления версиями - git
set :scm, :git
# Файлы, которых не должно быть в репозитории. Например, конфиг.
# Я сделал main-local.php, где хранятся настройки подключения к базе данных.
# Необходимые файлы и папки надо создать в папке с проектом на сервере в папке shared
append :linked_files, 'common/config/main-local.php'
# Папки, которых не должно быть в репозитории. Здесь всякие временные файлы и загрузки
append :linked_dirs, 'api/runtime', 'backend/runtime', 'frontend/runtime', 'frontend/web/uploads', 'vendor', 'console/runtime'
# Задания после окончания деплоя. Устанавливаем новые пакеты и применяем миграции
namespace :deploy do
desc 'composer install'
task :composer_install do
on roles(:web) do
within release_path do
execute "cd #{release_path} && composer install"
end
end
end
desc 'apply migrations'
task :migrate do
on roles(:web) do
within release_path do
execute "cd #{release_path} && php yii migrate --interactive=0"
end
end
end
after :updated, 'deploy:composer_install'
after :updated, 'deploy:migrate'
end
Далее нам нужно настроить сервера, на которые будет производиться деплой. По умолчанию представляется два файла в config/deploy: production.rb и staging.rb
В каждом файле можно настроить IP сервера, пользователя, под которым заходить на сервер, номер порта, роли сервера, и т.д.
Важно! При запуске миграций может вылезти такая ошибка:
Could not open input file: yii
Это может быть из-за того, что в стандартном репозитории Yii нет файла под названием yii. Этот файл появляется только после локальной инициализации фреймворка. Поскольку на каждый релиз мы заново тянем все файлы из репозитория, соответственно этого файла и не будет. Поэтому добавляем скрипт инициализации после установки пакетов через Composer, добавив в composer.json строки
"scripts": {
"post-install-cmd": "php init --env=Production --overwrite=n"
}
Деплой:
cap production deploy
для production и cap staging deploy
для staging
На этом всё. Хорошего деплоя! ;)