0 Votes

Code source wiki de Castopod

Modifié par john le 2026/09/19 18:14

Afficher les derniers auteurs
1 Instance de test de Castopod, plateforme d'hébergement de podcasts, déployée en vue d'éventuelles conférences.
2
3 == Fonctionnalités ==
4
5 * Publication d'épisodes et génération automatique du flux RSS, pour la diffusion dans les annuaires de podcasts.
6 * Intégration au Fédivers (ActivityPub) : les auditeurs suivent, commentent et partagent depuis leur propre compte.
7 * Statistiques d'écoute, sans traceur publicitaire.
8 * Plusieurs podcasts et plusieurs utilisateurs, avec des rôles.
9 * API REST, double authentification (TOTP) optionnelle.
10
11 == Architecture ==
12
13 |=Conteneur|=Rôle
14 |castopod-test|Application (FrankenPHP et Caddy intégrés)
15 |castopod-test-db|Base MariaDB 12.1
16 |castopod-test-redis|Cache Redis, protégé par mot de passe
17
18 La base et Redis sont sur un réseau ##internal## : ils n'ont aucun accès extérieur et ne sont joignables que par l'application.
19
20 == Variables d'environnement ==
21
22 |=Variable|=Rôle
23 |##CASTOPOD_BASEURL##|URL publique de l'instance
24 |##CP_ANALYTICS_SALT##|Sel servant à anonymiser les données d'écoute ; ne plus le changer une fois l'instance en service
25 |##MARIADB_DATABASE##, ##MARIADB_USER##, ##MARIADB_PASSWORD##, ##MARIADB_ROOT_PASSWORD##|Accès à la base
26 |##REDIS_PASSWORD##|Mot de passe de Redis
27 |##TZ##|Fuseau horaire
28
29 == Stack ==
30
31 {{code language="yaml"}}
32 networks:
33 proxy:
34 external: true
35 castopod-test-backend:
36 internal: true
37
38 services:
39 castopod-test-db:
40 image: mariadb:12.1
41 container_name: castopod-test-db
42 restart: unless-stopped
43 environment:
44 - TZ=${TZ}
45 - MYSQL_DATABASE=${MARIADB_DATABASE}
46 - MYSQL_USER=${MARIADB_USER}
47 - MYSQL_PASSWORD=${MARIADB_PASSWORD}
48 - MYSQL_ROOT_PASSWORD=${MARIADB_ROOT_PASSWORD}
49 volumes:
50 - <APPDATA>/castopod-test/mariadb:/var/lib/mysql
51 networks:
52 - castopod-test-backend
53 healthcheck:
54 test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"]
55 start_period: 10s
56 interval: 10s
57 timeout: 5s
58 retries: 3
59
60 castopod-test-redis:
61 image: redis:8.4-alpine
62 container_name: castopod-test-redis
63 restart: unless-stopped
64 command: --requirepass ${REDIS_PASSWORD}
65 volumes:
66 - <APPDATA>/castopod-test/redis:/data
67 networks:
68 - castopod-test-backend
69
70 castopod-test:
71 image: castopod/castopod:1.15.5
72 container_name: castopod-test
73 restart: unless-stopped
74 environment:
75 - TZ=${TZ}
76 - MYSQL_DATABASE=${MARIADB_DATABASE}
77 - MYSQL_USER=${MARIADB_USER}
78 - MYSQL_PASSWORD=${MARIADB_PASSWORD}
79 - CP_BASEURL=${CASTOPOD_BASEURL}
80 - CP_ANALYTICS_SALT=${CP_ANALYTICS_SALT}
81 - CP_DATABASE_HOSTNAME=castopod-test-db
82 - CP_CACHE_HANDLER=redis
83 - CP_REDIS_HOST=castopod-test-redis
84 - CP_REDIS_PASSWORD=${REDIS_PASSWORD}
85 volumes:
86 - <APPDATA>/castopod-test/app-media:/app/public/media
87 networks:
88 - proxy
89 - castopod-test-backend
90 depends_on:
91 castopod-test-db:
92 condition: service_healthy
93 castopod-test-redis:
94 condition: service_started
95 healthcheck:
96 test: ["CMD", "curl", "-f", "http://localhost:8080/health"]
97 interval: 30s
98 timeout: 10s
99 retries: 3
100 start_period: 30s
101 {{/code}}
102
103 * L'image de l'application est épinglée sur une version précise : Watchtower ne la met pas à jour. Changer le tag à la main après lecture des notes de version.
104 * L'application écoute sur le port 8080 du conteneur, relayé par SWAG.
105
106 == Sauvegarde ==
107
108 * Base : dump SQL de ##castopod-test-db## par le script de [[Sauvegarde>>Wiki Batcave John.Infrastructure.Sauvegarde.WebHome]].
109 * Épisodes et illustrations : ##<APPDATA>/castopod-test/app-media##, sauvegardé tel quel.