-
Notifications
You must be signed in to change notification settings - Fork 12
Instalação na Amazon Web Services
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.
No painel do EC2 clique no botão Launch Instance
Selecione a opção Classic Wizard e clique em Continue.
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.
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.
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.
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:
Clique em Continue e vai ser apresentado um resumo da sua instância.
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.
O que nos interessa nesse momento é o endereço da sua máquina, que vai se parecer com isso:
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.
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.
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:
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:
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.
##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.
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]