Pular para o conteúdo

Levar para produção

O que muda quando o servidor sai da sua máquina.

As três formas de rodar#

FormaFazQuando
Kiln.test(app, verbo, caminho)executa a rota, sem socketteste
Kiln.serve(app, porta)sobe em segundo plano, devolve a portascript, teste de integração
ignite app on 8080sobe e bloqueia até Ctrl-Cprodução

Kiln.serve(app, 0) deixa o sistema escolher uma porta livre e devolve qual foi — numa suíte de testes, porta fixa dá conflito assim que dois testes rodam juntos.

Separar quem monta de quem acende#

dataforge
// app.df — monta e NÃO sobe nada
server loja on 8080:
    route GET "/": 
relay loja

// main.df  lê a porta e acende
adopt app as App
ignite App.loja on porta

Não é enfeite: um teste que importasse o main subiria o servidor e nunca terminaria.

A porta e o endereço#

dataforge
adopt Arcane.OS as OS

porta := int(OS.env("PORT") ?? "8080")
ignite loja on porta at "0.0.0.0"

O padrão é 127.0.0.1, que só aceita conexões da própria máquina. Num contêiner você precisa de 0.0.0.0 — e precisa ter certeza de que há algo entre ele e a internet.

O que colocar na frente#

O Kiln roda sobre o http.server do Python. Ele é sólido para uma aplicação interna, um painel, uma API de time — e não é um servidor de borda. Em produção pública, ponha um nginx ou um Caddy na frente para cuidar de TLS, compressão, arquivos estáticos e clientes lentos.

Uma thread por pedido#

Cada pedido roda numa thread. Duas consequências que valem lembrar:

O que fazer
estado compartilhadoduas threads que escrevem na mesma variável podem perder atualizações — a linguagem não sincroniza threads
banco de dadoso Arcane.Database serializa o acesso, então funciona; uma transação, porém, não é isolada por thread

Para trabalho transacional concorrente, abra uma conexão por thread. Para contadores e caches em memória, lembre que o resultado sob carga pode não ser o que você esperava.

Modo debug#

dataforge
Kiln.config(app, "debug", yes)

Com debug, o corpo do 500 traz a mensagem do erro e o traceback sai no terminal. Deixe desligado em produção: a mensagem de erro descreve a sua implementação para quem estiver olhando.

Antes de publicar#

ItemPor quê
debug desligadoa mensagem de erro descreve o seu código
cookies com seguro: yessem isso, o cookie de sessão viaja em HTTP
Kiln.cors com origem, não ** deixa qualquer site chamar sua API
rate_limit nas rotas de escritao teto contém abuso acidental
limite_corpo ajustadoo padrão de 10 MB pode ser demais
assets apontando só para o público.git e .env moram no mesmo disco
senhas com hash lento e salo Kiln não faz isso por você
sessão no banco, se houver 2+ processosem memória, o visitante desloga
log em arquivo, não só no terminalKiln.logger escreve na saída padrão

Em Docker#

dataforge
FROM estevan5s/dataforge:1.0.0
WORKDIR /app
COPY . .
ENV PORT=8080
EXPOSE 8080
CMD ["run", "src/main.df"]

A imagem oficial já traz a linguagem e a biblioteca inteira; não há pip install nem npm install porque não há dependência nenhuma para instalar.

Saber o que está acontecendo#

dataforge
numeros := Kiln.stats(app)
out numeros["pedidos"], numeros["erros"], numeros["uptime"]

Toda resposta também sai com X-Response-Time, o que dá para medir latência sem instrumentar nada.