Ambientes de vários estágios para seus aplicativos Rails com Ansible

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

  1. Crie uma nova instância de servidor usando Ubuntu 14.04 LTS em seu provedor de hospedagem favorito (Linode, Digital Ocean, etc).
  2. Crie um alias SSH para o seu novo IP de servidor em seu ~/.ssh/configarquivo.

    Host my-host-alias
    Hostname 192.0.2.0
    User root
    IdentityFile ~/.ssh/id_rsa

    Substitua my-host-aliaspelo alias que você gostaria de usar e 192.0.2.0pelo IP do seu servidor.

  3. Adicione suas chaves SSH ao servidor.

    $ ssh-copy-id -i ~/.ssh/id_rsa.pub root@my-host-alias
  4. 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
  5. Clone meu repositório ansible-rails <3

    $ git clone git@github.com:rebagliatte/ansible-rails-app.git
    $ cd ansible
    -rails-app
  6. Copie 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/. .
  7. Certifique-se de que o Ansible pode acessar o teste de maneira adequada.

    $ ansible -i staging -u root all -m ping
  8. 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.-istagingproduction
    -t

  9. 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

  1. Crie um aplicativo.

    $ rails new my-app
  2. 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
    end
  3. Instale as gemas e capifique o projeto.

    $ bundle install
    $ bundle exec cap install
  4. Altere seu Capfilepara 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'
  5. 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-usermy-app

  6. 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, 2

    Substitua e pelo IP e host do seu servidor e mude para corresponder ao arquivo que você está alterando.192.0.2.0my-app.com:rails_env

    Faça o mesmo para o seu arquivo.deploy/production.rb

  7. Crie um arquivo baseado em se você ainda não tiver um.config/environments/staging.rbconfig/environments/production.rb

  8. 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
    :
  9. Copie este arquivo para seus servidores.

    $ scp config/database.yml deploy@my-host-alias:/home/deploy/apps/my-app/shared/config/database.yml
  10. 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.pub

    Copie 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 .

  11. Implantar teste

    $ cap staging deploy
  12. Tudo pronto!!! Quando estiver pronto, você também pode implantar a produção com cap production deploy.