Skip to content

Latest commit

 

History

History
336 lines (259 loc) · 10.1 KB

GUIA-RAPIDO.md

File metadata and controls

336 lines (259 loc) · 10.1 KB

Guia rápido de configuração

Guia executado e testado em Ubuntu Server 18.04.2 LTS.

Para desenvolvimento e/ou configuração inicial de produção

Programas necessários e configuração

Atualizamos o sistema, instalamos os pacotes necessários e clonamos o repositório, em Ubuntu:

$ apt update
$ apt upgrade
$ apt install git python3-pip postgresql postgresql-contrib nginx certbot python3-certbot-nginx libmysqlclient-dev
$ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash
$ nvm install 14.17.6
$ nvm use 14.17.6
$ pip3 install virtualenv
$ git clone https://github.com/rafaelsartori96/CACo-site.git

Bootstrap

Agora faremos a build do Bootstrap para o site.

Entramos (a partir da pasta raiz do projeto) na pasta do Bootstrap:

$ cd boostrap/

Instalamos os prérequisitos do projeto localmente:

$ npm install

Para desenvolvimento e testes, iniciamos o ambiente de teste e visualização:

$ npm start

Para apenas compilar, fazemos a build do Bootstrap:

$ npm run build

Copiamos os arquivos para a pasta estática do site:

$ cp build/* ../django-site/djangosite/djangosite/static/

Saímos dessa pasta (voltamos à raiz):

$ cd ..

Configuração do banco de dados

Para seguir, precisamos ativar o banco de dados. Por padrão, já não será possível conectar aos usuários remotamente, então nisso estamos seguros. Precisamos alterar a senha padrão e criar um usuário para ser utilizado com Django.

Para fazer isso, precisamos entrar como usuário postgres:

$ sudo su - postgres
# Agora, como usuário postgres, entramos no cliente
$ psql
postgres=#

Agora criamos um novo usuário e um banco de dados para o site:

postgres=# CREATE USER usuario WITH PASSWORD 'SENHA';
postgres=# CREATE DATABASE nome_banco_dados OWNER usuario;

Temos que adicionar também permissão para nos conectar com senha (o padrão é peer, ou seja, um usuário shell de mesmo nome) quando utilizamos socket. Alteramos a configuração de acesso de PostgreSQL no arquivo /etc/postgresql/(versão)/main/pg_hba.conf:

$ EDITOR_PREFERIDO /etc/postgresql/(versão)/main/pg_hba.conf
# alteramos a coluna final "peer" na linha que inicia com "local" para "md5"

# Após alterar, reiniciamos o serviço
$ systemctl restart postgresql

Após configurarmos isso, podemos acessar o banco de dados utilizando o socket e nossa senha:

$ psql nome_banco_dados -U usuario -W
(pedirá a senha)

Agora basta colocarmos essa configuração no nosso arquivo config.json, que faremos na próxima seção.

Trabalho com dump do banco de dados

Para executar os comandos, é necessário substituir usuário, banco de dados e caminho até o arquivo de dump. Há um grande problema com troca de usuários e banco de dados quando restauramos um dump, então tome cuidado! Estou colocando o comando aqui pois precisei alterar o usuário do antigo banco de dados utilizado em Docker.

Para executar um dump:

pg_dump -U (usuário) (banco de dados) -F t --no-owner > (arquivo de dump, formato TAR)

Para restaurar o banco de dados:

pg_restore --no-owner --role (usuário) -d (banco de dados) -c -U (usuário) (arquivo de dump)

Configuração do Django

Configuramos agora o site utilizando um virtual environment (instala pacotes de Python sem que interfira com o resto do sistema, permitindo estabilidade pois escolhemos quando queremos atualizar um sistema em produção independente dos pacotes do sistema operacional). Faremos isso através de virtualenv, uma ferramenta que torna mais agradável trabalhar com virtual environments.

Para utilizarmos depois o virtual environment em produção, temos que instalar o virtualenv num local bem definido do projeto (para configurarmos uwsgi futuramente).

Entramos na pasta raiz do projeto Django (a partir da pasta raiz do projeto):

$ cd django-site/

Criamos um virtual environment e instalamos todos os pacotes do projeto (descritos no arquivo requirements.txt, que contém os pacotes do projeto e suas versões):

# criamos o virtual environment com nome '.venv' (pode ser qualquer nome)
$ virtualenv .venv
# ativamos ele
$ source .venv/bin/activate
# Para produção, é importante continuar as versões testadas (sem atualizá-las)
# Note que o nome do virtual environment aparece à esquerda
(.venv) $ pip install --requirement requirements.txt

Entramos no projeto Django (a partir da pasta raiz do projeto Django):

(.venv) $ cd djangosite/

Editamos o arquivo config.json como diz README.md:

(.venv) $ EDITOR_PREFERIDO config.json
# Configuramos o necessário

Para configurar o ReCaptcha v3, crie um aplicativo aqui.

Para configurar o e-mail: se utilizar o do IC, utilize as configurações SMTP daqui; caso contrário, procure as configurações do provedor de sua escolha.

Para configurar o banco de dados, basta substituir os credenciais.

Se houver qualquer dúvida, volte no endereço do README para ler mais atentamente o trecho de configuração.

Voltando à pasta Django, preparamos a estrutura do banco de dados:

(.venv) $ python manage.py makemigrations

Colocamos a estrutura no banco de dados:

(.venv) $ python manage.py migrate

Criamos um super usuário (administrador do site):

(.venv) $ python manage.py createsuperuser

Copiamos arquivos estáticos para serem servidos:

(.venv) $ python manage.py collectstatic

Executamos o servidor para desenvolvimento e testes no IP e porta que quisermos:

(.venv) $ python manage.py runserver ip:porta

No nosso navegador, acessamos o site com o final do endereço /admin para acessarmos a página de administrador e criar páginas, notícias, menu etc. Para visualizar o site corretamente, é necessário criar pelo menos uma notícia ou uma página estática com endereço / (chamada de root ou raiz).

Após concluído, fechamos o servidor e o banco de dados utilizando Ctrl + C. Para sair do virtual environment, utilize o comando exit ou utilize o atalho Ctrl + D (isso não fechará o terminal, pois o virtual environment abre uma sessão ao ser ativado).

Para produção

Após executar os mesmos passos para desenvolvimento (preparar o workspace é bem parecido com preparar o website para produção, pois inicializamos o banco de dados, criamos um super user etc).

Configurando uwsgi (Django)

Para iniciar o servidor utilizando uwsgi (para ser passado pelo nginx), utilizamos no virtual environment:

(.venv) $ uwsgi --ini uwsgi.ini
(uwsgi criará o socket ou servirá TCP para o nginx que ainda será configurado)

Depois dos testes com nginx, temos que configurar o uwsgi para abrir automaticamente com um serviço, que está descrito em uwsgi.service. Nesse arquivo, precisamos atualizar os caminhos até o projeto e nome de usuário, depois copiar e ativar o serviço utilizando systemd. Para isso, fazemos:

$ EDITOR_PREFERIDO uwsgi.service
(alteramos o caminho para a raiz do projeto)

# Copiamos o serviço para a pasta de serviços
$ cp uwsgi.service /etc/systemd/system/

# Recarregamos o systemctl
$ systemctl daemon-reload

# Iniciamos o serviço e testamos
$ systemctl start uwsgi.service

Após conferir o status utilizando o comando systemctl status uwsgi.service e verificar também se tudo está funcionando (após configurar nginx e testar utilizando o navegador), podemos ativar o serviço para executar em boot.

$ systemctl enable uwsgi.service

Observação: teste também systemctl stop uwsgi.service.

Configurando nginx

Precisamos copiar e configurar o perfil que queremos para nginx, substituindo a configuração padrão (em /etc/nginx/nginx.conf).

$ cd nginx/
$ cp http.conf /etc/nginx/nginx.conf
$ EDITOR_PREFERIDO /etc/nginx/nginx.conf
(precisamos alterar os caminhos de alguns itens)

É necessário configurar nginx.conf para o caminho do socket configurado em uwsgi e para o caminho das pastas static/ e media/. Então podemos utilizar o editor para substituir o texto /caminho/para/projeto/django pelo caminho real até o arquivo django_caco-uwsgi.socket (incluindo o nome do arquivo) que foi criado ao executar o uwsgi anteriormente.

Conferimos se está tudo certo e recarregamos a configuração:

$ nginx -t
(verificar se há erros no arquivo de configuração)
$ nginx -s reload

# Com Django aberto, testamos o site e, se necessário, verificamos o log:
$ cat /var/log/nginx/acess.log | less
$ cat /var/log/nginx/error.log | less

Configurando HTTPS

Na primeira execução, é necessário adquirir os certificados para habilitar o serviço HTTPS. Utilizamos o certbot para fazer isso, ele irá automaticamente fazer as mudanças necessárias na configuração do nginx.

Para configurar o dhparam.pem que utilizanos com nginx, precisamos executar:

$ openssl dhparam -out /etc/nginx/dhparam.pem 2048

Para manutenção

Django e virtual environment

Para verificar o que está desatualizado no virtual environment e atualizar, é necessário estar na pasta que contém o requirements.txt e executar, com o environment ativado:

# Reinstalamos com upgrade
(.venv) $ pip install -U -r requirements.txt
# Checamos dependências
(.venv) $ pip check
# Se tudo foi testado e funciona, atualizamos requirements.txt
(.venv) $ pip freeze > requirements.txt

Bootstrap

Para verificar o que está desatualizado no package e atualizar, é necessário estar na pasta que contém o package.json e executar:

$ npm outdated
# "Wanted" é a versão compatível descrita pelo package.json

Para atualizar para Latest é necessário instalar o pacote npm-check-updates e executar:

# Para instalar o pacote:
$ npm install -g npm-check-updates

# Para atualizar:
$ ncu -u
(irá te informar as alterações)
$ npm install
(irá atualizar)

# Teste as novas versões compilando o projeto e corrija incompatibilidades se houver
$ npm run build