Sistema de arquivos feito com Python e Django. Aplicação que permite um usuário criar pastas e arquivos, os arquivos são armazenados no S3.
O projeto Django possui 2 apps, eles são:
-
User: Responsável pela criação e autenticação de usuários (Autenticação JWT)
- Rotas para tokens JWT:
/api/user/tokene/api/user/token/refresh - Rota de registro de um novo usuário:
/api/user/signup - Rota de logout:
/api/user/logout
- Rotas para tokens JWT:
-
Explorer: Responsável pelo CRUD de pastas e arquivos. Esse app possui dois models: Folder e File. Eles são as entidades principais da aplicação, cada arquivo ou pasta se relaciona com seu usuário dono. Além disso, todo novo usuário possui uma pasta raiz, criada automaticamente e que não pode ser editada. Uma pasta ou arquivo possui uma pasta pai (exceto a pasta raiz do usuário).
- CRUD de pastas
/api/folder - CRUD de arquivos
/api/file - Listagem de objetos de uma pasta
/api/list-folder/<id>
- CRUD de pastas
- Login e registro de usuários
- Autenticação para acessar API
- CRUD de pastas e arquivos
- Arquivos armazenados no S3
- Testes automatizados para todas as rotas da API
- CircleCI para pipelines de qualidade de código (lint, build e execução de testes)
A documentação da API está disponível em:
https://34.199.85.48.sslip.io/api/swagger
O deploy da aplicação foi feito usando a AWS (EC2), Docker e o Caddy. Na pasta deploy existe um arquivo docker-compose.yml que possui 3 serviços:
- Postgres: Banco de dados SQL usado pela aplicação (também é possível utilizar bancos hospedados em serviços como o RDS, basta apenas alterar as credencias do banco no arquivo .env).
- django: Serviço que roda a aplicação Python. Possui um Dockerfile personalizado (
deploy/django/Dockerfile) e utiliza o gunicorn como servidor wsgi. - Caddy: É um servidor HTTP que serve os arquivos estáticos e faz o proxy para o gunicorn servir rotas não estáticas. Instala certificado HTTPS automaticamente usando o Let's encrypt.
A aplicação pode ser acessada em:
https://34.199.85.48.sslip.io/api/swagger
A maior parte das configurações do projeto é através de variáveis de ambiente. É preciso criar um arquivo .env na
raiz do repositório seguindo o modelo do arquivo .env-example.
Iniciar aplicação usando Docker (recomendado):
docker-compose up --buildO docker fará o build de uma imagem personalizada, já instalando as dependências necessárias (requirements.txt), em seguida, o servidor de desenvolvimento estará acessível em: http://localhost:8000. Além do container rodando o servidor Django, o docker-compose também cria um container para o PostgreSQL (banco de dados usado pela aplicação).
