Sexto projeto do curso nanodegree da Udacity de Desenvolvedor Full-stack. O projeto consiste em configurar um servidor remoto hospedado através do serviço da Amazon Lightsail. Nele, deve servir uma aplicação feita em Flask.
- Endereço IP: 54.145.86.10;
- Porta SSH utilizada: 2200.
O login é feito através do comando: ssh grader@54.145.86.10 -p 2200 -i ~/.ssh/grader
, sendo ~/.ssh/grader
a localização da chave privada.
Por conta da API do google de autenticação não permitir o uso de IPs públicos, foi necessário utilizar o serviço de xip.io.
Configuração do servidor:
- Amazon Lightsail;
- Plataforma: Linux/UNIX;
- SO: Ubuntu 16.04 LTS;
- Plano de 512 MB RAM, 1 vCPU, 20 GB SSD.
Configuração do Ubuntu:
- Atualização de pacotes feitas em 19/11/2018;
- Criação de um usuário chamado grader;
- Poderes de sudo foram cedidos ao grader copiando o arquivo
/etc/sudoers.d/ubuntu
e renomeando para grader dentro de seu conteúdo; - Gerado o novo par de chaves localmente, copiando a chave pública e inserindo em
.ssh/authorized_keys
dentro de/home/grader/
, com as devidas permissões (700 para.ssh
e 600 para.ssh/authorized_keys
); - Desativação do login via root editando
/etc/ssh/sshd_config
emPermitRootLogin no
; - Edição de
/etc/ssh/sshd_config
, mudando a porta para 2200; - Permissão de algumas portas no firewall com o
sudo ufw allow
, ativando www, 2200/tcp e ntp. Foi desativada a porta ssh padrão comsudo ufw deny
e por fim o firewall foi ativado comsudo ufw enable
; - Alteração do fuso horário para UTC com
sudo dpkg-reconfigure tzdata
.
Configuração de rede:
- HTTP: 80 - TCP;
- (Custom) NTP: 123 - UDP;
- (Custom) SSH: 2200 - TCP.
Pacotes instalados:
- apache2;
- python3;
- python3-pip;
- libapache2-mod-wsgi-py3;
- git;
- postgresql.
Configuração do Postgresql:
- Criação de usuário grader com senha 123qwe;
- Criação de banco de dados catalogo, onde o usuário grader tem privilégios de alterar seu conteúdo.
Configuração da aplicação:
- Clonagem do projeto de Catálogo de Itens (branch para usar o wsgi) no diretório
/home/grader/
; - Foi copiado o arquivo
webtool.wsgi
do repositório para o diretório/var/www/projeto-catalogo/
; - Foi seguido os passos descritos no README do branch
linux-deploy
para fazer a configuração correta do projeto; - Foi necessário alterar certas coisas do projeto para funcionar corretamente:
- Os caminhos foram configurados para serem absolutos e não relativos;
- A URI do banco de dados foi alterada de sqlite para postgresql, assim sendo agora
postgresql://grader:123qwe@localhost/catalogo
; - O conteúdo de algumas requisições ajax precisam agora ser decodificadas para utf-8 para funcionarem, com
decode("utf-8")
; - Mudar de xrange para range;
- As strings agora precisam ser codificadas para utf-8 antes de ser feito o hashing com
encode("utf-8")
.
Configuração de /etc/apache2/sites-enabled/000-default.conf
(sem os comentários):
<VirtualHost *:80>
ServerAdmin gior.grs@gmail.com
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
WSGIDaemonProcess projeto-catalogo user=grader group=grader threads=5
WSGIScriptAlias / /var/www/projeto-catalogo/webtool.wsgi
<Directory /var/www/projeto-catalogo>
WSGIProcessGroup projeto-catalogo
WSGIApplicationGroup %{GLOBAL}
Order deny,allow
Allow from all
</Directory>
<Directorymatch "^/.*/\.git/">
Order deny,allow
Deny from all
</Directorymatch>
</VirtualHost>
- Slack do curso da Udacity
- How do I change my timezone to UTC/GMT?
- mod_wsgi (Apache)
- How do I prevent apache from serving the .git directory?
- Target WSGI script cannot be loaded as Python module
- How to correct TypeError: Unicode-objects must be encoded before hashing?
- permission denied AWS EC2 file.save from Flask App
- TypeError: the JSON object must be str, not 'bytes'