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

VariableDéfautCe qu'elle fait
SECRET_KEY_BASE/data/progresswatch/progresswatch.envGé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_URLsqlite3:/data/progresswatch/db.sqlite3Où 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_SSLfalseMettez 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.
PORT3000Le 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_LEVELinfoLes 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.

VariableDéfautCe 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_URLREDIS_URL, db 0Remplace le stockage de progression seul.
SIDEKIQ_REDIS_URLREDIS_URL, db 1Remplace la file seule.
PROGRESS_TTL_SECONDS86400Combien 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_PREFIXpw:progressPré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.

VariableDéfautCe qu'elle fait
MAX_TASK_TITLE_LENGTH500Titre de tâche le plus long conservé, en caractères
MAX_TASK_SOURCE_LENGTH200Source de tâche la plus longue conservée
MAX_SPACE_TITLE_LENGTH200Nom d'espace le plus long conservé
MAX_VALUES_KEY_COUNT50Nombre maximal de clés dans les values d'un rapport
MAX_VALUES_KEY_LENGTH100Clé la plus longue dans values
MAX_VALUES_STRING_LENGTH10000Chaî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.

VariableDéfautCe 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_SUBJECThttps://github.com/progress-watch/progresswatchUne adresse de contact que les services de push peuvent joindre si quelque chose tourne mal. Personne ne la vérifie.
PUSH_CONTENTfullfull met le titre de la tâche dans la notification, minimal envoie « Task completed » et rien d'identifiant.
PUSH_RELAYhttps://progress.watchOù 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

VariableDéfautCe qu'elle fait
RAILS_MAX_THREADS5Threads Puma par processus, et taille du pool de connexions à la base comme à Redis.
WEB_CONCURRENCY0Processus worker de Puma. Zéro fait tourner un seul processus, ce qui est la bonne réponse sur une petite machine.
SIDEKIQ_CONCURRENCY5Threads du processus Sidekiq. Envoyer des notifications est le seul travail qui existe.