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ável | Predefinição | O que faz |
|---|---|---|
SECRET_KEY_BASE | — | A única variável obrigatória em produção. Gere uma com openssl rand -hex 64 e guarde-a. |
DATABASE_URL | sqlite3:storage/production.sqlite3 | Onde 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_SSL | false | Ponha 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. |
PORT | 3000 | O 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_LEVEL | info | Os registos vão para stdout e mais lado nenhum. Isto é quantos. |
RATE_LIMIT_PER_HOUR | — | Quantos 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ável | Predefinição | O que faz |
|---|---|---|
REDIS_URL | redis://localhost:6379 | O servidor usado para ambos os papéis, dividido em db 0 para o progresso e db 1 para a fila. |
PROGRESS_REDIS_URL | REDIS_URL, db 0 | Substitui apenas o armazenamento do progresso. |
SIDEKIQ_REDIS_URL | REDIS_URL, db 1 | Substitui apenas a fila. |
PROGRESS_TTL_SECONDS | 86400 | Quanto 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_PREFIX | pw:progress | Prefixo 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ável | Predefinição | O que faz |
|---|---|---|
VAPID_PUBLIC_KEY | — | A metade pública do par que assina cada push. Entregue ao navegador quando este subscreve. |
VAPID_PRIVATE_KEY | — | A metade privada. Nunca sai do servidor. |
VAPID_SUBJECT | mailto:hello@progress.watch | Um endereço de contacto a que os serviços de push podem chegar se algo correr mal. Ninguém o verifica. |
PUSH_CONTENT | full | full põe o título da tarefa na notificação, minimal envia «Task completed» e nada identificável. |
Dimensionar os processos
| Variável | Predefinição | O que faz |
|---|---|---|
RAILS_MAX_THREADS | 5 | Threads do Puma por processo, e o tamanho tanto do conjunto de ligações à base de dados como ao Redis. |
WEB_CONCURRENCY | 0 | Processos worker do Puma. Zero corre um único processo, que é a resposta certa numa máquina pequena. |
SIDEKIQ_CONCURRENCY | 5 | Threads no processo do Sidekiq. Enviar notificações é o único trabalho que existe. |