PeerTube Common — Configuration applicative partagée
PeerTube_Common est la couche applicative partagée de PeerTube. Elle n'est pas
déployée seule ; elle fournit la configuration propre à PeerTube
sur laquelle s'appuie aujourd'hui PeerTube_CloudRun, et sur laquelle s'appuiera une
future variante PeerTube_GKE une fois déployée et vérifiée,
afin que les deux variantes de plateforme se comportent de façon identique là où cela compte. Les utilisateurs finaux
ne configurent jamais cette couche directement — elle ne possède aucun champ de saisie propre dans l'interface
de déploiement — mais comprendre ce qu'elle fournit explique les valeurs par défaut que vous voyez dans la
documentation de la plateforme.
Pour l'infrastructure qui provisionne et exécute réellement PeerTube, consultez PeerTube_CloudRun et le guide de socle App_CloudRun.
1. Ce que fournit cette couche
| Domaine | Fourni par PeerTube_Common | Où cela apparaît |
|---|---|---|
| Secrets cryptographiques | Génère PEERTUBE_SECRET (64 caractères hexadécimaux, 32 octets aléatoires) et PT_INITIAL_ROOT_PASSWORD (24 caractères aléatoires), et les stocke dans Secret Manager | Injectés automatiquement ; récupérables via Secret Manager (voir ci-dessous) |
| Identifiants de stockage d'objets | Crée un compte de service dédié + une paire de clés HMAC, et stocke les deux moitiés dans Secret Manager | PEERTUBE_OBJECT_STORAGE_CREDENTIALS_ACCESS_KEY_ID / _SECRET_ACCESS_KEY |
| Image de conteneur | Build personnalisé basé sur un Dockerfile reposant sur chocobozzz/peertube, avec un ARG de build dédié PEERTUBE_VERSION | Sortie container_image du déploiement de plateforme |
| Moteur de base de données | Impose Cloud SQL for PostgreSQL 15 comme seul moteur pris en charge | §Base de données dans le guide de plateforme |
| Initialisation de la base de données | Définit le job de premier déploiement (db-init) qui crée la base de données et l'utilisateur, accorde les droits et installe pg_trgm/unaccent | Sortie initialization_jobs |
| Stockage d'objets | Déclare les buckets Cloud Storage data (état local, monté via FUSE) et videos (public, compatible S3) | Sortie storage_buckets |
| Paramètres de base | Définit l'environnement PeerTube de référence : liaison réseau, identité publique, initialisation de l'administrateur, inscription, activation du streaming en direct, TLS de la base de données, stockage d'objets S3, SMTP | Comportement de l'application dans le guide de plateforme |
| Vérifications d'état | Fournit la sonde de démarrage TCP par défaut et la sonde de vivacité HTTP ciblant /api/v1/config | §Observabilité dans le guide de plateforme |
2. Secrets cryptographiques dans Secret Manager
Deux secrets sont générés automatiquement et stockés dans Secret Manager :
PEERTUBE_SECRET— 32 octets aléatoires, encodés en hexadécimal (conformément à la recommandationopenssl rand -hex 32de PeerTube). Signe les jetons de session JWT et les codes TOTP. Sa rotation invalide toutes les sessions actives — n'effectuez la rotation que pendant une fenêtre de maintenance.PT_INITIAL_ROOT_PASSWORD— un mot de passe aléatoire de 24 caractères. Lu directement depuisprocess.env(et non via node-config, donc sans préfixePEERTUBE_) par le propreinstaller.tsde PeerTube au premier démarrage, lorsqu'aucun utilisateur n'existe encore, pour définir le mot de passe du compte administrateurrootcréé automatiquement. Sans ce secret, PeerTube génère un mot de passe aléatoire et se contente de le journaliser — irrécupérable si le journal de démarrage n'est pas capturé à temps. Ce secret n'affecte que la création du compte ; il n'a aucun effet sur le mot de passe d'un compte déjà créé.
Deux autres secrets servent au stockage d'objets :
PEERTUBE_OBJECT_STORAGE_CREDENTIALS_ACCESS_KEY_ID/_SECRET_ACCESS_KEY— une paire de clés HMAC liée à un compte de service de stockage dédié, utilisée par le client natif compatible S3 de PeerTube (AWS SDK) sur le point de terminaison XML d'interopérabilité S3 de GCS.
Et, lorsque smtp_host est défini :
PEERTUBE_SMTP_PASSWORD— généré automatiquement, sauf sismtp_passwordest fourni explicitement.
Récupérer les secrets après le déploiement :
# List secrets for this deployment (names include the resource prefix):
gcloud secrets list --project "$PROJECT" --filter="name~app-secret OR name~root-password OR name~s3-access-key OR name~s3-secret-key"
# Read a secret version:
gcloud secrets versions access latest --secret=<secret-name> --project "$PROJECT"
Le mot de passe de la base de données est généré et géré séparément par le socle ;
le nom de son secret est indiqué dans les sorties du déploiement de plateforme
(database_password_secret). Consultez App_Common pour le modèle partagé
de secrets et de Workload Identity.
3. Moteur de base de données et amorçage
PeerTube nécessite PostgreSQL 15 ; le moteur est fixe, et MySQL ou d'autres
moteurs ne sont pas pris en charge. Au premier déploiement, un job ponctuel (db-init)
s'exécute avec postgres:15-alpine et, de manière idempotente :
- Attend que Cloud SQL accepte les connexions,
- Crée (ou met à jour) le rôle de l'application avec le mot de passe généré et le
privilège
CREATEDB, - Crée la base de données de l'application (ou en réattribue la propriété) avec ce rôle comme propriétaire,
- Accorde tous les privilèges sur la base de données et le schéma public,
- Installe les extensions
pg_trgm(recherche textuelle par trigrammes) etunaccent(recherche insensible aux accents) en tant que superutilisateur postgres — toutes deux requises par le guide d'installation en production de PeerTube, et non créées par PeerTube lui-même ; le rôle applicatif non privilégié n'a ainsi jamais besoin des privilègesCREATE EXTENSION, - Signale au sidecar Cloud SQL Auth Proxy de s'arrêter proprement.
Le job peut être réexécuté sans risque. Il n'existe pas de job de migration distinct — PeerTube crée et migre lui-même son schéma Sequelize automatiquement à chaque démarrage du serveur. Inspectez directement la base de données avec :
gcloud sql connect <instance-name> --user=<db-user> --database=<db-name> --project "$PROJECT"
Les noms de l'instance, de la base de données et de l'utilisateur figurent dans les sorties du déploiement de plateforme.
4. Image de conteneur et point d'entrée
L'image personnalisée est construite à partir d'un Dockerfile reposant sur l'image de base officielle
chocobozzz/peertube, avec un ARG de build PEERTUBE_VERSION — maintenu
volontairement séparé de l'ARG de build générique APP_VERSION injecté par le socle
(qui l'emporte lors de la fusion en cas de collision de noms). Lorsque
application_version = "latest", PEERTUBE_VERSION se résout en l'étiquette Docker Hub
maintenue production plutôt qu'en une étiquette latest impossible à résoudre.
Un fin docker-entrypoint.sh s'exécute avant de passer la main au point d'entrée
propre au fournisseur :
- Il remappe les variables d'environnement Redis. Le socle injecte les noms fixes
REDIS_HOST/REDIS_PORT/REDIS_AUTH(aucun mécanisme d'alias par application n'existe pour Redis, contrairement à la base de données) ; le point d'entrée les remappe surPEERTUBE_REDIS_HOSTNAME/_PORT/_AUTH. - Il dérive le nom d'hôte de fédération lorsqu'il n'est pas défini. Lorsque
PEERTUBE_WEBSERVER_HOSTNAMEest vide (la valeur par défaut lorsquehost = ""), le point d'entrée le dérive de l'URL de service prévue par la plateforme (CLOUDRUN_SERVICE_URLsur Cloud Run,GKE_SERVICE_URLsur GKE), en retirant le schéma et tout chemin final, de sorte qu'un nouveau déploiement fédère correctement sans qu'aucune décision de domaine ne soit nécessaire avant le déploiement. - Il attend PostgreSQL. Il interroge
pg_isreadysurPEERTUBE_DB_HOSTNAME/PEERTUBE_DB_PORTavant de passer la main, jusqu'à 60 tentatives espacées de 3 secondes. - Il passe la main au point d'entrée propre au fournisseur
(
support/docker/production/entrypoint.sh, intégré à l'image de base), qui effectue lechownrequis de/dataet/configvers l'utilisateurpeertube, abandonne les privilèges viagosuet exécutenode dist/server. PeerTube crée et migre lui-même son schéma et initialise automatiquement le compte administrateurrootau premier démarrage — aucun job d'initialisation/de migration distinct n'est nécessaire au-delà du provisionnement du rôle, de la base et des extensions pardb-init.sh.
5. Paramètres principaux de l'application
PeerTube_Common établit l'environnement PeerTube de référence afin que
l'application démarre correctement et fédère dès le premier démarrage :
- Liaison réseau —
PEERTUBE_LISTEN_HOSTNAME = "0.0.0.0"(la configuration propre à PeerTube utilise par défaut127.0.0.1, ce qui refuserait tout le trafic externe Cloud Run/GKE) ;PEERTUBE_LISTEN_PORTcorrespond àcontainer_port. - Identité publique —
PEERTUBE_WEBSERVER_HTTPS = "true",PEERTUBE_WEBSERVER_PORT = "443"(l'ingress Cloud Run/GKE termine la véritable connexion TLS publique) ;PEERTUBE_WEBSERVER_HOSTNAMEprovient devar.hostou est dérivé au démarrage (voir le §4). - Confiance envers le proxy —
PEERTUBE_TRUST_PROXY = ["loopback", "linklocal", "uniquelocal"], puisque l'ingress Cloud Run/GKE est le seul chemin vers le conteneur. - Inscription —
PEERTUBE_SIGNUP_ENABLEDprovient deenable_open_registration(par défautfalse). - Streaming en direct —
PEERTUBE_LIVE_ENABLEDprovient deenable_live_streaming(par défautfalse; sans effet pratique sur Cloud Run quelle que soit la valeur — l'ingestion RTMP nécessite un port TCP brut que les services Cloud Run ne peuvent pas exposer). - TLS de la base de données —
PEERTUBE_DB_SSLvaut ici"false"par défaut (correct pour le loopback cloud-sql-proxy de GKE) ;PeerTube_CloudRunle remplace par"true"+ reject-unauthorized"false"via ses propresmodule_env_vars, car le mécanismedb_host_env_var_namede Cloud Run associe toujours l'IP privée brute de Cloud SQL, qui exige le chiffrement (voir PeerTube_CloudRun §3). - Stockage d'objets —
PEERTUBE_OBJECT_STORAGE_ENABLED = "true", point de terminaisonhttps://storage.googleapis.com, adressage de type chemin (path-style), les cinq classes de bucket (web-videos, streaming-playlists, original-video-files, user-exports, captions) pointant vers un seul bucketvideossous des préfixes distincts — à l'image de la dispositiondocker-composede référence de PeerTube.upload_acl.*n'est volontairement pas défini (voir le §6). - SMTP — configuré uniquement lorsque
smtp_hostn'est pas vide ; dans le cas contraire, aucune variable d'environnementPEERTUBE_SMTP_*n'est injectée.
6. Stockage d'objets
PeerTube_Common déclare deux buckets GCS, provisionnés par le socle :
data— privé, monté via GCS FUSE sur/data. Il contient l'état local de PeerTube (hors stockage d'objets) : avatars, miniatures, aperçus, storyboards, torrents, plugins, journaux et tmp/cache. Cet état réside toujours sous/data, que le stockage d'objets soit activé ou non pour le contenu vidéo. Le point d'entrée du fournisseur s'exécute en root avant de basculer vers l'utilisateurpeertubeet effectue lui-même lechownde/dataà chaque démarrage ; aucune option de montageuid/gidparticulière n'est donc requise (contrairement aux applications dont le processus principal s'exécute sans privilèges root du début à la fin).videos— public (public_access_prevention = "inherited", qui remplace la valeur sécurisée par défaut"enforced"du socle), avec CORS activé pourGET/PUT/POST/DELETE/HEADdepuis n'importe quelle origine. La documentation de PeerTube exige que son bucket de stockage d'objets soit public avec CORS configuré, car les fichiers vidéo et de playlists de streaming sont servis directement depuis le bucket aux navigateurs des utilisateurs finaux, sans passer par l'application. Sans le remplacement depublic_access_prevention, l'autorisationgoogle_storage_bucket_iam_memberdu module applicatif pourallUsers:objectVieweréchoue au moment de l'apply avec une erreur412 "public access prevention is enforced"— confirmé en conditions réelles le 2026-07-22.
La configuration des ACL de téléversement (object_storage.upload_acl.public/private) est
volontairement omise — la documentation de PeerTube présente cette omission comme le contournement
requis pour les backends compatibles S3 dépourvus d'une véritable prise en charge des ACL par objet
(leur exemple documenté : Backblaze B2). L'interopérabilité XML S3 de GCS avec l'accès uniforme
au niveau du bucket présente la même limitation ; la lecture publique est donc accordée au
niveau du bucket au lieu de reposer sur des ACL par objet.
gcloud storage buckets list --project "$PROJECT" --filter="name~peertube"
gcloud storage buckets describe gs://<videos-bucket> --format='value(iamConfiguration.publicAccessPrevention)'
7. Comportement des sondes de santé
- Sonde de démarrage — TCP, et non HTTP. Les migrations DB/Redis de PeerTube et
l'initialisation de l'administrateur au premier démarrage (
installer.ts) peuvent prendre plus de temps que ce qu'autorise une fenêtre de disponibilité HTTP classique ; une sonde TCP sur le port d'écoute évite de conditionner la révision à la disponibilité complète de l'application. - Sonde de vivacité — HTTP
GET /api/v1/config. Un point de terminaison public et non authentifié qui répond dès que le serveur HTTP de PeerTube sert réellement des requêtes.
Pour la configuration propre à PeerTube et destinée aux utilisateurs (variables par groupe, sorties, et comment explorer chaque service depuis la Console et la CLI), consultez le guide de plateforme : PeerTube_CloudRun.
Guides associés
- PeerTube sur Google Cloud Run — cette configuration déployée sur Cloud Run.
- PeerTube sur GKE Autopilot — cette configuration déployée sur GKE.
Need RAD to do something it does not do yet? Request it on the roadmap, or vote on what is already there.