NTFY: Enviar alertas dos vossos servidores para o vosso telemóvel gratuitamente.

Olá malta!

Hoje vamos falar sobre uma ferramenta fundamental que irá revolucionar a forma como recebemos notificações no nosso telefone. Sabem, como SMS, só com envio gratuito.
Chama-se NTFY, e não, não é um novo emoji ou uma expressão moderna. É uma abreviatura para “Notify”.

O Que é o NTFY?

O NTFY é uma ferramenta de notificações push que permite receber alertas no telemóvel de uma forma simples e eficaz. Quem é que não gosta de ser lembrado dos compromissos, de receber atualizações de tarefas ou até mesmo notificações da alarmística do nosso homelab? O NTFY faz tudo isso, e mais ainda!

Porquê o NTFY?

Bem, primeiro porque é simples de usar e configurar. Segundo, porque é extremamente versátil e pode ser integrado com várias aplicações e serviços. Tem um cliente nativo para praticamente todas as plataformas, e para as que não tem suporta notificações push através do curl ou equivalente. Terceiro, porque é inerentemente gratuito para 250 mensagens por minuto. E isto bate qualquer plataforma de envio de sms (que só conheço versões pagas).

Instalação em Rocky Linux 8 Via Docker

Agora, a parte prática. Vamos instalar o NTFY numa instancia de Rocky Linux 8 usando como plataforma o Docker.
Nota: o procedimento ja assume terem o container construído, e as configurações de reverse proxy para chegarem da internet ao vosso NTFY server já estão feitas.
Sigam estes passos e, em poucos minutos, estaremos a receber notificações push.

Passo 1: Instalar o Docker

sudo dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo
sudo dnf install docker-ce docker-ce-cli containerd.io
sudo systemctl start docker
sudo systemctl enable docker

Passo 2: Criar o Ficheiro de Configuração do NTFY

Iremos após a instalação, criar um diretório para o NTFY e um ficheiro de configuração. Podem usar o vosso editor de texto preferido, mas para esta demonstração irei utilizar o vim.

mkdir ~/.ntfy
vim ~/.ntfy/config.yml

Dentro do ficheiro, adicione as seguintes linhas:

endpoints:
- name: local
type: exec
cmd: ["ntfy-send"]
- name: phone
type: android_pushbullet
client_id: SEU_CLIENT_ID
client_secret: SEU_CLIENT_SECRET

Podem criar o vosso “SEU_CLIENT_ID” e “SEU_CLIENT_SECRET” transversal entre várias aplicações criando uma conta no Pushbullet (https://www.pushbullet.com/).

Passo 3: Criar o Docker Compose File

Agora, vamos criar um ficheiro docker-compose.yml para simplificar a execução do NTFY via Docker.

version: '3'
services:
ntfy:
image: binwiederhier/ntfy
container_name: ntfy
restart: unless-stopped
environment:
NTFY_BASE_URL: https://ntfy.myawsomesite.net
NTFY_CACHE_FILE: /var/lib/ntfy/cache.db
NTFY_AUTH_FILE: /var/lib/ntfy/auth.db
NTFY_AUTH_DEFAULT_ACCESS: deny-all
NTFY_BEHIND_PROXY: true
NTFY_ATTACHMENT_CACHE_DIR: /var/lib/ntfy/attachments
NTFY_ENABLE_LOGIN: true
volumes:
- /config/ntfy/var:/var/lib/ntfy
- /config/ntfy/etc:/etc/ntfy
ports:
- 8093:80
command: serve

Passo 4: Iniciar o NTFY com Docker Compose

Executem o seguinte comando na mesma pasta onde está o ficheiro: docker-compose up -d

docker-compose up -d

E voilà! O NTFY está agora a correr no seu Rocky Linux 8, pronto para enviar notificações para o nosso telefone.

Nota: Para utilizadores iOS, e por requisitos do firebase, tem de ser usado um servidor de upstream para o envio de mensagens em tempo real. Para tal adicionar as seguintes linhas no ficheiro de configuração docker-compose.yml para que devices iOS recebam a notificção.

NTFY_UPSTREAM_BASE_URL: https://ntfy.sh
NTFY_WEB_PUSH_FILE: /var/lib/ntfy/webpush.db

Passo 5: Configurar acessos e permissões.
Em primeiro lugar aceder ao container de ntfy:
# docker exec -it ntfy sh
Em seguida carregar os utilizadores e permissões. Deixo-vos o meu exemplo:
Para os utilizadores:
~ $ ntfy user add nagios
user nagios added with role user
~ $ ntfy user add graylog
user graylog added with role user
~ $ ntfy user list
user superadmin(role: admin, tier: none)
- read-write access to all topics (admin role)
user graylog (role: user, tier: none)
- no topic-specific permissions
user nagios (role: user, tier: none)
- no topic-specific permissions
user * (role: anonymous, tier: none)
- no topic-specific permissions
- no access to any (other) topics (server config)

Permissões para os utilizadores:

~ $ ntfy access USERNAME TOPIC PERMISSION
permission must be one of: read-write, read-only, write-only, or deny (or the aliases: read, ro, write, wo, none)
~ $ ntfy access nagios teste rw
granted read-write access to topic teste
~ $ user nagios (role: user, tier: none)

Passo 6: Configurar o Cliente.

Finalmente chegamos a parte mais simples para configurar: A configuração do cliente que é relativamente simples e claro exige que o vosso ntfy esteja exposto na internet. Como tal deverão conseguir com um browser chegar pela internet a vossa instancia de Ntfy.

Tudo o que tem que fazer é que o vosso cliente de ntfy, devidamente autenticado, se ligue ao URL do vosso ntfy:
Passo 7: Enviar mensagens & profit.

Se fizeram todos os passos corretamente chegou altura de enviar as vossas notificações. Podem o fazer de duas formas, ou através de comandos push via curl(ou equivalente) ou através do cliente para a vossa plataforma onde estão a executar os comandos.

Para push a sintaxe é algo como:

site="https://ntfy.awsomesite.net/$canal"
auth="nagios:XXXXXXX"
curl -u "$auth" -H "Title: $titulo" -H "Priority: $prioridade" -d "$mensagem" "$site"

Ou através do cliente nativo (que irá requerer configuração):

ntfy publish $canal "This is a message"

A configuração do cliente é simples, e será algo como isto:

default-host: https://ntfy.awsomesite.net

default-user: nagios
default-password: XXXXXX

subscribe:
- topic: nagios

Conclusão

E basicamente é isto. Agora, sempre que quiserem receber notificações push para o vosso telemóvel o NTFY está pronto para o servir.
Desde lembretes para regar as plantas até notificações personalizadas que o vosso homelab está com problemas, esta ferramenta pode realmente tornar a nossa vida digital mais colorida.

Espero que tenham gostado e até a próxima semana. Como sempre, se tiverem alguma duvida ou reparo, sabem onde me encontrar.
Abraço.
Nuno