Деплой Yii2 с Capistrano

Очень удобно заливать проект одной командой, не заливая по 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

На этом всё. Хорошего деплоя! ;)