Deployment¶
Fazer deployment de uma aplicação Lilya é relativamente fácil.
O que é um deployment¶
Fazer deploy de uma aplicação significa pensar nos passos necessários para tornar a aplicação disponível para outros utilizarem fora da sua máquina local e/ou ambiente de desenvolvimento.
Normalmente, fazer deploy de APIs web envolve colocar o seu código em máquinas remotas com todos os requisitos necessários desde memória, CPU, armazenamento até aspetos como a rede. Depende das suas necessidades.
Estratégias¶
Existem muitas formas de fazer deploy de uma aplicação. Cada caso é único e dependerá de muitos factores que às vezes não estão nem relacionados com a própria aplicação. Por exemplo, fundos.
Pode querer poupar dinheiro não indo para uma solução cloud, mas isso também significa mais manutenção pessoal da infraestrutura.
Também pode decidir ir para a cloud e usar um fornecedor externo como AWS, Azure, GCP ou até um que é muito bom e também acessível como render.com ou Heroku. A escolha é realmente sua, pois dependerá das suas necessidades.
O objetivo não é dizer o que fazer, mas dar um exemplo simples no caso de querer usar, por exemplo, docker e a razão é muito simples. Cada caso é único.
Lilya¶
Foi decidido que não iriamos interferir na forma como as pessoas fazem deploys nem sugerir que existe apenas uma maneira de o fazer, mas achámos que seria muito útil ter pelo menos um exemplo apenas para ajudar um pouco e desbloquear algumas potenciais ideias.
Optámos por usar um padrão, docker.
Deploying utilizando Pydantic¶
O Pydantic é fantástico a lidar com a maior parte do trabalho pesado quando se trata de ler variáveis de ambiente e atribuir, mas há alguns truques a ter em mente.
Carregar Listas, dicts e tipos complexos¶
Ao carregar esses elementos nas variáveis de ambiente é imperativo que entenda que o Pydantic os lê como um objecto semelhante ao JSON.
Examplo:
export ALLOWED_HOSTS="https://www.example.com,https://www.foobar.com"
Existem várias formas de fazer isso, mas na documentação do Pydantic (e até uma correção), eles recomendam usar o
parse_env
e tratar a análise lá.
from typing import ClassVar
from dataclasses import dataclass, field
from lilya.conf.global_settings import Settings
@dataclass
class AppSettings(Settings):
allowed_hosts: list[str] | str = field(default=os.environ.get("ALLOWED_HOSTS", []))
def __post_init__(self) -> None:
self.allowed_hosts = self.allowed_hosts.split(",")