feat(stacks): migrate ntfy.opytex.org
This commit is contained in:
120
stacks/ntfy.opytex.org/README.md
Normal file
120
stacks/ntfy.opytex.org/README.md
Normal file
@@ -0,0 +1,120 @@
|
||||
# Administration ntfy
|
||||
|
||||
Toutes les commandes s'exécutent depuis le dossier contenant le `docker-compose.yml`.
|
||||
|
||||
---
|
||||
|
||||
## Utilisateurs
|
||||
|
||||
### Lister les utilisateurs
|
||||
```bash
|
||||
docker exec -it ntfy ntfy user list
|
||||
```
|
||||
|
||||
### Ajouter un utilisateur standard
|
||||
```bash
|
||||
docker exec -it ntfy ntfy user add prenom_user
|
||||
# → saisir le mot de passe interactivement
|
||||
```
|
||||
|
||||
### Ajouter un administrateur
|
||||
```bash
|
||||
docker exec -it ntfy ntfy user add --role=admin prenom_user
|
||||
```
|
||||
|
||||
### Changer le mot de passe
|
||||
```bash
|
||||
docker exec -it ntfy ntfy user change-pass prenom_user
|
||||
```
|
||||
|
||||
### Promouvoir un user en admin (ou l'inverse)
|
||||
```bash
|
||||
docker exec -it ntfy ntfy user change-role prenom_user admin
|
||||
docker exec -it ntfy ntfy user change-role prenom_user user
|
||||
```
|
||||
|
||||
### Supprimer un utilisateur
|
||||
```bash
|
||||
docker exec -it ntfy ntfy user del prenom_user
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Droits d'accès (ACL)
|
||||
|
||||
Après avoir créé un utilisateur, il faut lui donner accès aux topics UnifiedPush.
|
||||
|
||||
### Donner accès à un nouvel utilisateur
|
||||
```bash
|
||||
# Synapse peut publier sur les topics "up*" sans compte
|
||||
docker exec -it ntfy ntfy access '*' 'up*' write-only
|
||||
|
||||
# Le user peut lire ses topics "up*"
|
||||
docker exec -it ntfy ntfy access prenom_user 'up*' read-only
|
||||
```
|
||||
|
||||
> Ces deux commandes sont à exécuter pour **chaque nouvel utilisateur**.
|
||||
|
||||
### Voir toutes les ACL configurées
|
||||
```bash
|
||||
docker exec -it ntfy ntfy access
|
||||
```
|
||||
|
||||
### Révoquer les droits d'un utilisateur sur un topic
|
||||
```bash
|
||||
docker exec -it ntfy ntfy access --reset prenom_user 'up*'
|
||||
```
|
||||
|
||||
### Révoquer tous les droits d'un utilisateur
|
||||
```bash
|
||||
docker exec -it ntfy ntfy access --reset prenom_user
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Checklist : ajouter un nouvel utilisateur
|
||||
|
||||
```bash
|
||||
# 1. Créer le compte
|
||||
docker exec -it ntfy ntfy user add prenom_user
|
||||
|
||||
# 2. Donner accès aux topics UnifiedPush
|
||||
docker exec -it ntfy ntfy access '*' 'up*' write-only
|
||||
docker exec -it ntfy ntfy access prenom_user 'up*' read-only
|
||||
|
||||
# 3. Vérifier
|
||||
docker exec -it ntfy ntfy user list
|
||||
docker exec -it ntfy ntfy access
|
||||
```
|
||||
|
||||
Ensuite, communiquer à l'utilisateur :
|
||||
- L'URL du serveur : `https://ntfy.mondomaine.fr`
|
||||
- Son login et mot de passe
|
||||
- Lui demander d'installer l'app ntfy (F-Droid ou Play Store)
|
||||
|
||||
---
|
||||
|
||||
## Dépannage
|
||||
|
||||
### Un utilisateur ne reçoit pas ses notifications
|
||||
|
||||
1. Vérifier que le Matrix gateway répond (voir Supervision)
|
||||
2. Vérifier que Synapse peut joindre ntfy :
|
||||
```bash
|
||||
# Depuis le conteneur Synapse
|
||||
docker exec -it synapse curl https://ntfy.mondomaine.fr/_matrix/push/v1/notify
|
||||
```
|
||||
3. Vérifier les ACL de l'utilisateur :
|
||||
```bash
|
||||
docker exec -it ntfy ntfy access prenom_user
|
||||
```
|
||||
4. Dans Element-X : Paramètres → Notifications → Troubleshoot notifications
|
||||
|
||||
### Les logs montrent des 401 (Unauthorized)
|
||||
L'utilisateur n'a pas configuré ses identifiants dans l'app ntfy,
|
||||
ou les identifiants sont incorrects. Refaire un `change-pass` si besoin.
|
||||
|
||||
### Les logs montrent des 429 (Too Many Requests)
|
||||
Le rate limiting est déclenché. Si c'est un usage légitime,
|
||||
ajuste `visitor-message-daily-limit` dans `config/server.yml`.
|
||||
Si c'est un abus, l'IP source sera dans les logs.
|
||||
25
stacks/ntfy.opytex.org/config/server.yml
Normal file
25
stacks/ntfy.opytex.org/config/server.yml
Normal file
@@ -0,0 +1,25 @@
|
||||
# URL publique du serveur — indispensable pour le Matrix gateway intégré
|
||||
base-url: "https://ntfy.opytex.org"
|
||||
|
||||
# Fichiers de données (volumes Docker)
|
||||
cache-file: "/var/cache/ntfy/cache.db"
|
||||
auth-file: "/var/lib/ntfy/user.db"
|
||||
|
||||
# Accès par défaut : tout refusé sauf config ACL explicite
|
||||
auth-default-access: "deny-all"
|
||||
|
||||
# Les topics UnifiedPush (préfixe "up") doivent être accessibles
|
||||
# en écriture par Synapse (sans compte), mais en lecture protégée.
|
||||
# Géré via les ACL utilisateur (voir marche à suivre).
|
||||
|
||||
# Rate limiting — protège contre les abus
|
||||
visitor-message-daily-limit: 1000
|
||||
visitor-subscription-limit: 30
|
||||
visitor-request-limit-burst: 60
|
||||
visitor-request-limit-replenish: 10s
|
||||
|
||||
# Activer le rate limiting basé sur l'abonné pour les topics UnifiedPush
|
||||
# visitor-subscriber-rate-limiting: true
|
||||
|
||||
# Cache des messages (utile si le téléphone est hors ligne temporairement)
|
||||
cache-duration: 12h
|
||||
45
stacks/ntfy.opytex.org/docker-compose.yml
Normal file
45
stacks/ntfy.opytex.org/docker-compose.yml
Normal file
@@ -0,0 +1,45 @@
|
||||
services:
|
||||
ntfy:
|
||||
image: binwiederhier/ntfy:v2.20
|
||||
container_name: ntfy
|
||||
restart: unless-stopped
|
||||
command: serve
|
||||
security_opt:
|
||||
- no-new-privileges:true
|
||||
env_file:
|
||||
- env_file
|
||||
volumes:
|
||||
- ./config/server.yml:/etc/ntfy/server.yml:ro
|
||||
- ntfy-cache:/var/cache/ntfy
|
||||
- ntfy-auth:/var/lib/ntfy
|
||||
networks:
|
||||
- traefik-proxy
|
||||
labels:
|
||||
- traefik.enable=true
|
||||
- traefik.docker.network=traefik-proxy
|
||||
- traefik.http.routers.ntfy.entrypoints=web-secure
|
||||
- traefik.http.routers.ntfy.rule=Host(`ntfy.opytex.org`)
|
||||
- traefik.http.routers.ntfy.tls.certresolver=letsencrypt
|
||||
- traefik.http.services.ntfy.loadbalancer.server.port=80
|
||||
healthcheck:
|
||||
test:
|
||||
[
|
||||
"CMD-SHELL",
|
||||
"wget -q --tries=1 http://localhost:80/v1/health -O - | grep -Eo '\"healthy\"\\s*:\\s*true' || exit 1",
|
||||
]
|
||||
interval: 60s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
start_period: 40s
|
||||
|
||||
volumes:
|
||||
ntfy-cache:
|
||||
labels:
|
||||
- backup.enable=true
|
||||
ntfy-auth:
|
||||
labels:
|
||||
- backup.enable=true
|
||||
|
||||
networks:
|
||||
traefik-proxy:
|
||||
external: true
|
||||
5
stacks/ntfy.opytex.org/env_file
Normal file
5
stacks/ntfy.opytex.org/env_file
Normal file
@@ -0,0 +1,5 @@
|
||||
# ntfy — configuration non sensible.
|
||||
# Le reste de la configuration est dans config/server.yml, monté en lecture
|
||||
# seule. Aucun secret : les comptes vivent dans le volume ntfy-auth.
|
||||
|
||||
TZ=Europe/Paris
|
||||
Reference in New Issue
Block a user