Deploy
Para realizar o deploy para o projeto 2 precisaremos efetuar duas etapas: o deploy do frontend e o deploy do backend.
Deploy do backend
Assim como no projeto 1B, vamos realizar o deploy do backend utilizando o serviço Render.
Resumo do deploy
Criando PostgreSQL no Render
O primeiro passo é criar um banco de dados PostgreSQL utilizando o Render.
Visite o site https://render.com/ e preenche o campo name
com um nome para o banco de dados. Os outros campos são opcionais.

Escolha a opção gratuita. Não é necessário adicionar nenhuma informação de pagamento.
Em seguida, clique em Create Database
.

Será necessário esperar um pouco até que o banco de dados seja criado.

Quando o status
estiver como Available
, desça a página e procure a área chamada Connections
. Dentro dessa área, procure o campo External Database URL
, essa informação será utilizada para conectar o banco de dados com a aplicação.
Clique no botão Copy
e guarde essa informação, pois vamos precisar dela mais tarde.

Guarde o valor contido no campo External Database URL
, pois vamos utilizá-lo mais tarde.
Conectando a aplicação com o banco de dados PostgreSQL
-
Abra o seu projeto 2 Django REST.
-
Instale a dependência
dj-database-url
: -
Adicione o
import
no começo do arquivosettings.py
(Pode ser logo após o códigofrom pathlib import Path
):
- ainda no arquivo
settings.py
, procure pelo dicionárioDATABASES
e substitua pelo código abaixo:
DATABASES = {
'default': dj_database_url.config(
default='',
conn_max_age=600,
ssl_require=not DEBUG
)
}
No campo default adicione a informação aquela informação que havíamos copiado anteriormente. (O campo External DATABASE URL)
Mais configurações do projeto
- Instale a dependência
gunicorn
:
Outras modificações nas configurações
Aproveite que está com o settings.py
aberto e modifique o valor da constante DEBUG
para False
. Além disso, procure pela lista ALLOWED_HOSTS
, ela deve ser uma lista vazia, ou seja, ALLOWED_HOSTS = []
altere para:
-
Debug para
False
: -
Allowed Hosts para
['*']
:python ALLOWED_HOSTS = ['*']
Atualizando o arquivo requirements.txt
Vamos criar o arquivo requirements.txt
com as dependências do projeto. Para isso, rode o comando:
Dê uma olhada no arquivo requirements.txt
e verifique se não há dependências desnecessárias.
Faça um commit e um push para o seu repositório no Github.
Arquivos desnecessários
O seu repositório deve possui um arquivo .gitignore com o seguinte conteúdo:
Conteúdo do arquivo .gitignore do projeto Django
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class
# C extensions
*.so
# Distribution / packaging
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
pip-wheel-metadata/
share/python-wheels/
*.egg-info/
.installed.cfg
*.egg
MANIFEST
# PyInstaller
# Usually these files are written by a python script from a template
# before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec
# Installer logs
pip-log.txt
pip-delete-this-directory.txt
# Unit test / coverage reports
htmlcov/
.tox/
.nox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
*.py,cover
.hypothesis/
.pytest_cache/
# Translations
*.mo
*.pot
# Django stuff:
*.log
local_settings.py
db.sqlite3
db.sqlite3-journal
# Flask stuff:
instance/
.webassets-cache
# Scrapy stuff:
.scrapy
# Sphinx documentation
docs/_build/
# PyBuilder
target/
# Jupyter Notebook
.ipynb_checkpoints
# IPython
profile_default/
ipython_config.py
# pyenv
.python-version
# pipenv
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
# However, in case of collaboration, if having platform-specific dependencies or dependencies
# having no cross-platform support, pipenv may install dependencies that don't work, or not
# install all needed dependencies.
#Pipfile.lock
# PEP 582; used by e.g. github.com/David-OConnor/pyflow
__pypackages__/
# Celery stuff
celerybeat-schedule
celerybeat.pid
# SageMath parsed files
*.sage.py
# Environments
.env
.venv
env/
venv/
ENV/
env.bak/
venv.bak/
# Spyder project settings
.spyderproject
.spyproject
# Rope project settings
.ropeproject
# mkdocs documentation
/site
# mypy
.mypy_cache/
.dmypy.json
dmypy.json
# Pyre type checker
.pyre/
.DS_Store
Importante
Certifique-se de o arquivo db.sqlite3
foi comitado, assim como as pastas "pycache" e "env".]
Caso tenha comitado o arquivo db.sqlite3
, execute o comando a seguir e faça um commit e um push:
Caso tenha comitado a pasta env
, execute o comando a seguir e faça um commit e um push:
Enviando o projeto para o Render
-
Acesse a página do Render e clique em
New +
e em seguidaWeb Service
. -
Escolha a opção de fazer o deploy a partir de um repositório do Github.
-
Procure o repositóriodo seu projeto e clique em
Connect
. -
Procure a opção
Start Command
e troque o comando existente pelo seguinte comando: TroqueXXXXXXX
pelo nome do seu projeto. O nome do seu projeto é o nome da pasta que contém o arquivosettings.py
. -
Selecione a opção gratuita e clique em
Create Web Service
. -
Caso tenha utilizado o arquivo
.env
será necessário adicionar as variáveis de ambiente no Render. Para isso, adicione o nome e o valor de todas as variáveis de ambiente presentes no arquivo.env
no Render. -
O Render vai iniciar o processo de deploy. Aguarde até que o deploy seja finalizado. É possível acompanhar o processo do deploy no terminal do Render.
-
Caso o deploy tenha sido realizado com sucesso, você verá a seguinte mensagem:
É possível acessar a aplicação clicando no link que aparece no topo da página.
Passo final
Após realizar a etapa acima com sucesso, realize as últimas configurações.
Vá no arquivo settings.py
e atualize a variável ALLOWED_HOSTS
(A configuração da variável ALLOWED_HOSTS
serve para evitar alguns ataques):
ALLOWED_HOSTS
não deve utilizar o https://
Substitua tecweb-projeto-exemplo.onrender.com
pelo link da sua aplicação gerado pelo Render.
Faça um novo commit e realize um push para o seu repositório no Github.
Sempre que você realizar um commit na branch principal, o Render fará um novo deploy.


Deploy do frontend
.gitignore
Crie um arquivo .gitignore
na pasta do seu projeto frontend com o seguinte conteúdo:
Importante
Certifique-se de que a pasta node_modules
não foi comitada. Caso tenha comitado a pasta node_modules
, execute o comando a seguir e faça um commit e um push:
Alterando localhost
Após realizar o deploy do backend, vamos realizar o deploy do frontend. Para isso, pegue o link gerado para o seu projeto backend no Render e atualize todas as requisições feitas no frontend para a rota http://localhost:8000
para o link gerado pelo Render.
Faça um commit e um push para o seu repositório no Github.
Teste
Faça algumas requisições para verificar se o backend está funcionando corretamente. Você pode utilizar o Postman.
Deploy do frontend
Vamos criar outro web service no Render para o frontend.

-
Escolha a opção
Build and Deploy a New Web Service
. -
Procure o repositório com o projeto frontend e clique em
Connect
. -
Coloque as seguintes configurações:
- Root directory: Coloque a pasta que contem o arquivo
package.json
, caso este arquivo não esteja na raiz do projeto. - Build Command:
npm i
- Start Command:
npm run dev -- --host
- Root directory: Coloque a pasta que contem o arquivo

-
Escolha a opção gratuita e clique em
Create Web Service
. -
O Render vai iniciar o processo de deploy. Aguarde até que o deploy seja finalizado. É possível acompanhar o processo do deploy no terminal do Render.
Por fim, adicione o link do deploy do frontend no arquivo README.md
do seu repositório.