Autor: Junior Carvalho (LinkedIn, Dev.to)
Repositório: python-django-example
Se você trabalha com Python/Django, já deve ter sentido o atrito que pode ser levar sua aplicação do ambiente de desenvolvimento para um servidor de produção. Você quer focar no código, mas se vê preso em um mar de configurações de servidor.
É aqui que o Dokku entra em ação, transformando um processo complicado em algo rápido e eficiente. Dokku é uma PaaS (Platform as a Service) minimalista que permite que você faça o deploy de suas aplicações via Git Push, de forma semelhante ao Heroku, mas em sua própria máquina virtual.
Este artigo apresenta um tutorial passo a passo para que você possa fazer o deploy de seu projeto Python/Django em uma máquina virtual da Magalu Cloud utilizando o Dokku. Você aprenderá a configurar o ambiente, instalar o Dokku, gerenciar chaves SSH, configurar o banco de dados PostgreSQL e as variáveis de ambiente necessárias para ter sua aplicação rodando em produção de forma elegante e descomplicada.
Pré-requisitos
- Conta ativa na Magalu Cloud com acesso ao painel de criação de máquinas virtuais.
- Máquina virtual criada (exemplo: BV2-2-10 com Ubuntu 24.04 LTS, 2vCPU, 2GB RAM e 10GB disco local).
- Acesso ao terminal com SSH configurado.
- Git instalado na máquina de desenvolvimento.
- Projeto de exemplo em Python/Django disponível: python-django-example.
Preparando o ambiente
Nesse tutorial vamos utilizar uma máquina virtual na Magalu Cloud. Uma máquina BV2-2-10, 2vCpu, 2GB de ram e 10GB de tamanho de disco local com Ubuntu 24.04 LTS.
A documentação completa de uso na Magalu Cloud pode ser visualizada aqui: Documentação Magalu Cloud. E aqui um vídeo que mostra como criar uma máquina virtual: Como criar uma máquina virtual.
Para exemplificar, vou utilizar um projeto simples em Python, Django e django-rest-framework. Esse projeto provê apenas um endpoint ‘status’ retornando uma resposta json.
Projeto disponível aqui: python-django-example
1. Instalando o Dokku
Após criar a máquina virtual na Magalu Cloud vamos realizar o acesso via SSH pelo terminal. Vou utilizar ssh padrão de terminal, mas é possível utilizar outros clientes ssh como o Putty.
ssh ubuntu@201.23.72.173
No primeiro acesso confirme o questionamento sobre a autenticidade digitando ‘yes’.
ED25519 key fingerprint is SHA256:tbnvJ/WRO/vbi95X7D+M0mHAZq3pIo1wI39VprSnx5Y.This key is not known by any other names.Are you sure you want to continue connecting (yes/no/[fingerprint])?
Conforme a documentação do Dokku, use os seguintes comandos para realizar a instalação:
wget -NP . https://dokku.com/bootstrap.sh
sudo DOKKU_TAG=v0.36.7 bash bootstrap.sh
2. Configurando a chave SSH
Precisamos configurar no Dokku a chave pública para que seja possível executar o deploy.
Na nossa máquina de desenvolvimento, vamos checar se nosso usuário tem uma chave pública:
ls -al ~/.ssh
Caso não tenha nenhum arquivo .pub
, pode gerar com o comando:
ssh-keygen -t rsa
No meu caso eu tenho um id_rsa.pub
. Vou ler o conteúdo, selecioná-lo e copiar:
cat ~/.ssh/id_rsa.pub
Com o conteúdo do arquivo copiado, vamos executar o comando na máquina remota:
echo 'CONTENTS_OF_ID_RSA_PUB_FILE' | sudo dokku ssh-keys:add admin
Aqui, CONTENTS_OF_ID_RSA_PUB_FILE
é igual a chave copiada da máquina de desenvolvimento.
Confirme se a chave foi criada com o comando:
dokku ssh-keys:list
3. Criando a aplicação
No terminal, conectado na nossa máquina virtual:
dokku apps:create python-django-example
Para listar os apps existentes:
dokku apps
Quando criamos um novo aplicativo, por padrão o Dokku não fornece nenhum banco de dados como MySQL ou PostgreSQL. É preciso instalar plugins. Existem plugins oficiais para banco de dados. Nesse exemplo vou utilizar o PostgreSQL.
PostgreSQL
Instale o plugin Postgres:
sudo dokku plugin:install https://github.com/dokku/dokku-postgres.git
Crie o serviço postgres:
dokku postgres:create database
Agora, vamos criar o link entre os serviços de banco de dados e nossa app.
dokku postgres:link database python-django-example
Após esse comando vai ser criado automaticamente a variável DATABASE_URL
em nosso app.
4. Configurando variáveis de ambiente
Temos que configurar algumas variáveis de ambiente em nosso app. Como estamos usando Django, vamos criar SECRET_KEY
e DEBUG
. Acesse a documentação environment-variables para mais informações.
dokku config:set python-django-example DEBUG='False'
dokku config:set python-django-example SECRET_KEY='sua secret_key'
dokku config:set python-django-example ALLOWED_HOSTS='127.0.0.1, .localhost,201.23.72.173'
Observação: Precisamos adicionar o IP do servidor em ALLOWED_HOSTS
, no caso do exemplo o IP é o 201.23.72.173`.
Para listar as variáveis de ambiente de nossa app: dokku config python-django-example
5. Executando o primeiro deploy
Na nossa máquina de desenvolvimento vamos configurar o git para fazer o primeiro deploy. Vamos adicionar nosso repositório remoto Dokku da seguinte forma:
git remote add dokku dokku@[IP-do-servidor]:[nome-app]
No contexto do nosso projeto de exemplo, o comando fica:
git remote add dokku dokku@201.23.72.173:python-django-example
Em seguida, execute o deploy: git push dokku main
6. Criando as tabelas do banco de dados
Nossa aplicação está no ar, mas ainda não tem as tabelas de nossa base de dados. Na máquina virtual execute:
dokku run python-django-example python manage.py migrate
Para criar um super usuário admin do Django:
dokku run python-django-example python manage.py createsuperuser
7. Configurando o domínio
Precisamos configurar o domínio para conseguir acessar o servidor. No nosso exemplo não temos URL então vamos configurar o acesso pelo IP mesmo.
Onde 201.23.72.173
é o ip do servidor.
dokku domains:add python-django-example 201.23.72.173
dokku ps:restart python-django-example
Caso tenha uma URL, por exemplo: django-example.com.br
:
dokku domains:add python-django-example django-example.com.br
dokku config:set python-django-example ALLOWED_HOSTS="django-example.com.br,127.0.0.1, .localhost"
dokku ps:restart python-django-example
8. Acessando a aplicação
Com todas as etapas de deploy, migração do banco de dados e configuração de domínio concluídas, sua aplicação Python/Django está no ar na Magalu Cloud!
Agora, você pode acessar as diferentes partes da sua aplicação diretamente pelo navegador. Utilize o endereço IP do seu servidor (neste exemplo, 201.23.72.173
) para acessar tanto a interface administrativa do Django quanto o endpoint da sua API de exemplo:
Admin Django: http://201.23.72.173/admin
API: http://201.23.72.173/api/status/
9. Considerações finais
Já utilizo o Dokku em projetos pessoais e testes. Sempre funcionou muito bem para pequenas aplicações. Vale a pena estudar mais pois as possibilidades de integrações são grandes.
Qualquer dúvida ou sugestão me envie um email: joseadolfojr@gmail.com
Top comments (1)
Excelente artigo, Junior!