Configurer Progress Watch par variables d'environnement
Tout est une variable d'environnement. Il n'y a pas de fichiers de configuration à éditer et pas d'identifiants chiffrés cuits dans l'image, le même conteneur tourne donc sur un NAS domestique et dans le cloud.
Général
| Variable | Défaut | Ce qu'elle fait |
|---|---|---|
SECRET_KEY_BASE | /data/progresswatch/progresswatch.env | Générée au premier démarrage et conservée sur le volume, laissez-la donc non définie. Définissez-la vous-même là où il n'y a pas de volume, ou quand plusieurs conteneurs doivent la partager. |
DATABASE_URL | sqlite3:/data/progresswatch/db.sqlite3 | Où vivent les espaces et la structure des tâches. Le fichier par défaut est ce que contient le volume Docker ; pointez vers postgresql://… pour un déploiement cloud. La progression elle-même n'est jamais écrite ici. |
FORCE_SSL | false | Mettez true quand quelque chose devant termine le TLS. Cela pilote aussi assume_ssl, laisser désactivé garde donc l'application utilisable en HTTP simple au lieu de rediriger vers un certificat que vous n'avez pas. |
PORT | 3000 | Le port sur lequel Puma écoute dans le conteneur. docker-compose.yml le publie sur 7979, parce qu'un service laissé tourner des semaines ne devrait pas occuper le port que veulent vos propres serveurs de développement. |
RAILS_LOG_LEVEL | info | Les logs vont sur stdout et nulle part ailleurs. Ceci en règle la quantité. |
RATE_LIMIT_PER_HOUR | — | Combien d'espaces et de tâches une adresse peut créer par heure. Non défini signifie aucune limite, ce qui est la bonne réponse pour un serveur que vous seul pouvez atteindre. Rapporter la progression n'est jamais limité. |
Derrière un proxy, RATE_LIMIT_PER_HOUR ne vaut que ce que vaut l'adresse que voit l'application. Rails lit X-Forwarded-For et lui fait confiance depuis les plages privées, ce qu'envoie un reverse proxy sur le même hôte — mais si l'en-tête n'arrive pas, chaque requête ressemble à un seul client et la limite bloque tout le monde d'un coup plutôt que personne.
Redis
Redis contient deux choses sans rapport : la progression courante de chaque tâche, et la file Sidekiq. Ce sont par défaut deux bases logiques d'un même serveur, et chacune peut être déplacée sur sa propre instance.
| Variable | Défaut | Ce qu'elle fait |
|---|---|---|
REDIS_URL | — | Le serveur utilisé pour les deux rôles, réparti en db 0 pour la progression et db 1 pour la file. Non définie, l'image lance son propre Redis dans le conteneur et en écrit des instantanés sur le volume. |
PROGRESS_REDIS_URL | REDIS_URL, db 0 | Remplace le stockage de progression seul. |
SIDEKIQ_REDIS_URL | REDIS_URL, db 1 | Remplace la file seule. |
PROGRESS_TTL_SECONDS | 86400 | Combien de temps une tâche garde sa progression sans être écrite. Chaque rapport la rafraîchit, ceci revient donc à la durée pendant laquelle une tâche abandonnée reste à l'écran. |
PROGRESS_KEY_PREFIX | pw:progress | Préfixe de clé du stockage de progression, pour qu'il puisse partager une base avec autre chose. |
Limites
Un texte qui dépasse une limite y est coupé, le dernier caractère devenant des points de suspension. Un objet values avec plus de clés, ou une clé plus longue, est refusé avec 400. Ces valeurs par défaut sont pour votre propre serveur ; progress.watch garde chacune plus basse.
| Variable | Défaut | Ce qu'elle fait |
|---|---|---|
MAX_TASK_TITLE_LENGTH | 500 | Titre de tâche le plus long conservé, en caractères |
MAX_TASK_SOURCE_LENGTH | 200 | Source de tâche la plus longue conservée |
MAX_SPACE_TITLE_LENGTH | 200 | Nom d'espace le plus long conservé |
MAX_VALUES_KEY_COUNT | 50 | Nombre maximal de clés dans les values d'un rapport |
MAX_VALUES_KEY_LENGTH | 100 | Clé la plus longue dans values |
MAX_VALUES_STRING_LENGTH | 10000 | Chaîne la plus longue dans values, ligne de log comprise |
Notifications
Les deux clés vides signifient que la fonctionnalité n'existe pas : pas de bouton sur un espace, et rien de stocké sur qui que ce soit. Il n'y a rien à enregistrer chez Apple ou Google — celui qui a fait le navigateur exploite le service de push. Générez une paire une fois et ne la faites pas tourner ; les abonnements existants y sont liés et les navigateurs n'en sont pas informés.
| Variable | Défaut | Ce qu'elle fait |
|---|---|---|
VAPID_PUBLIC_KEY | — | Moitié publique de la paire qui signe chaque push. Remise au navigateur quand il s'abonne. |
VAPID_PRIVATE_KEY | — | Moitié privée. Ne quitte jamais le serveur. |
VAPID_SUBJECT | https://github.com/progress-watch/progresswatch | Une adresse de contact que les services de push peuvent joindre si quelque chose tourne mal. Personne ne la vérifie. |
PUSH_CONTENT | full | full met le titre de la tâche dans la notification, minimal envoie « Task completed » et rien d'identifiant. |
PUSH_RELAY | https://progress.watch | Où une notification destinée à l'app iOS est envoyée pour être signée et remise à Apple : seul l'éditeur de l'app détient la clé qu'Apple exige, un serveur auto-hébergé ne peut donc pas la livrer lui-même. Le relais voit l'appareil et le texte de la notification, jamais un UUID d'espace, et rien n'est envoyé tant que personne n'a activé les notifications dans l'app. PUSH_CONTENT=minimal en écarte les titres des tâches. false le désactive, et l'app ne propose alors aucune notification sur ce serveur. |
Dimensionnement des processus
| Variable | Défaut | Ce qu'elle fait |
|---|---|---|
RAILS_MAX_THREADS | 5 | Threads Puma par processus, et taille du pool de connexions à la base comme à Redis. |
WEB_CONCURRENCY | 0 | Processus worker de Puma. Zéro fait tourner un seul processus, ce qui est la bonne réponse sur une petite machine. |
SIDEKIQ_CONCURRENCY | 5 | Threads du processus Sidekiq. Envoyer des notifications est le seul travail qui existe. |