Implantar na Fly.io
Implante o nostrfy na Fly.io em poucos minutos com o modelo pronto — volumes, máquinas, terminação TLS e atualizações simples.
O que vem no repositório
| Arquivo | Finalidade |
|---|---|
Dockerfile | Imagem de contêiner — baixa o binário de release pré-compilado dos assets do GitHub (x86_64 / aarch64, conforme a arquitetura de build) e verifica seu checksum sha256. Nenhuma compilação acontece na Fly |
fly.toml | Configuração do app Fly: serviço HTTP na porta 8080, verificações de saúde, montagem do volume /data, máquinas sempre ativas |
deploy/nostrfy.container.toml | A configuração do relay embutida na imagem em /etc/nostrfy/nostrfy.toml |
Pré-requisitos
- Uma conta Fly.io
- A CLI flyctl (
fly version) - Autenticado:
fly auth login
Implantação em quatro passos
1. Crie o app (sem implantar ainda)
sh
cd /path/to/nostrfy
fly launch --no-deploy --name <your-app-name> --region <region><your-app-name>deve ser único na Fly (faz parte da URL do relay:wss://<your-app-name>.fly.dev)<region>: ex.nrt(Tóquio),fra,iad,sjc— escolha a região mais próxima dos seus usuários- Isso pode sobrescrever os valores
fly.tomldo modelo (nome do app, região) — não há problema
2. Crie o volume persistente
O banco LMDB fica em um volume Fly montado em /data:
sh
fly volumes create data --size 1 --region <region>1 GB é suficiente para começar (o banco cresce com o uso). Você pode redimensionar depois ou criar um volume maior desde o início.
3. Configure o relay
Edite deploy/nostrfy.container.toml antes de implantar:
toml
[relay]
name = "My Relay" # exibido nos clientes via NIP-11
description = "A friendly relay for everyone"
private_key = "..." # obrigatório para grupos NIP-29
public_url = "wss://<your-app-name>.fly.dev" # obrigatório para NIP-42/62/98private_key: gere localmente comnostrfy genkey(com uma config temporária) e cole a chave, ou gere com qualquer ferramenta Nostrpublic_urldeve corresponder ao nome do seu app — sem ela, NIP-42 AUTH, NIP-62 vanish e a API de gerenciamento NIP-86 não funcionarão- Todo o resto pode ficar nos padrões
4. Implantar
sh
fly deployA Fly constrói a imagem (alguns minutos — o download do binário é rápido, a imagem é pequena), cria uma máquina e executa a verificação de saúde contra /health.
Verificar
sh
# linha de log: "relay listening on ws://0.0.0.0:8080"
fly logs
# documento de informações NIP-11 no endereço público
curl https://<your-app-name>.fly.dev/
# aponte seu cliente Nostr para wss://<your-app-name>.fly.devEscala e atualizações
- Atualizar o relay: edite
deploy/nostrfy.container.tomle executefly deploynovamente — a imagem sempre baixa o binário mais recente de release do GitHub, então atualizar é uma simples nova implantação - Fixar uma versão:
docker build --build-arg NOSTRFY_VERSION=v0.1.16 ...ou altere oARGno Dockerfile - Escala: o relay é uma única máquina por padrão.
fly machines clone <id>cria uma segunda máquina; ambas compartilham o volume (volumes Fly suportam várias máquinas na mesma região) - Métricas: a Fly coleta o endpoint
/metrics(veja[metrics]emfly.toml) e mostra no painel Fly em Metrics
Personalizar a configuração
A imagem lê /etc/nostrfy/nostrfy.toml, embutido a partir de deploy/nostrfy.container.toml. Duas formas de personalizar:
- Edite
deploy/nostrfy.container.tomlno repositório e reimplante (mais simples) - Monte sua própria config: construa um fork da imagem que copie seu arquivo de config sobre
/etc/nostrfy/nostrfy.toml
Cada opção está documentada na referência de configuração.
Observações
- Sempre ativo por design:
auto_stop_machines = falseemfly.toml— um relay nunca deve ser parado em períodos ociosos - O contêiner executa o relay em modo foreground (
nostrfy start --foreground); logs vão para stdout/stderr e são coletados pela Fly - O TLS é terminado pela Fly; o relay serve WebSocket puro na porta 8080
- Host de mídia Blossom: para servir também o servidor Blossom, defina
blossom.host = "media.example.com"na config, adicionemedia.example.comcomo nome de host adicional do mesmo app Fly (fly.toml [[services]] http_options.allowed_http_hostnamesoufly hostnames), e adicione o certificado TLS demedia.no painel Fly — o relay separa os hosts internamente (comoserver.api_host)