Configurar o Progress Watch com variáveis de ambiente

Tudo é uma variável de ambiente. Não há ficheiros de configuração para editar nem credenciais cifradas cozidas na imagem, por isso o mesmo contentor corre num NAS em casa e na nuvem.

Geral

VariávelPredefiniçãoO que faz
SECRET_KEY_BASEA única variável obrigatória em produção. Gere uma com openssl rand -hex 64 e guarde-a.
DATABASE_URLsqlite3:storage/production.sqlite3Onde vivem os espaços e a estrutura das tarefas. O ficheiro predefinido é o que o volume do Docker guarda; aponte para postgresql://… numa instalação na nuvem. O progresso em si nunca é escrito aqui.
FORCE_SSLfalsePonha true quando algo à frente terminar o TLS. Também comanda o assume_ssl, por isso deixá-lo desligado mantém a aplicação utilizável por HTTP simples em vez de reencaminhar para um certificado que não tem.
PORT3000O porto a que o Puma se liga dentro do contentor. O docker-compose.yml publica-o no 7979, porque um serviço que se deixa a correr durante semanas não devia ocupar o porto que os seus servidores de desenvolvimento querem.
RAILS_LOG_LEVELinfoOs registos vão para stdout e mais lado nenhum. Isto é quantos.
RATE_LIMIT_PER_HOURQuantos espaços e tarefas um endereço pode criar por hora. Por definir significa sem limite, que é a resposta certa para um servidor a que só você chega. Reportar progresso nunca é limitado.

Atrás de um proxy, RATE_LIMIT_PER_HOUR vale tanto quanto o endereço que a aplicação vê. O Rails lê o X-Forwarded-For e confia nele vindo de gamas privadas, que é o que um proxy inverso no mesmo anfitrião envia — mas se o cabeçalho não chegar, cada pedido parece um só cliente e o limite tranca toda a gente de uma vez em vez de ninguém.

Redis

O Redis guarda duas coisas sem relação: o progresso atual de cada tarefa, e a fila do Sidekiq. Por omissão são duas bases de dados lógicas de um servidor, e qualquer uma pode passar para a sua própria instância.

VariávelPredefiniçãoO que faz
REDIS_URLredis://localhost:6379O servidor usado para ambos os papéis, dividido em db 0 para o progresso e db 1 para a fila.
PROGRESS_REDIS_URLREDIS_URL, db 0Substitui apenas o armazenamento do progresso.
SIDEKIQ_REDIS_URLREDIS_URL, db 1Substitui apenas a fila.
PROGRESS_TTL_SECONDS86400Quanto tempo uma tarefa mantém o seu progresso sem ser escrita. Cada relatório renova-o, por isso isto é na verdade quanto tempo uma tarefa abandonada fica no ecrã.
PROGRESS_KEY_PREFIXpw:progressPrefixo das chaves do armazenamento do progresso, para poder partilhar uma base de dados com outra coisa.

Notificações

As duas chaves por definir significam que a funcionalidade não existe: sem botão num espaço, e nada guardado sobre ninguém. Não há nada para registar na Apple nem na Google — quem fez o navegador é quem opera o serviço de push. Gere um par uma vez e não o rode; as subscrições existentes estão presas a ele e os navegadores não são avisados.

VariávelPredefiniçãoO que faz
VAPID_PUBLIC_KEYA metade pública do par que assina cada push. Entregue ao navegador quando este subscreve.
VAPID_PRIVATE_KEYA metade privada. Nunca sai do servidor.
VAPID_SUBJECTmailto:hello@progress.watchUm endereço de contacto a que os serviços de push podem chegar se algo correr mal. Ninguém o verifica.
PUSH_CONTENTfullfull põe o título da tarefa na notificação, minimal envia «Task completed» e nada identificável.

Dimensionar os processos

VariávelPredefiniçãoO que faz
RAILS_MAX_THREADS5Threads do Puma por processo, e o tamanho tanto do conjunto de ligações à base de dados como ao Redis.
WEB_CONCURRENCY0Processos worker do Puma. Zero corre um único processo, que é a resposta certa numa máquina pequena.
SIDEKIQ_CONCURRENCY5Threads no processo do Sidekiq. Enviar notificações é o único trabalho que existe.