7 de dezembro de 2014

Admin do Web2py funcionando em máquina vagrant

Como fazer o admin do Web2py funcionar com uma máquina virtual Vagrant sem mexer na aplicação.

Muito importante: essa solução foi projetada para funcionar em uma máquina de desenvolvimento, por isso o desempenho pode não ser satisfatório para um servidor de produção.

Passo 1 - Configurar os redirecionamentos no Vagrantfile


# ...
vm.network "forwarded_port", guest: 8080, host: 9000
vm.network "forwarded_port", guest: 8443, host: 9443
# ...


Essa configuração diz que se eu digitar http://localhost:9000 no browser do sistema operacional host, vai cair na porta 8080 do guest. E se eu digitar https://localhost:9443 vai pra porta 8443 do guest.

Isso é muito importante!


Passo 2 - Instalar o Web2py no guest e gerar a senha para o https

Instale o Web2py no guest como você sempre fez. Depois:

# Create password file to work with https (port 8443)
$ cd web2py
$ python -c "from gluon.main import save_password; save_password('senha', 8443)"
$ cp parameters_8443.py parameters_8080.py

Note que a porta é a 8443 (a mesma definida para o guest no Vagrantfile do primeiro passo).


Passo 3 - Criar certificados SSL para o guest


# OpenSSL to work with Web2py
$ mkdir -p ${HOME}/openssl
$ cd ${HOME}/openssl
$ openssl genrsa -out server.key 2048
$ openssl req -new -key server.key -out server.csr -subj /C=AU
$ openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt


Passo 4 - Redirecionar chamadas http para https usando o routes.py


Arquivo routes.py que deve ser gravado no diretório raiz do Web2py do guest:

# -*- coding: utf-8 -*-

routes_in = (
  ('.*?:http://[^:/]+:[a-z]+ /$anything', '303->https://localhost:9443/$anything'),
)

logging = 'debug'

Note que o redireciomento usa o número de porta do host (9443). O que vai acontecer é um http redirect com o código 303 no browser do host.

Passo 5 - Colocar o Web2py no ar


$ python web2py.py --nogui -a '<recycle>' --interfaces='0.0.0.0:8080;0.0.0.0:8443:/home/vagrant/openssl/server.key:/home/vagrant/openssl/server.crt'

Importante: deve ser informado primeiro o arquivo de chave (extensão .key), depois o arquivo de certificado (extensão .crt).

Passo 6 - Ver tudo funcionar

No browser do host, digite: http://localhost:9000 e você verá um redirecionamento para https://localhost:9443.


Conclusão

Existem vantagens e desvantagens nessa configuração.

Vantagens:
  • Não preciso modificar a URL para ver os tickets de erro.
  • Todas as outras do Vagrant.
Desvantagens:
  • Fica um pouco (pouquíssimo!) mais lento, pois tudo é servido via https, inclusive arquivos estáticos (imagens, js, css, etc.)
  • Como as requisições não são mais provenientes de localhost, é preciso habilitar as generic views no arquivo db.py da sua aplicação.

Eu sou Vinicius Assef, um programador do século passado que gosta de Python, pratica Lean Development e acredita em Deus. Você pode me contactar por email ou twitter.

Nenhum comentário:

Postar um comentário

Marcadores