Como: configurar Vagrant com VirtualBox executando Ruby on Rails 4, Postgres, Unicorn, Nginx, e port forward no OS X 10.10+

Estou postando isso como uma compilação de recursos que encontrei desde que os guias lá fora não atendem à virtualização fornecida por Vagrant e os erros que podem ocorrer devido a isso.

Como resultado, referirei um monte de material como outros explicaram e formataram melhor do que eu, enquanto apenas substituindo passos no referido material de tal forma que ele funciona sob Vagrant.

num ambiente de implantação real, os recursos associados são suficientes (esta publicação é apenas para vagabundos):

Author: tsujp, 2015-09-19

1 answers

Passo 1: Instalar o Vagrant e o VirtualBox

Você pode usar o Homebrew ou instaladores de seus respectivos sites, aqui e aqui.

Via Homebrew:

brew cask install vagrant
brew cask install virtualbox

Passo 2: Configurar o Vagrant

- Primeiro adicionamos uma caixa de vagabundos.

As caixas vagantes são imagens que são clonadas numa máquina virtual por Vagrant, vamos usar o Ubuntu 14.04 do repositórioUbuntu para criar o nosso Virtual maquina.

vagrant box add ubuntu/trusty64
2, 3 segundos iniciamos o nosso Ficheiro vaginal. O fornecedor padrão de vagabundos para virtualização é VirtualBox, por isso não temos de configurar nada nessa frente. Tudo o que precisamos fazer é criar um Vagrantfile dentro ou ao lado da pasta raiz dos nossos projectos.
  • o Vagrantfile servirá como o 'marcador de localização' para a pasta /vagrant dentro da nossa máquina virtual, uma vez que qualquer coisa contida na mesma pasta que o nosso Vagrantfile estará acessível dentro do nosso virtual maquina.

Certifique-se que cd para onde quer que o seu directório partilhado comece, então tudo o que precisamos de fazer é executar vagrant init com a nossa imagem Ubuntu 14.04.

vagrant init ubuntu/trusty64
Ta-da! Estamos agora prontos para arrancar e brincar na nossa máquina virtual.

Passo 3: arranque e SSH-ing na nossa máquina virtual

Para arrancar e, em seguida, ssh em nossa máquina virtual, devemos estar no mesmo diretório que o nosso Vagrantfile e executar:

vagrant up
vagrant ssh
Agora estamos prontos para instalar Ruby, Postgres, Rails, unicórnio e Nginx.

Passo 4: Instalar pacotes e configurar a nossa máquina virtual

4. 1-Siga o Guia DigitalOcean sobre a instalação de Ruby e Ruby nos trilhos até chegar aos passos opcionais, aqui.
  • Nota: em Install rbenv não se esqueça de deixar o ficheiro como .bash_profile.

4. 2-Instalar o Postgresql no Ubuntu 14. 04.

Actualizar o apt-get, depois instalar Postgres e é dependências:

sudo apt-get update
sudo apt-get install postgresql postgresql-contrib libpq-dev
4.3-segue o Guia Digitaloceano sobre a instalação com Carris, unicórnio e Nginx, aqui .
  • Nota: {[109] } certifique-se de referir os pontos abaixo sobre os quais as coisas a substituir.
  • antes do primeiro passo certifique-se que está no seu directório partilhado, para que possa aceder aos ficheiros a partir da sua máquina anfitriã, por exemplo, para usar Texto Sublime. Para aceder ao seu item de directório partilhado cd /vagrant.
  • Configure Unicorn: Copie a configuração fornecida, no entanto " Unicorn não pode armazenar A.o ficheiro sock numa pasta Virtual partilhada, por isso o que terá de fazer é modificar o 'socket' [...] " solução na fonte . Graças ao Dave Long.
  • Criar um programa de Init Unicórnio: copiar a configuração fornecida, no entanto:

    1. O USER será sempre vagrant.
    2. temos que remover o /home do caminho APP_ROOT também a partir de agora.
    3. Finalmente, dado que os portos com menos de 1024 são privilegiados no OS X, vamos ter de forçar a aplicação dos carris a funcionar em algo mais alto.
      • muda esta linha: CMD="cd $APP_ROOT && bundle exec unicorn -c config/unicorn.rb -E $ENV -D"
      • nisto: CMD="cd $APP_ROOT && bundle exec unicorn -c config/unicorn.rb -E $ENV -D -l 0.0.0.0:3000"
  • instalar e configurar Nginx: copiar a configuração fornecida, no entanto:
      Mudámos o caminho para o unicorn.sock por isso alteramos o caminho para server unix:/home/tmp/sockets/unicorn.sock fail_timeout=0;.
  • No root linha de configuração certifique-se que substitui deploy por vagrant, produzindo: root /home/vagrant/APPNAME/public;.
  • Finalmente, a Nginx pode não ser capaz de encontrar correctamente a aplicação dos carris, por isso vamos definir o proxy_pass para http://localhost:3000;.

Desde que mudámos a localização do ficheiro unicorn.sock para uma pasta dentro da pasta /tmp/ (que será apagada sempre que nós halt a nossa máquina) vamos ter de configurar algumas provisões de consola via vagrant para ter a certeza que o comando mkdir /tmp/sockets é corra cada vez que emitirmos vagrant up para este projecto.

Basta adicionar o seguinte abaixo do bloco configure no seu Vagrantfile onde quiser:

# Create the /tmp/sockets folder we need every time on startup
  config.vm.provision "shell",
    inline: "mkdir /tmp/sockets"

Agora em vez de vagrant up temos de correr {[[40]} toda vez que queremos iniciar a nossa máquina virtual e a pasta /tmp/sockets será criada para nós. Se não fizermos esta pasta, O Unicórnio não pega!


Passo 5: encaminhamento dos portos

Neste momento deverá poder aceder à sua aplicação em http://localhost:8080/tasks desde que tenha configuração de reencaminhamento de portas no seu ficheiro Vagrantfile. Na verdade, porém, você nunca vai acessar seu aplicativo com uma porta no final, então precisamos port para a frente e corrigir isso. Como mencionado antes Vagrant não pode encaminhar para portos com menos de 1024, uma vez que eles são privilegiados no OS X. correr Vagrant sob sudo também não ajuda, uma vez que este privilégio não é passado para o processo de VBoxManage desova Vagrant.

Como resultado, vamos encaminhar as portas 8080 na nossa máquina hospedeira para a porta 80 da máquina virtual (guest). Da mesma forma, enviaremos todo o tráfego no porto 80 da nossa máquina hospedeira para o porto 8080, também na nossa máquina hospedeira. Assim podemos:
    Acesso à nossa máquina hospedeira... Que irá enviar para a nossa máquina hospedeira... Que será encaminhada para a nossa máquina (virtual) convidada.
Finalmente, podemos aceder à nossa aplicação como localhost! 5. 1-locutor para o hóspede A máquina anfitriã é a tua máquina física. máquina, o convidado é o teu Virtual. Vamos para bombordo, Porto 8080 no host, para 80 no convidado.
  1. abra o seu Vagrantfile e encontre a linha com config.vm.network nele.
  2. Descomenda a linha e edite - a, ao mesmo tempo que adiciona outra, tal que se assemelhe:

config.vm.network "forwarded_port", guest: 80, host: 8080
config.vm.network "forwarded_port", guest: 443, host: 8443

Agora encaminhou as portas http e https por omissão da sua máquina para o convidado.

5.2-mapeamento portuário dos portos do anfitrião Agora temos de mapear o hospedeiro. portos 80 e 443 para os portos 8080 e 8443 para que o vagabundo possa apanhá-lo! Nós vamos usar um plugin Nifty chamado vagrant-triggers porque nós não queremos que isso aconteça o tempo todo. Só precisamos dele quando estamos a gerir o nosso caso de vagabundos. A utilização de vagrant-triggers permitir-nos-á executar comandos na máquina de acordo com os comandos que o Vagrant diz para executar.
  1. instale vagrant-triggers executando o seguinte comando na mesma pasta que o seu Vagrantfile: vagrant plugin install vagrant-triggers.
  2. colar o seguinte configuração no seu Vagrantfile dentro do bloco configure, onde quiser.

config.trigger.after [:provision, :up, :reload] do
  system('echo "
    rdr pass inet proto tcp from any to any port 80 -> 127.0.0.1 port 8080  
    rdr pass inet proto tcp from any to any port 443 -> 127.0.0.1 port 8443  
    " | sudo pfctl -ef - > /dev/null 2>&1; echo "==> Fowarding Ports: 80 -> 8080, 443 -> 8443"')  
end

config.trigger.after [:halt, :destroy] do
  system("sudo pfctl -ef /etc/pf.conf > /dev/null 2>&1; echo '==> Removing Port Forwarding'")
end

Assim, a execução vagrant up irá configurar o mapeamento de portas e a execução vagrant halt irá removê-lo.

Agora pode aceder à sua aplicação a partir de http://localhost/tasks.

Espero que este guia ajude toda a gente. Tive de passar por um bocado de dificuldade para descobrir informações sobre porque é que isto não estava a funcionar com o Vagrant especificamente. Muito obrigado à DigitalOcean e a esta comunidade cujos membros conteúdo fornecido para este guia, incluindo ligações ao mapeamento pfctl sob as configurações do soquete de Yosemite e unicórnio.

Se encontrar algo de errado com o guia, por favor, envie-me uma mensagem para que eu possa investigar e corrigir se necessário!

Codificação feliz,

Tsujp

 2
Author: tsujp, 2017-05-23 12:15:25