Référence opérateur - trame heymoov-staging.env¶
Note de répartition : ce document a été déplacé depuis heymoov-api vers
heymoov-docs, car il décrit une trame opérateur transverse. Les valeurs
effectives restent hors Git et l'automation exécutable vit dans
heymoov-platform.
Objet¶
Ce document sert de trame opérateur pour préparer le fichier runtime heymoov-staging.
Il ne contient aucun secret versionné.
Les secrets déjà présents sur le serveur sont conservés; lors d'une première
installation ils sont générés hors Git par les bootstraps.
Les credentials PostgreSQL de l'environnement doivent être générés sur le serveur
par le bootstrap storage, puis stockés directement dans les fichiers
/etc/heymoov.
Source de vérité utilisée¶
Source de configuration cible:
- cible de migration:
/etc/heymoov/heymoov-staging.env - runtime applicatif:
/opt/heymoov-staging - topologie non secrète: heymoov-platform/deploy/inventory/heymoov.envs
- surface publique: ligne
stagingde heymoov-runtime-target.md
Important:
heymoov-stagingdoit être distinct deheymoov-dev- la base, Redis, Hydra, Mercure, les clients OAuth2 et les uploads ne doivent pas être partagés avec
dev - les valeurs réelles du runtime ne doivent pas être commitées dans le repository
- le service doit charger ce fichier via
EnvironmentFile= - le répertoire
/opt/heymoov-stagingn'est pas l'emplacement cible des secrets - les releases et migrations doivent utiliser ce fichier serveur comme source de vérité, sans copie locale
.env.heymoov-staging - les credentials applicatifs PostgreSQL sont écrits dans ce fichier par
bootstrap-storage-env - les credentials PostgreSQL du stockage Hydra sont écrits dans
/etc/heymoov/hydra-staging.env - le namespace Redis est écrit dans ce fichier par
bootstrap-storage-env - la configuration daemon Mercure est écrite dans
/etc/heymoov/mercure-staging.envet/etc/heymoov/mercure-staging.Caddyfile
Règles de préparation¶
La préparation de heymoov-staging.env se fait à partir de la trame versionnée:
Le repository ne versionne aucune valeur effective du runtime staging.
Valeurs dérivées de la convention cible heymoov-staging¶
Les variables suivantes sont renseignées par make bootstrap-runtime-env ENV=staging.
Le HOST et le PORT_SLOT sont résolus depuis l'inventaire
heymoov-platform/deploy/inventory/heymoov.envs, qui place
actuellement staging sur ls2i-staging en slot secondary.
APP_NAME=HeyMoovAPP_ENV=stagingHTTP_ADDR=127.0.0.1:9197READYZ_ADDR=127.0.0.1:18082CORS_ALLOWED_ORIGINS_WEB=https://app.staging.heymoov.comSWAGGER_ENABLED=1AUTH_COOKIE_DOMAIN=staging.heymoov.comHYDRA_ADMIN_URL=http://127.0.0.1:4447HYDRA_PUBLIC_URL=https://auth.staging.heymoov.comHYDRA_INTERNAL_URL=http://127.0.0.1:4446HYDRA_OIDC_ISSUER_URL=https://auth.staging.heymoov.comHYDRA_CALLBACK_URL=https://app.staging.heymoov.com/v1/web/auth/callbackHYDRA_MOBILE_CALLBACK_URL=https://app.staging.heymoov.com/v1/mobile/auth/callbackHYDRA_FRONTEND_CALLBACK_URL=https://app.staging.heymoov.com/fr/auth/callbackHYDRA_MOBILE_APP_RETURN_URL=heymoov://mobile/auth/completeMOBILE_WEBAUTHN_RP_ID=auth.staging.heymoov.comMOBILE_WEBAUTHN_RP_DISPLAY_NAME=HeyMoovMOBILE_WEBAUTHN_CHALLENGE_TTL=5mMOBILE_WEBAUTHN_ALLOWED_ORIGINS=https://auth.staging.heymoov.comcomme valeur minimale; l'opérateur devra compléter avec les origins iOS/Android stagingMERCURE_URL=https://mercure.staging.heymoov.comMERCURE_TOPICS_PREFIX=https://app.staging.heymoov.com/MERCURE_COOKIE_DURATION=60FRONTEND_DOCUMENT_URL=https://app.staging.heymoov.com/uploads/FRONTEND_SHOWCASE_URL=https://staging.heymoov.comFRONTEND_APP_URL=https://app.staging.heymoov.comMAX_UPLOAD_FILESIZE=500TURNSTILE_EXPECTED_HOSTNAME=app.staging.heymoov.com
Le slot secondary est lié à la colocalisation actuelle de dev et staging
sur ls2i-staging. Si staging est déplacé seul sur une autre VM, il pourra
utiliser PORT_SLOT=primary et donc les ports standards 9196, 18081 et
4444/4445, avec Mercure sur 2022.
Secrets renseignés par le bootstrap runtime¶
Ces valeurs sont générées sur le serveur par make bootstrap-runtime-env ENV=staging
si elles sont absentes ou encore en placeholder:
WEB_UI_JWT_HS256_KEYSECRET_PEPPERTOKEN_PEPPERHYDRA_ENCRYPTION_KEYSHYDRA_ENCRYPTION_KEY_CURRENTHYDRA_STATE_COOKIE_KEYHYDRA_CLIENT_SECRETSMERCURE_PUBLISHER_JWT_KEYMERCURE_SUBSCRIBER_JWT_KEY
Sans ROTATE_GENERATED_SECRETS=1, les secrets finaux déjà présents sont conservés.
Valeurs renseignées par le bootstrap storage¶
Ces variables sont renseignées par make bootstrap-storage-env ENV=staging.
Le bootstrap storage orchestre les deux briques bas niveau:
bootstrap-postgres-envpour PostgreSQLbootstrap-redis-envpour Redis
Par défaut, le bootstrap retient:
- rôle applicatif:
heymoov_staging_app - base applicative:
heymoov_staging - rôle Hydra:
heymoov_staging_hydra - base Hydra:
heymoov_staging_hydra - Redis:
127.0.0.1:6379, base1carstagingutilise le slotsecondary
Dans /etc/heymoov/heymoov-staging.env, il renseigne:
PGS_HOSTPGS_PORTPGS_LOGINPGS_PASSPGS_DBREDIS_ADDRESS=127.0.0.1:6379REDIS_DATABASE=1
Dans /etc/heymoov/hydra-staging.env, il renseigne:
HYDRA_PGS_HOSTHYDRA_PGS_PORTHYDRA_PGS_LOGINHYDRA_PGS_PASSHYDRA_PGS_DBDSN
Les mots de passe sont générés sur le serveur si les valeurs sont absentes ou encore en placeholder. Ils ne doivent pas être recopiés depuis le poste opérateur.
Valeurs renseignées par le bootstrap Hydra daemon¶
Ces variables sont renseignées par make bootstrap-hydra-env ENV=staging
dans /etc/heymoov/hydra-staging.env.
Avec le slot secondary courant, le bootstrap retient:
- service systemd:
heymoov-staging-hydra.service - public interne Hydra:
127.0.0.1:4446 - admin Hydra:
127.0.0.1:4447 - issuer OIDC:
https://auth.staging.heymoov.com - login Hydra:
https://app.staging.heymoov.com/v1/web/auth/login - consent Hydra:
https://app.staging.heymoov.com/v1/web/auth/consent
Il renseigne ou conserve:
SECRETS_SYSTEMSECRETS_COOKIEURLS_SELF_ISSUERURLS_LOGINURLS_CONSENTSERVE_PUBLIC_HOSTSERVE_PUBLIC_PORTSERVE_ADMIN_HOSTSERVE_ADMIN_PORTOIDC_SUBJECT_IDENTIFIERS_SUPPORTED_TYPESOIDC_SUBJECT_IDENTIFIERS_PAIRWISE_SALTLOG_LEVEL
Ces secrets appartiennent au daemon Hydra. Ils ne doivent pas être recopiés dans le fichier runtime applicatif ni dans le repository.
Valeurs renseignées par le bootstrap Mercure daemon¶
Ces variables sont renseignées par make bootstrap-mercure-env ENV=staging
dans /etc/heymoov/mercure-staging.env.
Avec le slot secondary courant, le bootstrap retient:
- service systemd:
heymoov-staging-mercure.service - Caddyfile:
/etc/heymoov/mercure-staging.Caddyfile - data dir:
/var/lib/heymoov-mercure/staging - URL interne Mercure:
http://127.0.0.1:2023/.well-known/mercure - URL publique Mercure:
https://mercure.staging.heymoov.com - origin CORS/publish:
https://app.staging.heymoov.com
Il renseigne le daemon à partir des secrets déjà présents dans
/etc/heymoov/heymoov-staging.env:
MERCURE_PUBLISHER_JWT_KEYMERCURE_SUBSCRIBER_JWT_KEYMERCURE_PUBLISHER_JWT_ALG=HS256MERCURE_SUBSCRIBER_JWT_ALG=HS256MERCURE_SERVER_NAME=http://127.0.0.1:2023MERCURE_CORS_ORIGINS=https://app.staging.heymoov.comMERCURE_PUBLISH_ORIGINS=https://app.staging.heymoov.com
Les clés publisher/subscriber doivent rester identiques entre le runtime applicatif et le daemon Mercure. Elles ne doivent pas être recopiées dans le repository.
Valeurs à reprendre depuis une source opérateur¶
Ces variables doivent être reprises depuis l'environnement courant ou une source opérateur de confiance, mais ne doivent pas être écrites dans le repository:
MOBILE_WEBAUTHN_ALLOWED_ORIGINSdoit être complétée avec les origins iOS/Android staging si la valeur minimale posée par le bootstrap ne suffit pasEMAIL_NOREPLYEMAIL_CONTACTEMAIL_PROVIDERSIB_API_KEYquandEMAIL_PROVIDER=BREVOTURNSTILE_TIMEOUTTURNSTILE_MAX_CHALLENGE_AGE
Valeurs à figer explicitement pour staging¶
La convention retenue pour heymoov-staging est:
APP_ENV=stagingEMAIL_PROVIDER=BREVOHYDRA_WEB_CLIENT_ID=heymoov-staging-webHYDRA_MOBILE_CLIENT_ID=heymoov-staging-mobile
Convention attendue:
heymoov-staging-webest un client confidentiel enclient_secret_postheymoov-staging-mobileest un client public PKCE entoken_endpoint_auth_method=none- en conséquence,
HYDRA_CLIENT_SECRETSn'a besoin de contenir que le secret du client web
Secrets à fournir ou régénérer hors Git¶
Ces valeurs doivent être reprises depuis l'existant ou régénérées, mais jamais commitées:
SIB_API_KEYsiEMAIL_PROVIDER=BREVOTURNSTILE_SECRET_KEYREDIS_PASSWORDsi défini
Workflow opérateur¶
- Contrôler la topologie résolue avec
make topology-env ENV=staging CHECK=1. - Copier la trame heymoov-platform/deploy/env/heymoov-runtime.env.template vers
/etc/heymoov/heymoov-staging.envsi le fichier n'existe pas déjà, ou lancermake install-env ENV=staging. - Lancer
make bootstrap-storage-env ENV=staging. - Lancer
make bootstrap-runtime-env ENV=staging. - Lancer
make bootstrap-hydra-env ENV=staging. - Lancer
make bootstrap-mercure-env ENV=staging. - Remplir manuellement les valeurs requises restantes.
- Lancer
make bootstrap-hydra-clients ENV=staging. - Poser les permissions
root:heymoov-deployet0640sur/etc/heymoov/heymoov-staging.env,/etc/heymoov/hydra-staging.envet/etc/heymoov/mercure-staging.env. - Vérifier qu'aucun placeholder
__REQUIRED_*__ne reste dans le fichier runtime.
Points de contrôle avant activation¶
Avant toute activation de heymoov-staging, vérifier au minimum:
APP_ENV=staging- les variables
PGS_*etREDIS_*ont été renseignées par le bootstrap storage et pointent vers le stockagestaging heymoov-staging-hydra.serviceest actif et exposé Hydra sur127.0.0.1:4446/4447heymoov-staging-mercure.serviceest actif et exposé Mercure sur127.0.0.1:2023make verify-env ENV=stagingvalide l'issuer livehttps://auth.staging.heymoov.commake verify-env ENV=stagingvalide/healthzMercure et le preflight CORS depuishttps://app.staging.heymoov.comAUTH_COOKIE_DOMAINcorrespond bien au domainestagingFRONTEND_DOCUMENT_URLpointe vers/uploads/sur le vhostapp- les callbacks Hydra pointent tous vers le vhost
app TURNSTILE_EXPECTED_HOSTNAMEcorrespond bien au hostappHYDRA_CLIENT_SECRETSne contient que les secrets des clients confidentiels- le groupe
heymoov-deployest restreint aux opérateurs autorisés à lire les secrets et lancer les migrations