README.md 6.77 KB
Newer Older
João Denis Rodrigues's avatar
João Denis Rodrigues committed
1
# ADEGA
2 3


4
Este software faz parte de um projeto do PET Computação UFPR para
Jomaro Rodrigues's avatar
Jomaro Rodrigues committed
5
análise de dados dos cursos de graduação da UFPR. Veja a [wiki](http://gitlab.c3sl.ufpr.br/adega/adega/wikis/home).
João Denis Rodrigues's avatar
João Denis Rodrigues committed
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21


## Versão
0.0.0



## Obtendo os códigos


Os códigos fonte do projeto estão disponíveis publicamente no [gitlab]
(gitlab.c3sl.ufpr.br/pet/adega).

E podem ser clonado com o comando

```bash
Jomaro Rodrigues's avatar
Jomaro Rodrigues committed
22
$ git clone git@gitlab.c3sl.ufpr.br:adega/adega.git
João Denis Rodrigues's avatar
João Denis Rodrigues committed
23
```
24
## Instalação e dependências com docker
João Denis Rodrigues's avatar
João Denis Rodrigues committed
25

26 27 28 29 30
Para executar o projeto com o docker, siga os seguintes passos:
```bash
$ git clone git@gitlab.c3sl.ufpr.br:adega/adega.git # Comando já executado
$ cd adega/
$ sudo make docker-install # Instala o docker.io e docker-compose
msrr18's avatar
msrr18 committed
31
$ sudo apt install docker.io
32 33 34 35 36
$ sudo make docker-up # Executa os containers postgres e webserver
```

## Desenvolvimento com o docker

Bruno Meyer's avatar
Bruno Meyer committed
37 38
### Dependências
Docker >=1.13.1
Bruno Meyer's avatar
Bruno Meyer committed
39 40


Bruno Meyer's avatar
Bruno Meyer committed
41 42
Docker-compose >=1.21.2

Bruno Meyer's avatar
Bruno Meyer committed
43 44 45 46 47 48 49 50 51 52 53 54
#### Possíveis erros:
*1*: O docker-compose padrão nos repositórios podem não conter a versão mais recente. Caso a etapa de instalação não funcione, consulte a [referência dos desenvolvedores](https://github.com/docker/compose/releases).


*2*: Seu computador pode ter problemas ao configurar o DNS. Neste caso, erros parecidos como os a seguir irão acontecer:
```bash
E: Unable to locate package python3-pip
E: Unable to locate package postgresql-client
```


Neste caso, consulte [este tutorial](https://development.robinwinslow.uk/2016/06/23/fix-docker-networking-dns/) para resolver o problema.
msrr18's avatar
msrr18 committed
55
Depois de fazer o tutorial, lembre de utilizar o comando `sudo docker system prune -a` para limpar a cache e evitar os problemas.
Bruno Meyer's avatar
Bruno Meyer committed
56 57

### Uso
Bruno Meyer's avatar
Bruno Meyer committed
58
Enquanto o `sudo make docker-up` estiver sendo executado, as alterações feitas nos arquivos do projeto serão compartilhadas com os arquivos do container docker. Ou seja, é possível alterar qualquer arquivo do projeto e haverá resultados em tempo real.
59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78


Assim como é possível realizar qualquer comando como seria feito no com o manage.py, também é possível por meio do comando `sudo make docker-manage`. Por exemplo:
```bash
$ sudo make docker-manage makemigrations uploads
$ sudo make docker-manage migrate
$ sudo make docker-manage createsuperuser
```

Para realizar esses comandos, certifique-se que o comando `make docker-up`está em execução (recomenda-se deixar uma aba no terminal para isso).

## Recomendações para o docker
É recomendado que o usuário configure o docker para que o mesmo possa ser executado sem necessidades de privilégios de superusuário, assim não haverá necessidade do uso de `sudo`. Caso contrário, os comandos realizados com `sudo make` poderão criar arquivos cujo proprietário é o usuário `root`. Caso a recomendação não for seguida, o seguinte comando irá alterar o proprietário dos arquivos para o usuário atual:
```bash
$ sudo make docker-fix
```

## Remover os containers + banco de dados
Para apagar os containers e o banco de dados, execute o seguinte comando:
```bash
Bruno Meyer's avatar
Bruno Meyer committed
79
$ sudo make docker-remove-all
80 81
```
*Observação*: Esse comando **não** irá deletar qualquer arquivo do projeto / diretório local, apenas os containers.   
João Denis Rodrigues's avatar
João Denis Rodrigues committed
82

83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113
## Versão de produção
Para fazer o deploy do adega na versão de produção primeiro verifique se settings.py está com a seguinte linha:
```python
DEBUG = False
```
Então execute:
```bash
$ sudo make docker-production
```
Este comando funciona da mesma forma que `make docker-up` e portando também funciona com os comandos `make docker-manage`.

O aplicativo vai rodar na porta 8000, para alterar mude a porta do container nginx no arquivo `docker-production.yml`.

### Observações do servidor
Se não for possível construir as imgens do docker no servidor será necessário copia-las manualmente por scp.

Para salvar uma imagem execute:
```bash
$ sudo docker save imagem -o imagem_destino
```
Para carregar:
```bash
$ sudo docker load -i imagem
```
É necessário carregar as imagens `adega_web`, `adega_db` e `adega_nginx`.

Se alterações forem feitas no código do adega elas serão automaticamente refletidas no servidor, mesmo na versão de produção.
Porém se mudanças forem feitas no container do nginx a imagem deste deverá ser refeita.

Para manter o aplicativo atualizado só é necessário dar pull na branch production.

114
## Instalação e dependências manuais (não recomendado)
João Denis Rodrigues's avatar
João Denis Rodrigues committed
115 116 117


```bash
Jomaro Rodrigues's avatar
Jomaro Rodrigues committed
118 119 120
sudo make install
make install-user
pipenv install --dev
João Denis Rodrigues's avatar
João Denis Rodrigues committed
121 122
```

Jomaro Rodrigues's avatar
Jomaro Rodrigues committed
123 124 125 126 127 128 129
Criar o banco de dados postgres

```
sudo -u postgres psql < postgres/create.sql
```


130 131
se você possui o arquivo do banco de dados compartilhado internamente pelos
desenvolvedores do projeto coloque-o na home do projeto, ele vem com um usuário
João Denis Rodrigues's avatar
João Denis Rodrigues committed
132 133 134 135 136 137 138 139 140 141 142
`pet` com senha `pet` pré-configurado para testes.


se você não possui o arquivo rode

```bash
python manage.py migrate
python manage.py createsuperuser
```


msrr18's avatar
msrr18 committed
143
## Executando o projeto (se você fez as instalações de forma manual)
João Denis Rodrigues's avatar
João Denis Rodrigues committed
144

145
Por padrão ele irá rodar no 127.0.0.1:8000, ative o virtualenv antes
João Denis Rodrigues's avatar
João Denis Rodrigues committed
146
```bash
147
pipenv shell
João Denis Rodrigues's avatar
João Denis Rodrigues committed
148 149 150 151 152
python manage.py runserver
```

Se estiver usando o cloud9 use o ip e a porta que ele libera, assim:
```bash
153
pipenv shell
João Denis Rodrigues's avatar
João Denis Rodrigues committed
154 155
python manage.py runserver $IP:$PORT
```
156

João Denis Rodrigues's avatar
João Denis Rodrigues committed
157 158
Então acesse pela url fornecida

159 160
Ao sair do projeto execute `exit` para sair do virtualenv e evitar polui-lo

João Denis Rodrigues's avatar
João Denis Rodrigues committed
161 162 163
## Transformando o seu usuário em um professor

Após você logar no sistema com o seu super usuário você terá acesso ao `URL_DO_SITE/admin`, graças ao [Django admin](https://docs.djangoproject.com/en/1.10/ref/contrib/admin/) nesta tela você é capaz de gerenciar os dados salvos nas models do projeto.   
164
Para transformar o seu usuário em professor basta clicar em `professor`e então selecionar o seu usuário e o curso. Agora se você voltar para a página inicial do sistema você deve ver uma listagem dos seus cursos.
João Denis Rodrigues's avatar
João Denis Rodrigues committed
165

msrr18's avatar
msrr18 committed
166
## Executando análises (se vocẽ está usando docker)
msrr18's avatar
msrr18 committed
167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187

Para executar as análises, acesse `localhost:8000/admin` e adicione um submission.
Após isso execute o comando:

```bash
sudo make docker-manage analyze 1 # usando o docker
```


ou



```bash
python3 manage.py analyze 1
```


Onde 1 é o id do submission.


João Denis Rodrigues's avatar
João Denis Rodrigues committed
188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210

## Gerar diagrama do projeto

Basta executar:
```bash
python manage.py graph_models -a -o diagrama.png
```

### Entendendo as dependências do projeto:

* [Django](https://www.djangoproject.com/) - Framework base. Trata a requisição dos clientes e chama as devidas rotinas.
* [Bootstrap](http://getbootstrap.com/) - Framework css. Usamos os seus componentes para deixar as telas bonitas
* [Charts.js](http://www.chartjs.org/) - Biblioteca javascript para desenhar gráficos.
* [Pandas](http://pandas.pydata.org/) - usada para importação dos dados
* [django-extensions](https://django-extensions.readthedocs.io/en/latest/) - Várias extensões para o django. Estamos usando para gerar o diagrama do projeto.


## Contato


Email - pet@inf.ufpr.br

Facebook - pt-br.facebook.com/petcompufpr