Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Boxen: Configurando o seu ambiente de desenvolvimento

Boxen: Configurando o seu ambiente de desenvolvimento

Apresentado no 30º Encontro do Guru-SP

Já teve problemas em configurar a sua máquina de desenvolvimento para um novo projeto? Eu também. O Boxen automatiza toda a chatice de deixar o OS X pronto para o seu trabalho - instalar Rubies, clonar repositórios e mais. Veremos o que o Boxen pode fazer por você, vantagens de adotar ele na sua equipe e detalhes do projeto que garantem a consistência e previsibilidade do seu ambiente de dev.

5a90a67fa1a92e6a4b605cfd8da5e375?s=128

Lucas Mazza

June 22, 2013
Tweet

Transcript

  1. Boxen Configurando o seu ambiente de desenvolvimento

  2. lucasmazza

  3. None
  4. http://casadocodigo.com.br/products/livro-html-css

  5. Boxen

  6. None
  7. 1 Você acabou de comprar um notebook novo

  8. 1 E precisa configurar a sua máquina para trabalhar

  9. 2 Você acabou de ser contratado

  10. 2 E ganhou um notebook novo da empresa

  11. 3 Você acabou de entrar em projeto novo

  12. 3 E precisa colocar a nova aplicação para rodar

  13. 4 O seu notebook quebrou =(

  14. 4 E você formatou ou teve que comprar um novo

  15. Configurar um ambiente local é chato

  16. XCode Ruby Node.JS Pow MongoDB MySQL PostgreSQL PhantomJS Qt Redis

    ElasticSearch ImageMagick Memcached Dotfiles AWS Vim/ST 2/TM
  17. None
  18. Segfaults

  19. Segfaults Versões diferentes

  20. Segfaults Versões diferentes Configurações faltando

  21. Segfaults Versões diferentes Configurações faltando Dias sem trabalhar direito

  22. Mas eu só quero trabalhar...

  23. Configurar um ambiente local deveria ser fácil

  24. None
  25. Simples

  26. Simples Automatizado

  27. Simples Automatizado Previsível

  28. Simples Automatizado Previsível Padronizado

  29. Boxen

  30. “Boxen is a framework for managing almost every aspect of

    your Mac.” https://github.com/blog/1345-introducing-boxen
  31. @wfarr & @jbarnette

  32. Puppet + Git(Hub)

  33. boxen CLI em Ruby (1.8.7) our-boxen A sua configuração, usando

    Puppet boxen-web Rails app para o setup inicial
  34. Passo a Passo

  35. 1 Instale o XCode =(

  36. 2 Visite o seu boxen-web http://boxen.sua-empresa.com

  37. 3 Execute o script de configuração no seu Terminal

  38. 4 Vá tomar um café

  39. 5

  40. Altamente personalizável

  41. Developer friendly

  42. “We believe that development is production, so we value consistency,

    predictability, and reproducibility over artisanal, hand-tweaked development environments.”
  43. Puppet

  44. Puppet (snippets fortes a seguir)

  45. Configuração padrão

  46. node default { include dnsmasq include git include hub include

    nodejs include ruby::2_0_0 class { 'ruby::global': version => '2.0.0' } package { [ 'ack', 'findutils', 'gnu-tar' ]: } } seu-boxen/manifests/site.pp
  47. node default { include dnsmasq include git include hub include

    nodejs include ruby::2_0_0 class { 'ruby::global': version => '2.0.0' } package { [ 'ack', 'findutils', 'gnu-tar' ]: } } Dependências globais seu-boxen/manifests/site.pp
  48. node default { include dnsmasq include git include hub include

    nodejs include ruby::2_0_0 class { 'ruby::global': version => '2.0.0' } package { [ 'ack', 'findutils', 'gnu-tar' ]: } } Ruby via rbenv Dependências globais seu-boxen/manifests/site.pp
  49. node default { include dnsmasq include git include hub include

    nodejs include ruby::2_0_0 class { 'ruby::global': version => '2.0.0' } package { [ 'ack', 'findutils', 'gnu-tar' ]: } } Ruby via rbenv Dependências globais Pacotes do Homebrew seu-boxen/manifests/site.pp
  50. Configuração personalizada

  51. class people::lucasmazza { include alfred include chrome include firefox include

    bash include iterm2::stable include sublime_text_2 $home = "/Users/${::luser}" Git::Config::Global <| title == 'core.excludesfile' |> { value => "${home}/.gitignore", require => undef } } seu-boxen/modules/people/manifests/lucasmazza.pp
  52. class people::lucasmazza { include alfred include chrome include firefox include

    bash include iterm2::stable include sublime_text_2 $home = "/Users/${::luser}" Git::Config::Global <| title == 'core.excludesfile' |> { value => "${home}/.gitignore", require => undef } } Meu usuário do GitHub seu-boxen/modules/people/manifests/lucasmazza.pp
  53. class people::lucasmazza { include alfred include chrome include firefox include

    bash include iterm2::stable include sublime_text_2 $home = "/Users/${::luser}" Git::Config::Global <| title == 'core.excludesfile' |> { value => "${home}/.gitignore", require => undef } } Módulos que eu quero Meu usuário do GitHub seu-boxen/modules/people/manifests/lucasmazza.pp
  54. class people::lucasmazza { include alfred include chrome include firefox include

    bash include iterm2::stable include sublime_text_2 $home = "/Users/${::luser}" Git::Config::Global <| title == 'core.excludesfile' |> { value => "${home}/.gitignore", require => undef } } Módulos que eu quero Meu usuário do GitHub Mudando configs padrão seu-boxen/modules/people/manifests/lucasmazza.pp
  55. Configuração por projeto

  56. class projects::myapp { include phantomjs include phantomjs::1_9_0 package { 'imagemagick':

    } boxen::project { 'my-app': mysql => true, redis => true, ruby => '1.9.3-p194', source => 'acme/my-app' } git::config::local { "${boxen::config::srcdir}/my-app": # ... } } seu-boxen/modules/projects/manifests/my_app.pp
  57. class projects::myapp { include phantomjs include phantomjs::1_9_0 package { 'imagemagick':

    } boxen::project { 'my-app': mysql => true, redis => true, ruby => '1.9.3-p194', source => 'acme/my-app' } git::config::local { "${boxen::config::srcdir}/my-app": # ... } } seu-boxen/modules/projects/manifests/my_app.pp Dependências
  58. class projects::myapp { include phantomjs include phantomjs::1_9_0 package { 'imagemagick':

    } boxen::project { 'my-app': mysql => true, redis => true, ruby => '1.9.3-p194', source => 'acme/my-app' } git::config::local { "${boxen::config::srcdir}/my-app": # ... } } Repositório no GitHub seu-boxen/modules/projects/manifests/my_app.pp Dependências
  59. class projects::myapp { include phantomjs include phantomjs::1_9_0 package { 'imagemagick':

    } boxen::project { 'my-app': mysql => true, redis => true, ruby => '1.9.3-p194', source => 'acme/my-app' } git::config::local { "${boxen::config::srcdir}/my-app": # ... } } Repositório no GitHub Configurações específicas seu-boxen/modules/projects/manifests/my_app.pp Dependências
  60. CLI

  61. $ boxen Aplica as suas configurações $ boxen --list Lista

    os projetos disponíveis $ boxen nome-do-projeto Aplica as configurações do projeto
  62. Atualização automática a cada execução

  63. nada de git pull nem gem install

  64. Erros pela API de Issues do GitHub

  65. None
  66. Qual o shell usado Diff do repositório Log completo versão

    do OS X
  67. E a Issue é fechada quando o erro for corrigido

  68. None
  69. Compilar rubies? Talvez não.

  70. $ rbenv install 2.0.0-p195 Trying to download precompiled Ruby from

    Boxen...
  71. $ brew boxen-install libevent Installing libevent from S3...

  72. Configure as suas apps com variáveis de ambiente

  73. BOXEN_POSTGRESQL_PORT=15432 BOXEN_MONGODB_PORT=17017 BOXEN_REDIS_URL=redis://localhost:16379/ BOXEN_SRC_DIR=/Users/lucas/src

  74. development: adapter: postgresql database: rails_app_development encoding: unicode port: <%= ENV["BOXEN_POSTGRESQL_PORT"]

    || 5432 %> host: localhost
  75. Quase 200 módulos prontos para você

  76. boxen/puppet-firefox boxen/puppet-alfred boxen/puppet-skitch boxen/puppet-virtualbox boxen/puppet-mysql boxen/puppet-heroku boxen/puppet-android boxen/puppet-vagrant boxen/puppet-minecraft boxen/puppet-adium

    boxen/puppet-onepassword Entre outros
  77. github.com/boxen

  78. Boxen @ Plataformatec

  79. 8 manifestos pessoais

  80. 3 projetos, gerenciando 6 repositórios com diversas dependências

  81. Elixir & Erlang ImageMagick MongoDB Nginx Oracle Instant Client PhantomJS

    Rails contrib Redis
  82. Obrigado! speakerdeck.com/lucas github.com/lucasmazza twitter.com/lucasmazza