Skip to content

Instalação na Amazon Web Services

relsi edited this page Mar 27, 2013 · 28 revisions

Veremos aqui os procedimentos para instalar o Chip In Code nos servidores da Amazon Web Services (AWS) utilizando uma instância EC2.

Uma das vantagens em utilizar a AWS é que você pode utilizar a maioria dos serviços gratuitamente por 1 ano utilizando as configurações básicas. A desvantagem é que você precisa administrar toda a infraestrutura, por isso é importante ter o acompanhamento de um sysadmin nesse processo, caso contrário, opte por um serviço como o PythonAnywhere ou OpenShift.

Dito isso, para maiores informações, e para criar sua conta, acesse o seguinte endereço:

Esse procedimento vai demonstrar uma instalação básica, não vamos nos ater aqui a questões de segurança ou de otimização da máquina virtual, essa é uma atividade que deve ser colocada a cargo de um sysadmin qualificado para manter a sua estrutura funcionando perfeitamente.

Nós iremos criar um máquina na AWS com as seguintes características:

  • Ubuntu Server 12.04
  • MySQL
  • Apache
  • WSGI

Vamos utilizar um processo retirado da própria documentação do Web2py.

Bom, pra começar então vamos acessar o painel de controle da AWS:

Escolha a opção EC2, para podermos criar nossa máquina.


Instalando na AWS


No painel do EC2 clique no botão Launch Instance


Instalando na AWS


Selecione a opção Classic Wizard e clique em Continue.


Instalando na AWS


Na próxima página, escolha a máquina Ubuntu Server 12.04.1 LTS e clique no botão Select.

Na próxima tela, certifique-se que está selecionando uma instância T1 Micro, que é o tipo de máquina elegível para o uso gratuito de recursos por um ano.


Instalando na AWS


Nas próximas telas apenas clique em Continue. Então, na quarta tela, defina uma identificação para sua instância e clique em Continue.


Instalando na AWS


Na próxima tela teremos a possibilidade de criar um par de chaves para acessar a nossa instância via SSH, procedimento que faremos para poder instalar os softwares necessários para criar o servidor da nossa aplicação. Defina um nome para o seu par de chaves e clique em Create & Download your Key Pair Essa chave será necessária mais adiante. Iremos nos referir a ela como nome-da-chave.pem, onde você deverá substituir pelo nome que você definiu nesse passo.


Instalando na AWS


No próximo passo vamos definir quais portas queremos deixar disponíveis em nossa instância criando um grupo de acesso. Para isso selecione a opção Create a new Security Group, defina um nome e uma descrição para o grupo e selecione as seguintes portas (Basta selecionar o tipo, nas opções disponíveis, e clicar em Add Rule):

  • 22 - SSH
  • 80 - HTTP
  • 443 - HTTPS

No final você deve ter a seguinte configuração:


Instalando na AWS


Clique em Continue e vai ser apresentado um resumo da sua instância.


Instalando na AWS


Estando tudo OK, clique no botão Launch e espere a instância ser iniciada. Pode fechar a janela de configuração de alarmes que aparecerá e você será redirecionado para o painel do EC2 novamente, onde poderá ver os dados da instância clicando na mesma. Você terá uma tela igual a essa, apenas com informações diferentes.


Instalando na AWS


O que nos interessa nesse momento é o endereço da sua máquina, que vai se parecer com isso:


Instalando na AWS


De agora em diante vamos nos referir a ele como seu-endereco-aqui.compute-1.amazonaws.com, então substitua as entradas de acordo.

Agora vamos pegar o endereço de conexão via ssh da nossa máquina. Faça isso clicando com o botão direito em cima da sua instância e em seguida clique com o botão esquerdo selecione a opção Connect, e na tela que se abrirá, clique na opção Connect with a standalone SSH Client.


Instalando na AWS


Nessa mesma janela, tem um link para instruir usuários Windows a conectar na máquina utilizando o puTTY.

O que nos interessa nessa janela é o seguinte:

ssh -i nome-da-chave.pem [email protected]

Esse é o comando necessário para acessar nossa máquina via SSH utilizando a chave que baixamos no processo de criação da máquina, apenas devemos alterar o usuário root para ubuntu que é o usuário padrão da nossa máquina. Então sua string de conexão ficará assim:

ssh -i nome-da-chave.pem [email protected]

Antes de conectarmos devemos mudar as permissões da chave que a criamos anteriormente. Abra um terminal na sua máquina e navegue até o diretório onde baixou a chave ('cd /Downloads' por exemplo). Em seguida digite o seguinte comando:

chmod 400 nome-da-chave.pem

Mude o nome-da-chave para o nome que você criou.

Feito isso, no mesmo terminal, vamos conectar na nossa máquina utilizando o comando:

ssh -i nome-da-chave.pem [email protected]

Será solicitado para você adicionar o endereço aos endereços conhecidos de seus acessos ssh, basta confirmar com yes

Após conectar a máquina, serão exibidas algumas informações sobre o servidor.

Agora que já estamos conectados remotamente à nossa máquina na AWS, podemos prosseguir com a instalação do sistema. Tudo será feito nessa conexão e caso você venha a fechar o terminal, ou fechar a conexão, deverá realizar novamente o procedimento:

ssh -i nome-da-chave.pem [email protected]

O que temos até o momento é um servidor completamente "limpo", então, será necessário instalar toda a plataforma para podermos publicar nosso site.

Primeiramente vamos atualizar o sistema. Digite o comando:

sudo apt-get update

Espere terminar o processo e digite:

sudo apt-get -y upgrade

Espere terminar o processo e digite:

sudo apt-get autoremove

Espere terminar o processo e digite:

sudo apt-get autoclean

Agora vamos instalar o software necessário.

Para instalar o MySQL digite o comando:

sudo apt-get -y install mysql-server

Aguarde ele iniciar o processo, em seguida, o instalador solicitará o cadastro da senha do usuário root do MySQL.


Instalando na AWS Instalando na AWS


Digite a senha, confirme e pressione [enter].

Para instalar o servidor web digite o comando:

sudo apt-get -y install apache2

Vamos instalar também a lib pro Apache trabalhar com wsgi:

sudo apt-get -y install libapache2-mod-wsgi

Agora vamos instalar algumas ferramentas que serão necessárias para prosseguir com a instalação.

Digite o seguinte comando:

sudo apt-get -y install build-essential python-dev libxml2-dev unzip git-core

Vamos agora habilitar os módulos do Apache:

sudo a2enmod ssl

sudo a2enmod proxy

sudo a2enmod proxy_http

sudo a2enmod headers

sudo a2enmod expires

sudo a2enmod wsgi

Agora vamos criar nossa chave e o certificado de segurança para podermos acessar o servidor via https:

Crie um novo diretório:

sudo mkdir /etc/apache2/ssl

Cria agora um chave com o comando:

sudo openssl genrsa -out /etc/apache2/ssl/self_signed.key 1024

Altere as permissões da chave:

sudo chmod 400 /etc/apache2/ssl/self_signed.key

E gere o certificado:

sudo openssl req -new -x509 -nodes -sha1 -days 365 -key /etc/apache2/ssl/self_signed.key -out /etc/apache2/ssl/self_signed.cert

As informações que serão solicitadas podem ser deixadas em branco, basta pressionar [enter]

Para finalizar insira o comando:

sudo openssl x509 -noout -fingerprint -text -in /etc/apache2/ssl/self_signed.cert -out /etc/apache2/ssl/self_signed.info

Agora vamos copiar e instalar o Web2py no servidor.

Copie o Web2py para seu diretório home com o seguinte comando:

wget http://web2py.com/examples/static/web2py_src.zip

Descompacte os arquivos:

unzip web2py_src.zip

Remova o pacote baixado:

sudo rm web2py_src.zip

Vamos agora clonar nossa aplicação dentro do diretório applications do Web2py.

Navegue até o diretório applications:

cd web2py/applications

Rode o comando:

git clone git://github.com/codeupstudio/chipincode.git

Espere terminar o processo e retorne para o diretório do Web2py:

cd ..

Agora vamos editar o arquivo routes.example.py para o Web2py carregar a nossa aplicação.

Rode o comando:

nano routes.example.py

Altere a linha:

default_application = 'init'

Por:

default_application = 'chipincode'

Salve o arquivo [ctrl+o] com o nome routes.py, pressione [enter], confirme digitando Y e feche o editor [ctrl+x].

Agora vamos criar as configurações do apache para o Web2py, digite o comando:

sudo nano /etc/apache2/sites-available/default

Apague todo o conteúdo desse arquivo e insira esse outro(muito cuidado com a digitação, deve ser exatamente igual):

você pode copiar [ctrl+c] e colar no editor [ctrl+shift+v]

NameVirtualHost *:80
NameVirtualHost *:443
WSGIDaemonProcess web2py user=ubuntu group=ubuntu

<VirtualHost *:80>
    WSGIProcessGroup web2py
    WSGIScriptAlias / /home/ubuntu/web2py/wsgihandler.py
    WSGIPassAuthorization On
    <Directory /home/ubuntu/web2py>
        AllowOverride None
        Order Allow,Deny
        Deny from all
        <Files wsgihandler.py>
            Allow from all
        </Files>
    </Directory>

  AliasMatch ^/([^/]+)/static/(.*) \
       /home/ubuntu/web2py/applications/$1/static/$2
  <Directory /home/ubuntu/web2py/applications/*/static/>
    Options -Indexes
    Order Allow,Deny
    Allow from all
  </Directory>

  <Location /admin>
     Deny from all
  </Location>

  <LocationMatch ^/([^/]+)/appadmin>
      Deny from all
  </LocationMatch>

  CustomLog /var/log/apache2/access.log common
  ErrorLog /var/log/apache2/error.log
</VirtualHost>

<VirtualHost *:443>
  SSLEngine on
  SSLCertificateFile /etc/apache2/ssl/self_signed.cert
  SSLCertificateKeyFile /etc/apache2/ssl/self_signed.key

  WSGIProcessGroup web2py
  WSGIScriptAlias / /home/ubuntu/web2py/wsgihandler.py
  WSGIPassAuthorization On

  <Directory /home/www-data/web2py>
    AllowOverride None
    Order Allow,Deny
    Deny from all
    <Files wsgihandler.py>
      Allow from all
    </Files>
  </Directory>

  AliasMatch ^/([^/]+)/static/(.*) \
        /home/ubuntu/web2py/applications/$1/static/$2

  <Directory /home/ubuntu/web2py/applications/*/static/>
        Options -Indexes
        ExpiresActive On
        ExpiresDefault "access plus 1 hour"
        Order Allow,Deny
        Allow from all
  </Directory>

  CustomLog /var/log/apache2/access.log common
  ErrorLog /var/log/apache2/error.log
</VirtualHost>

Salve o arquivo [ctrl+o], pressione [enter], confirme digitando Y e feche o editor [ctrl+x].

Reinicie o Apache com o seguinte comando:

sudo /etc/init.d/apache2 restart

Vamos definir uma senha para acessar a administração do Web2py.

Navegue até o diretório do Web2py (se você saiu):

cd web2py

Digite o comando:

sudo -u ubuntu python -c "from gluon.widget import console; console();"

E em seguida digite o comando:

sudo -u ubuntu python -c "from gluon.main import save_password; save_password(raw_input('admin password: '),443)"

Digite a senha desejada e pressione [enter].

Abra um navegador e acesse o aplicativo através da url:

http://seu-endereco-aqui.compute-1.amazonaws.com/chipincode

Como estamos rodando o sistema pela primeira vez, será exibida a tela de cadastro do usuário administrativo:


Cadastro de Usuário


Insira o dados solicitados e clique em instalar. Você será direcionado para a tela de login, insira dos dados de acesso e faça o login:


Login


Feito o login você será direcionado para o painel administrativo, onde deverá efetuar as configurações para o funcionamento do sistema o que tiver em vermelho é obrigatório configurar antes de utilizar o site, sem essas informações você receberá vários erros do sistema.


Login


##Usando o Sistema com o MySQL Por padrão o Chip In Code utiliza o sqlite como base de dados, como a maioria dos servidores já o disponibiliza você não precisa se preocupar com a instalação do mesmo. O sqlite é um ótimo banco de dados para usar em pequenas e médias aplicações web, portanto se o seu site não vai ter mais de 100.000 requisições diárias, alta concorrência e nem vai lidar com terabytes de dados, você pode continuar utilizando o sqlite sem problemas, mas se desejar você poderá utilizar qualquer um dos bancos de dados suportados pelo web2py.

O web2py suporta diversos bancos de dados sem necessidade de alteração na aplicação. Nós desenvolvemos o sistema utilizando o sqlite e o MySQL mas nada impede que você utilize um dos outros bancos de dados suportados, o procedimento é basicamente o mesmo, mas cada banco deve ter suas peculiaridades em relação à instalação e configuração. Optamos pelo MySQL por ser o mais simples de operar: http://web2py.com/books/default/chapter/29/06#Connection-strings.

Antes de prosseguir, desconecte do Painel administrativo e feche a janela do sistema.

###Criando a Base de dados

Digite no terminal o comando:

mysql -u root -p

Será solicitada a senha que você cadastrou quando instalou o MySQL, digite a senha e deverá aparecer o console do mysql:

> mysql>

Vamos criar o banco de dados. Digite o comando:

create database chipincode;

Você deve ter essa saída: > Query OK, 1 row affected (0.00 sec). Então pressione [enter]

Vamos criar um usuário, configurar a senha e dar a ele o acesso à base criada (mude senha-aqui pela senha que você desejar):

GRANT ALL PRIVILEGES ON chipincode.* TO testdbuser@localhost IDENTIFIED BY 'senha-aqui' ;

Você deve ter essa saída: Query OK, 0 rows affected (0.00 sec) . Então pressione [enter]

Feche o mysql [ctrl+d].

Vamos agora configurar o arquivo de conexão da base de dados.

Digite no terminal:

sudo nano /home/ubuntu/web2py/applications/chipincode/models/db.py

Comente a conexão ativa # que usa o sqlite e descomente a conexão do mysql. Insira os dados de acesso dessa forma:

levando em consideração que você criou a base e usuário iguais aos indicados aqui, caso contrário substitua de acordo.


Administrando Base de dados


Salve o Arquivo [ctrl+o], pressione [enter] para confirmar e feche o editor [ctrl+x].

Feito isso, abra a sua aplicação novamente:

http://seu-endereco-aqui.compute-1.amazonaws.com/

Se tudo correu bem, poderemos agora instalar a aplicação utilizando uma base de dados MySQL

##[Voltar]