08/04/2017 - CAPISTRANO, VAGRANT
Bu örneğimizde, bir vagrant sunucusundan diğer bir vagrant sunucusuna capistrano ile uygulama yükleyeceğiz. Uygulamayı staging
ve production
sunucularına yükleyeceğiz. Yükleme işlemi ise dev
sunucusunda gerçekleşecek. Daha fazla bilgi için Capistrano sayfasını ziyaret edin.
Herşeyden önce üç sunucunuzun da GitHub kütüphanenize ulaşabilir olmalı, bu nedenle SSH anahtarlarını GitHub'a ekleyin.
Aşağıdakileri sadece yükleme işlemini yapacağınız sunucuda gerçekleştirin.
$ sudo add-apt-repository -y ppa:brightbox/ruby-ng
$ sudo apt-get update -y
$ sudo apt-get install -y ruby2.2
$ sudo gem install capistrano
$ sudo gem install capistrano-ext
$ sudo gem install bundler
Bunlar önemli olan Vagrantfile bilgileri. Varsayılan vagrant login bilgileri vagrant:vagrant
.
private_network IP: 192.168.99.40 # Staging
private_network IP: 192.168.99.50 # Production
synced_folder: /srv/www
Bu yükleme işleminin yapılacağı yerdir. Uygulamanızı GIT ile daha önceden bu sunucuya kopyaladığınızı ve SSH'in kurulu olduğunu varsayıyorum. Test uygulamamızın ismi football
.
Eğer bu işlemi dev
sunucusu üzerinde yapmazsanız, uygulamanızı staging
ve production
sunucularına yüklerken, her zaman bu sunucuların şifresini girmeniz gerekecek. Şifre ise bu örneğimize mahsus olarak vagrant
olacak. Eğer sisteminizde ~/.ssh/id_rsa.pub
dosyası yoksa, ssh-keygen -t rsa
komutu ile bir tane yaratabilirsiniz.
$ cat ~/.ssh/id_rsa.pub | ssh vagrant@192.168.99.40 'cat >> /home/vagrant/.ssh/authorized_keys'
$ cat ~/.ssh/id_rsa.pub | ssh vagrant@192.168.99.50 'cat >> /home/vagrant/.ssh/authorized_keys'
Manuel olarak Gemfile dosyasını yaratın. Daha fazla bilgi için Bundler sayfasını ziyaret edin.
$ cd /projects/football
football$ cat > Gemfile <<EOD
source 'https://rubygems.org'
gem 'capistrano', '~> 3.8'
EOD
Gemfile kütüphanelerini yüklme işlemi, uygulama içinde "Gemfile.lock" dosyasını yaratacaktır.
football$ bundle install
Fetching gem metadata from https://rubygems.org/..........
Fetching version metadata from https://rubygems.org/.
Resolving dependencies...
Installing rake 12.0.0
Using net-ssh 4.1.0
Using i18n 0.8.1
Using bundler 1.14.6
Using net-scp 1.2.1
Using sshkit 1.13.1
Using airbrussh 1.1.2
Using capistrano 3.8.0
Bundle complete! 1 Gemfile dependency, 8 gems now installed.
Use `bundle show [gemname]` to see where a bundled gem is installed.
Aşağıdaki aktifleştirme işlemi çalışmanız için gerekli olan dosya ve klasörleri yaratacaktır. Dosyaların içinde örnek konfigürasyonlar bulunur. Biz bunları daha sonradan değiştireceğiz. Daha fazla bilgi için configuration sayfasını ziyaret edin.
$ cd /projects/football
football$ cap install
mkdir -p config/deploy
[created] config/deploy.rb
[created] config/deploy/staging.rb
[created] config/deploy/production.rb
mkdir -p lib/capistrano/tasks
[created] create Capfile already exists
Capified
Burada dosya konfigürasyonlarını değiştireceğiz. Örnek bir .gitignore
dosyası yaratıp, içine log
ve lib
klasörlerini ekleyin.
# Load plugins.
require "capistrano/setup"
require "capistrano/deploy"
require "capistrano/scm/git"
install_plugin Capistrano::SCM::Git
# Locked capistrano version.
lock "3.8.0"
# The name of the application.
set :application, "football"
# The path on the remote server where the application will be deployed.
# This must be owned and have RW permissions by/for "vagrant" user.
set :deploy_to, "/srv/www/#{fetch(:application)}"
# The application repository.
set :repo_url, "git@github.com:Inanzzz/football.git"
# Asks branch to deploy.
ask :branch, `git rev-parse --abbrev-ref HEAD`.chomp
# Output styling.
set :format, :airbrussh
# Amount of releases to keep.
set :keep_releases, 5
# The settings for remote staging server.
server "192.168.99.40", user: "vagrant", roles: %w{app db web}
# The settings for remote production server.
server "192.168.99.50", user: "vagrant", roles: %w{app db web}
Uygulamayı yükleyeceğimiz staging
ve production
sunucularına sahibiz. İlk yükleme işlemimiz /srv/www
altında football
klasörü yaratacak. Bu klasör içinde aşağıdaki dosya ve klasörler otomatik olarak yaratılacak.
$ ls -l /srv/www/football/
total 8
lrwxr-xr-x 1 vagrant vagrant 41 Apr 7 2017 current -> /srv/www/football/releases/20170407215525
drwxr-xr-x 1 vagrant vagrant 102 Apr 7 2017 releases
drwxr-xr-x 1 vagrant vagrant 408 Apr 7 2017 repo
-rw-r--r-- 1 vagrant vagrant 106 Apr 7 2017 revisions.log
drwxr-xr-x 1 vagrant vagrant 68 Apr 7 2017 shared
20170407215525
. Capistrano uygulamayı bu yeni klasöre 20170407215525
indirir ve gerekli komutları çalıştırır.20170407215525
dosyanın linkidir. Eğer yükleme işlemi başarıyla sonuçlanırsa, link en son yaratılan dosyaya bağlanır.Branch master (at 0da426851299e4bac6f1b51729b623859c70ef9a) deployed as release 20170407215525 by vagrant
Daha fazla bilgi için structure sayfasını ziyaret edin.
Komut sonuna --trace
eklenmesi, yükleme ile ilgili daha fazla bilgi verir bundle exec cap .... deploy --trace
. Yükleme sırasında şifre girmeniz istenecek. Bu şifre yüklemenin yapılacağı sunucunun şifresidir yani vagrant
. Bununla birlikte yüklemek istediğiniz branch sorulacaktır.
$ cd /projects/football
football$ bundle exec cap {staging|production} deploy
00:00 git:wrapper
01 mkdir -p /tmp
vagrant@192.168.99.40's password:
✔ 01 vagrant@192.168.99.40 10.360s
Uploading /tmp/git-ssh-football-staging-vagrant.sh 100.0%
02 chmod 700 /tmp/git-ssh-football-staging-vagrant.sh
✔ 02 vagrant@192.168.99.40 0.005s
Please enter branch (develop): master
00:14 git:check
01 git ls-remote git@github.com:Inanzzz/football.git HEAD
01 11d9954321c5d83c9039d35336cdefdb87753333 HEAD
✔ 01 vagrant@192.168.99.40 1.674s
00:15 deploy:check:directories
01 mkdir -p /srv/www/football/shared /srv/www/football/releases
✔ 01 vagrant@192.168.99.40 0.006s
00:15 git:clone
The repository mirror is at /srv/www/football/repo
00:15 git:update
01 git remote set-url origin git@github.com:Inanzzz/football.git
✔ 01 vagrant@192.168.99.40 0.016s
02 git remote update --prune
02 Fetching origin
02 From github.com:Inanzzz/football
02 33ea35c..99d9954 develop -> develop
✔ 02 vagrant@192.168.99.40 1.516s
00:17 git:create_release
01 mkdir -p /srv/www/football/releases/20170407233938
✔ 01 vagrant@192.168.99.40 0.009s
02 git archive master | /usr/bin/env tar -x -f - -C /srv/www/football/releases/20170407233938
✔ 02 vagrant@192.168.99.40 0.128s
00:17 deploy:set_current_revision
01 echo "9n3426851299e4bac6f1b51729b623859c70ef90" >> REVISION
✔ 01 vagrant@192.168.99.40 0.017s
00:17 deploy:symlink:release
01 ln -s /srv/www/football/releases/20170407233938 /srv/www/football/releases/current
✔ 01 vagrant@192.168.99.40 0.007s
02 mv /srv/www/football/releases/current /srv/www/football
✔ 02 vagrant@192.168.99.40 0.013s
00:17 deploy:log_revision
01 echo "Branch master (at 9n3426851299e4bac6f1b51729b623859c70ef90) deployed as release 20170407233938 by vagrant" >> /srv/www/footb…
✔ 01 vagrant@192.168.99.40 0.012s
Eğer hatalı bir yükleme yaptıysanız, bir önceki yüklemeye rahatlıkla geri dönebilirsiniz. Aşağıdaki çıktı geri yükleme yapmadan önceki mevcut durumu gösteriyor.
vagrant@prod:~$ ls -lt /srv/www/football/
lrwxr-xr-x 1 vagrant vagrant 41 Apr 8 2017 current -> /srv/www/football/releases/20170408032202
drwxr-xr-x 1 vagrant vagrant 238 Apr 8 2017 releases
-rw-r--r-- 1 vagrant vagrant 636 Apr 8 2017 revisions.log
drwxr-xr-x 1 vagrant vagrant 408 Apr 8 2017 repo
drwxr-xr-x 1 vagrant vagrant 68 Apr 7 21:58 shared
vagrant@prod:~$ ls -lt /srv/www/football/releases/
drwxr-xr-x 1 vagrant vagrant 476 Apr 8 2017 20170408032202
drwxr-xr-x 1 vagrant vagrant 68 Apr 8 2017 20170408032150
drwxr-xr-x 1 vagrant vagrant 68 Apr 8 2017 20170408030058
drwxr-xr-x 1 vagrant vagrant 476 Apr 8 2017 20170408024838
drwxr-xr-x 1 vagrant vagrant 68 Apr 8 2017 20170408024828
Geri yükleme yapıyoruz.
$ bundle exec cap production deploy:rollback
Aşağıdaki çıktıdan ne tür bir işlem yapıldığını anlayabilirsiniz.
lrwxr-xr-x 1 vagrant vagrant 41 Apr 8 2017 current -> /srv/www/football/releases/20170408032150
drwxr-xr-x 1 vagrant vagrant 204 Apr 8 2017 releases
-rw-r--r-- 1 vagrant vagrant 682 Apr 8 2017 revisions.log
-rw-r--r-- 1 vagrant vagrant 40091 Apr 8 2017 rolled-back-release-20170408032202.tar.gz
drwxr-xr-x 1 vagrant vagrant 408 Apr 8 2017 repo
drwxr-xr-x 1 vagrant vagrant 68 Apr 7 21:58 shared
vagrant@prod:~$ ls -lt /srv/www/football/releases/
drwxr-xr-x 1 vagrant vagrant 68 Apr 8 2017 20170408032150
drwxr-xr-x 1 vagrant vagrant 68 Apr 8 2017 20170408030058
drwxr-xr-x 1 vagrant vagrant 476 Apr 8 2017 20170408024838
drwxr-xr-x 1 vagrant vagrant 68 Apr 8 2017 20170408024828