Простой пример установки, первоначальной настройки и запуска Capistrano.
Т.к. времени на написание особо не было – то пост без детального описания.
Но, как обычно – в конце есть полезнные ссылки по теме.
Пример выполняется на:
# lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 14.04.3 LTS Release: 14.04 Codename: trusty
Для работы Capistrano требуется Ruby >= 2.0.
Проверяем текущую версию:
# ruby -v ruby 1.9.3p484 (2013-11-22 revision 43786) [x86_64-linux]
$ gem -v 1.8.23
При необходимости – обновляем до версии 2.2.
Содержание
Установка Capistrano
В данном примере будет использоваться Capistrano версии 2 (есть 3).
Находим последнюю версию тут>>>.
Устанавливаем сам Capistrano и capistrano-ext
(пригодится позже):
# gem install capistrano -v 2.15.6 # gem install capistrano-ext
Проверяем:
# cap --version Capistrano v2.15.6
Использование Capistrano
Создаём каталог проекта:
$ mkdir cap_proj && cd cap_proj
Инициализируем проект:
$ capify . [add] writing './Capfile' [add] making directory './config' [add] writing './config/deploy.rb' [done] capified!
Теперь содержимое каталога проекта будет выглядеть так:
$ ls -la total 16 drwxrwxr-x 3 vagrant vagrant 4096 Oct 27 13:41 . drwxr-xr-x 5 vagrant vagrant 4096 Oct 27 13:41 .. -rw-rw-r-- 1 vagrant vagrant 172 Oct 27 13:41 Capfile drwxrwxr-x 2 vagrant vagrant 4096 Oct 27 13:41 config
Нас пока интересует только один файл – config/deploy.rb
:
$ head config/deploy.rb # config valid only for current version of Capistrano lock '3.4.0' set :application, 'my_app_name' set :repo_url, '[email protected]:me/my_repo.git' # Default branch is :master # ask :branch, `git rev-parse --abbrev-ref HEAD`.chomp # Default deploy_to directory is /var/www/my_app_name
Удаляем его содержимое:
$ echo > config/deploy.rb
И заполняем с нуля.
Указываем имя приложения:
set :application, "TestApp"
Его репозиторий:
set :scm, :git set :repository, "[email protected]:username/app.git" set :scm_passphrase, ""
Указываем сервер, на который приложение должно деплоиться:
server "domain.org.ua:2222", :app, :web, :db, :primary => true set :user, "setevoy" set :deploy_to, "/home/setevoy/cap_proj"
В результате – мы должны получить примерно такой файл:
$ cat config/deploy.rb set :application, "TestApp" set :scm, :git set :repository, "[email protected]/app.git" set :scm_passphrase, "" server "domain.org.ua:2222", :app, :web, :db, :primary => true set :user, "setevoy" set :deploy_to, "/home/setevoy/cap_proj"
Обратите внимание на порт после имени хоста:
server “domain.org.ua:2222”
в случае, если используется нестандартный порт SSH.
Выполняем setup
, что бы Capistrano создал необходимые каталоги в “:deploy_to, "/home/setevoy/cap_proj"
“:
$ cap deploy:setup * 2015-10-27 15:20:06 executing `deploy:setup' * executing "sudo -p 'sudo password: ' mkdir -p /home/setevoy/cap_proj /home/setevoy/cap_proj/releases /home/setevoy/cap_proj/shared /home/setevoy/cap_proj/shared/system /home/setevoy/cap_proj/shared/log /home/setevoy/cap_proj/shared/pids" servers: ["domain.org.ua"] [email protected]'s password: [domain.org.ua:2222] executing command Password: ** [out :: domain.org.ua:2222] command finished in 2805ms * executing "sudo -p 'sudo password: ' chmod g+w /home/setevoy/cap_proj /home/setevoy/cap_proj/releases /home/setevoy/cap_proj/shared /home/setevoy/cap_proj/shared/system /home/setevoy/cap_proj/shared/log /home/setevoy/cap_proj/shared/pids" servers: ["domain.org.ua"] [domain.org.ua:2222] executing command ** [out :: domain.org.ua:2222] command finished in 75ms
Проверяем:
$ cap deploy:check * 2015-10-27 15:20:48 executing `deploy:check' * executing "test -d /home/setevoy/cap_proj/releases" servers: ["domain.org.ua"] [email protected]'s password: [domain.org.ua:2222] executing command command finished in 25ms * executing "test -w /home/setevoy/cap_proj" servers: ["domain.org.ua"] [domain.org.ua:2222] executing command command finished in 69ms * executing "test -w /home/setevoy/cap_proj/releases" servers: ["domain.org.ua"] [domain.org.ua:2222] executing command command finished in 50ms * executing "which git" servers: ["domain.org.ua"] [domain.org.ua:2222] executing command command finished in 44ms The following dependencies failed. Please check them and try again: --> You do not have permissions to write to `/home/setevoy/cap_proj'. (domain.org.ua:2222) --> You do not have permissions to write to `/home/setevoy/cap_proj/releases'. (domain.org.ua:2222)
Проблема с правами вызвана тем, что Capistrano создаёт каталоги под sudo
.
Этого можно избежать, добавив переменную вида:
set :use_sudo, false
Или поменя владельца каталога на удалённом сервере вручную.
После добавления set :use_sudo, false
– повторяем:
$ cap deploy:setup * 2015-10-27 15:24:51 executing `deploy:setup' * executing "mkdir -p /home/setevoy/cap_proj /home/setevoy/cap_proj/releases /home/setevoy/cap_proj/shared /home/setevoy/cap_proj/shared/system /home/setevoy/cap_proj/shared/log /home/setevoy/cap_proj/shared/pids" servers: ["domain.org.ua"] [email protected]'s password: [domain.org.ua:2222] executing command command finished in 34ms * executing "chmod g+w /home/setevoy/cap_proj /home/setevoy/cap_proj/releases /home/setevoy/cap_proj/shared /home/setevoy/cap_proj/shared/system /home/setevoy/cap_proj/shared/log /home/setevoy/cap_proj/shared/pids" servers: ["domain.org.ua"] [domain.org.ua:2222] executing command command finished in 22ms
Проверяем:
$ cap deploy:check * 2015-10-27 15:25:35 executing `deploy:check' * executing "test -d /home/setevoy/cap_proj/releases" servers: ["domain.org.ua"] [email protected]'s password: [domain.org.ua:2222] executing command command finished in 20ms * executing "test -w /home/setevoy/cap_proj" servers: ["domain.org.ua"] [domain.org.ua:2222] executing command command finished in 17ms * executing "test -w /home/setevoy/cap_proj/releases" servers: ["domain.org.ua"] [domain.org.ua:2222] executing command command finished in 15ms * executing "which git" servers: ["domain.org.ua"] [domain.org.ua:2222] executing command command finished in 15ms You appear to have all necessary dependencies installed
Ппроверяем удалённый сервер:
$ ls -l /home/setevoy/cap_proj/ total 8 drwxrwxr-x 2 setevoy setevoy 4096 Oct 27 17:38 releases drwxrwxr-x 5 setevoy setevoy 4096 Oct 27 17:38 shared
Осталось задеплоить код из репозитория.
Выполняем:
$ cap deploy:update * 2015-10-27 15:59:00 executing `deploy:update' ** transaction: start * 2015-10-27 15:59:00 executing `deploy:update_code' executing locally: "git ls-remote [email protected]/rdsmanager.git HEAD" command finished in 11650ms * executing "git clone -q [email protected]:username/rdsmanager.git /home/setevoy/cap_proj/releases/20151027155911 && cd /home/setevoy/cap_proj/releases/20151027155911 && git checkout -q -b deploy 19111d25cd2182b2323c4616d8057964c33b471b && (echo 19111d25cd2182b2323c4616d8057964c33b471b > /home/setevoy/cap_proj/releases/20151027155911/REVISION)" servers: ["domain.org.ua"] [email protected]'s password: [domain.org.ua:2222] executing command ** [domain.org.ua :: out] The authenticity of host 'bitbucket.org (131.103.20.168)' can't be established. ** RSA key fingerprint is 97:8c:1b:f2:6f:14:6b:5c:3b:ec:aa:46:46:74:7c:40. ** Are you sure you want to continue connecting (yes/no)? ** [domain.org.ua :: out] yes ** Warning: Permanently added 'bitbucket.org,131.103.20.168' (RSA) to the list of known hosts. command finished in 4806ms * 2015-10-27 15:59:24 executing `deploy:finalize_update' * executing "chmod -R -- g+w /home/setevoy/cap_proj/releases/20151027155911 && rm -rf -- /home/setevoy/cap_proj/releases/20151027155911/public/system && mkdir -p -- /home/setevoy/cap_proj/releases/20151027155911/public/ && ln -s -- /home/setevoy/cap_proj/shared/system /home/setevoy/cap_proj/releases/20151027155911/public/system && rm -rf -- /home/setevoy/cap_proj/releases/20151027155911/log && ln -s -- /home/setevoy/cap_proj/shared/log /home/setevoy/cap_proj/releases/20151027155911/log && rm -rf -- /home/setevoy/cap_proj/releases/20151027155911/tmp/pids && mkdir -p -- /home/setevoy/cap_proj/releases/20151027155911/tmp/ && ln -s -- /home/setevoy/cap_proj/shared/pids /home/setevoy/cap_proj/releases/20151027155911/tmp/pids" servers: ["domain.org.ua"] [domain.org.ua:2222] executing command command finished in 68ms * executing "find /home/setevoy/cap_proj/releases/20151027155911/public/images /home/setevoy/cap_proj/releases/20151027155911/public/stylesheets /home/setevoy/cap_proj/releases/20151027155911/public/javascripts -exec touch -t 201510271559.24 -- {} ';'; true" servers: ["domain.org.ua"] [domain.org.ua:2222] executing command ** [out :: domain.org.ua:2222] find: `/home/setevoy/cap_proj/releases/20151027155911/public/images': No such file or directory ** [out :: domain.org.ua:2222] find: `/home/setevoy/cap_proj/releases/20151027155911/public/stylesheets': No such file or directory ** [out :: domain.org.ua:2222] find: `/home/setevoy/cap_proj/releases/20151027155911/public/javascripts': No such file or directory command finished in 49ms * 2015-10-27 15:59:24 executing `deploy:create_symlink' * executing "rm -f /home/setevoy/cap_proj/current && ln -s /home/setevoy/cap_proj/releases/20151027155911 /home/setevoy/cap_proj/current" servers: ["domain.org.ua"] [domain.org.ua:2222] executing command command finished in 23ms ** transaction: commit
Проверяем:
$ ls -l cap_proj/ total 8 lrwxrwxrwx 1 setevoy setevoy 46 Oct 27 18:12 current -> /home/setevoy/cap_proj/releases/20151027155911 drwxrwxr-x 3 setevoy setevoy 4096 Oct 27 18:12 releases drwxrwxr-x 5 setevoy setevoy 4096 Oct 27 18:10 shared
$ ls -l cap_proj/current/ total 40 drwxrwxr-x 3 setevoy setevoy 4096 Oct 27 18:12 conf drwxrwxr-x 6 setevoy setevoy 4096 Oct 27 18:12 lib lrwxrwxrwx 1 setevoy setevoy 33 Oct 27 18:12 log -> /home/setevoy/cap_proj/shared/log drwxr-xr-x 2 setevoy setevoy 4096 Oct 27 18:12 public -rw-rw-r-- 1 setevoy setevoy 19771 Oct 27 18:12 RDSmanager.py -rw-rw-r-- 1 setevoy setevoy 41 Oct 27 18:12 REVISION drwxr-xr-x 2 setevoy setevoy 4096 Oct 27 18:12 tmp
Готово.
Ссылки по теме
http://guides.beanstalkapp.com