Aqui, vamos abordar como configurar ambientes de vários estágios para seus aplicativos rails usando Ansible e Capistrano.
Vamos usar este manual para alcançá-lo.
Provisione seus servidores com Ansible
- Crie uma nova instância de servidor usando Ubuntu 14.04 LTS em seu provedor de hospedagem favorito (Linode, Digital Ocean, etc).
Crie um alias SSH para o seu novo IP de servidor em seu
~/.ssh/config
arquivo.Host my-host-alias
Hostname 192.0.2.0
User root
IdentityFile ~/.ssh/id_rsaSubstitua
my-host-alias
pelo alias que você gostaria de usar e192.0.2.0
pelo IP do seu servidor.Adicione suas chaves SSH ao servidor.
$ ssh-copy-id -i ~/.ssh/id_rsa.pub root@my-host-alias
Instale o Ansible em sua máquina local. Se você é um usuário de mac, pode querer usar cerveja para fazer isso.
$ brew install ansible
Clone meu repositório ansible-rails <3
$ git clone git@github.com:rebagliatte/ansible-rails-app.git
$ cd ansible-rails-appCopie os arquivos de variáveis e de inventário para teste e produção nos locais certos e atualize-os com suas próprias configurações.
$ cp -a docs/group_vars/. group_vars
$ cp -a docs/inventories/. .Certifique-se de que o Ansible pode acessar o teste de maneira adequada.
$ ansible -i staging -u root all -m ping
Execute o manual de preparação.
$ ansible-playbook -i staging site.yml -t ruby,user,postgresql,nginx
O modificador especifica o arquivo de inventário que você usará. Os valores possíveis são e para este repo. O modificador especifica as tags que você executará e sua ordem.
-i
staging
production
-t
Seu servidor de teste está pronto !!! Quando estiver pronto, você também pode executar isso em seus servidores de produção.
$ ansible-playbook -i production site.yml -t ruby,user,postgresql,nginx
Implante seu aplicativo com Capistrano
Crie um aplicativo.
$ rails new my-app
Adicione as joias de capistrano do Rails ao Gemfile do seu aplicativo.
gem 'puma'
group :development do
gem 'capistrano', '~> 3.1.0', require: false
gem 'capistrano-bundler', '1.1.1', require: false
gem 'capistrano-rails', '1.1.0', require: false
gem 'capistrano3-puma', require: false
endInstale as gemas e capifique o projeto.
$ bundle install
$ bundle exec cap installAltere seu
Capfile
para exigir todas as joias que você acabou de instalar.# Load DSL and Setup Up Stages
require 'capistrano/setup'
# Includes default deployment tasks
require 'capistrano/deploy'
# Includes rails goodies
require 'capistrano/bundler'
require 'capistrano/rails/assets'
require 'capistrano/rails/migrations'
require 'capistrano/puma'Altere o seu .
config/deploy.rb
# config valid only for Capistrano 3.1
lock '3.2.1'
set :application, 'my-app'
set :repo_url, 'git@github.com:my-github-user/my-app.git'
# Ask for a branch, default one is :master
ask :branch, proc { `git rev-parse --abbrev-ref HEAD`.chomp }.call
# Default deploy_to directory is /var/www/my_app
set :deploy_to, '/home/deploy/apps/my-app'
# Default value for :log_level is :debug
set :log_level, :info
# Default value for :linked_files is []
set :linked_files, %w{config/database.yml}
# Default value for linked_dirs is []
set :linked_dirs, %w{bin log tmp/pids tmp/cache tmp/sockets vendor/bundle public/system}
# Set ssh user
set :user, 'deploy'
set :ssh_options, {
user: fetch(:user)
}
# For capistrano-puma
set :puma_init_active_record, true
# For capistrano-bundler
set :bundle_path, -> { shared_path.join('vendor','bundle') }
set :bundle_flags, '--deployment'Certifique-se de substituir e por suas próprias configurações.
my-github-user
my-app
Alter .
deploy/staging.rb
application_master = '192.0.2.0'
role :app, application_master
role :web, application_master
role :db, application_master
set :rails_env, 'staging'
set :host, 'my-app.com'
set :keep_releases, 2Substitua e pelo IP e host do seu servidor e mude para corresponder ao arquivo que você está alterando.
192.0.2.0
my-app.com
:rails_env
Faça o mesmo para o seu arquivo.
deploy/production.rb
Crie um arquivo baseado em se você ainda não tiver um.
config/environments/staging.rb
config/environments/production.rb
Certifique-se de ter seus ambientes de teste e produção no lugar e as credenciais correspondam às que você especificou em suas variáveis Ansible.
database.yml
development: &default
adapter: postgresql
pool: 5
timeout: 5000
host: localhost
encoding: unicode
database:
test:
<<: *default
database:
min_messages: warning
production:
<<: *default
database:
username:
password:
staging:
<<: *default
database:
username:
password:Copie este arquivo para seus servidores.
$ scp config/database.yml deploy@my-host-alias:/home/deploy/apps/my-app/shared/config/database.yml
Deixe seus servidores acessarem seu repo adicionando chaves de implantação para cada um deles.
ssh deploy@my-host-alias
ssh-keygen -t rsa
cat ~/.ssh/id_rsa.pubCopie suas chaves de implantação recém-geradas (a saída do último comando) e adicione-as como chaves de implantação em seu repositório Github .
Implantar teste
$ cap staging deploy
Tudo pronto!!! Quando estiver pronto, você também pode implantar a produção com
cap production deploy
.