Aller au contenu principal

OpenEMR sur Google Cloud Run

OpenEMR sur Google Cloud Run

OpenEMR est le système open source de dossiers médicaux électroniques (DME) et de gestion de cabinet le plus largement adopté au monde, utilisé par plus de 100 000 professionnels de santé dans plus de 100 pays. Ce module déploie OpenEMR sur Cloud Run v2 au-dessus du socle App_CloudRun, qui provisionne et gère l'infrastructure Google Cloud partagée.

Ce guide se concentre sur les services cloud qu'utilise OpenEMR et sur la manière de les explorer et de les exploiter depuis la console Google Cloud et la ligne de commande. Pour les mécanismes communs à toutes les applications Cloud Run — identité du service, entrée et équilibrage de charge, mise à l'échelle et concurrence, CI/CD, Cloud Armor, IAP, Binary Authorization, VPC Service Controls, sauvegardes et cycle de vie du déploiement — consultez le guide du socle App_CloudRun plutôt que de les répéter ici.


1. Vue d'ensemble​

OpenEMR s'exécute sous forme de conteneur Apache/PHP 8.3 FPM sur Cloud Run v2. Le déploiement associe un ensemble ciblé de services Google Cloud :

FonctionnalitéService Google CloudRemarques
CalculCloud Run v2Service Apache/PHP, 2 vCPU / 4 GiB par défaut, mise à l'échelle automatique selon les requêtes
Base de donnéesCloud SQL for MySQL 8.0Obligatoire — OpenEMR ne prend pas en charge PostgreSQL
Documents des patientsFilestore (NFS)Répertoire sites/ contenant les documents des patients, le cache de session et l'état de l'application, partagé entre toutes les instances (gen2 requis)
Stockage d'objetsCloud StorageUn bucket de données à usage général
Magasin de sessionsRedisActivé par défaut ; se replie sur l'IP du serveur NFS lorsqu'aucun hôte Redis n'est indiqué
SecretsSecret ManagerMot de passe administrateur (OE_PASS) et mot de passe de la base de données (MYSQL_PASS) générés automatiquement
EntréeURL Cloud Run / Cloud Load BalancingURL run.app par défaut, équilibreur de charge HTTPS externe + domaine personnalisé facultatifs

Valeurs par défaut judicieuses à connaître d'emblée :

  • MySQL 8.0 est obligatoire. Sélectionner PostgreSQL ou NONE empêche le démarrage.
  • NFS est obligatoire et nécessite gen2. Le répertoire sites/ d'OpenEMR — qui contient sqlconf.php, les documents des patients, les caches Twig/Smarty et les fichiers téléversés — doit se trouver sur un volume NFS partagé, monté via l'environnement d'exécution gen2 de Cloud Run.
  • La sonde de démarrage est TCP, pas HTTP. Le trafic de santé de Cloud Run arrive en HTTP simple. La pile Apache/PHP d'OpenEMR peut ne pas encore servir le HTTP pendant la phase d'installation au premier démarrage, si bien qu'une sonde HTTP expirerait. Une sonde TCP vérifie seulement que le port est ouvert et laisse l'installateur se terminer.
  • L'installation au premier démarrage est automatisée et lente. Lors du premier déploiement, deux jobs d'initialisation s'exécutent — nfs-init (préparation des répertoires NFS et restauration facultative d'une sauvegarde) et db-init (création de l'utilisateur et de la base de données MySQL) — après quoi le conteneur lui-même exécute auto_configure.php pour installer le schéma de la base de données. Cela peut prendre de 5 à 20 minutes.
  • Le mot de passe administrateur d'OpenEMR est généré automatiquement et stocké dans Secret Manager ; vous ne le définissez jamais en clair.
  • min_instance_count vaut 1 par défaut. La mise à l'échelle à zéro n'est pas recommandée pour les systèmes de DME cliniques — les démarrages à froid ajoutent une latence que les cliniciens peuvent interpréter comme une panne du système.
  • max_instance_count vaut 1 par défaut. N'augmentez cette valeur qu'après avoir vérifié que le partage des sessions via Redis est opérationnel ; plusieurs instances sans Redis entraînent la perte des sessions PHP.
  • cpu_always_allocated vaut true par défaut. La configuration au premier démarrage d'OpenEMR (vidage du cache Twig, vérification en base de la mise en page de la page de connexion et passe récursive de durcissement des permissions de fichiers) est un travail en arrière-plan qui n'est lié à aucune requête entrante particulière. Avec la facturation à la requête (false), Cloud Run réduit le CPU quasiment à zéro entre les requêtes, si bien que cette configuration ponctuelle peut prendre de nombreuses minutes, voire ne jamais se terminer — confirmé en conditions réelles : la même séquence de démarrage est passée d'un état bloqué à une page de connexion entièrement affichée en moins de 15s une fois cette option définie à true. Ne la repassez à false qu'après avoir vérifié que l'instance a dépassé le premier démarrage.

2. Services Google Cloud et comment les explorer​

Toutes les commandes supposent que PROJECT et REGION sont définis. Les noms des services et des ressources sont indiqués dans les sorties du déploiement.

A. Cloud Run — le service OpenEMR​

OpenEMR s'exécute sous forme de service Cloud Run v2. Chaque déploiement crée une révision immuable ; le trafic peut être réparti entre les révisions pour des déploiements progressifs. Le service nécessite l'environnement d'exécution gen2 pour la prise en charge des volumes NFS.

  • Console : Cloud Run → sélectionnez le service pour voir les révisions, le trafic, les journaux et les métriques.
  • CLI :
    gcloud run services list --project "$PROJECT" --region "$REGION"
    gcloud run services describe <service-name> --project "$PROJECT" --region "$REGION"
    gcloud run revisions list --service <service-name> --project "$PROJECT" --region "$REGION"

Consultez App_CloudRun pour la mise à l'échelle, la concurrence, l'environnement d'exécution et la répartition du trafic.

B. Cloud SQL for MySQL 8.0​

OpenEMR stocke toutes les données cliniques dans une instance Cloud SQL for MySQL 8.0 gérée. Le service s'y connecte de manière privée via le Cloud SQL Auth Proxy sur un socket Unix (sans IP publique). Lors du premier déploiement, le job Cloud Run db-init crée la base de données applicative et l'utilisateur ; le job nfs-init prépare le répertoire NFS sites/.

  • Console : SQL → sélectionnez l'instance pour voir les connexions, les sauvegardes, les flags et les métriques.
  • CLI :
    gcloud sql instances list --project "$PROJECT"
    gcloud sql instances describe <instance-name> --project "$PROJECT"
    gcloud sql connect <instance-name> --user=<db-user> --project "$PROJECT"

Le nom de l'instance, la base de données, l'utilisateur et le secret du mot de passe figurent dans les sorties. Consultez App_CloudRun pour le modèle de connexion, les sauvegardes et la rotation du mot de passe.

C. Filestore (NFS) et Cloud Storage​

Le répertoire sites/ d'OpenEMR est écrit sur un partage Filestore (NFS) monté dans le service sur /var/www/localhost/htdocs/openemr/sites. Ce répertoire contient sqlconf.php (qui signale la fin de l'installation), les documents téléversés pour les patients et les caches de templates Twig/Smarty. Toutes les instances doivent partager le même montage NFS. Un bucket Cloud Storage à usage général est également provisionné.

  • Console : Filestore → Instances ; Cloud Storage → Buckets.
  • CLI :
    gcloud filestore instances list --project "$PROJECT"
    gcloud storage buckets list --project "$PROJECT"
    # Inspect the nfs-init job execution logs:
    gcloud run jobs executions list --job nfs-init --project "$PROJECT" --region "$REGION"

Consultez App_CloudRun pour le montage NFS, GCS Fuse et CMEK.

D. Magasin de sessions Redis​

Redis sert de magasin de sessions PHP à OpenEMR. Lorsque redis_host est laissé vide et que NFS est activé, l'instance Redis colocalisée sur le serveur NFS est utilisée automatiquement. Dans les déploiements à plusieurs instances, un magasin de sessions partagé est nécessaire pour éviter la perte des sessions.

  • Console : Memorystore → Redis (si vous utilisez une instance Memorystore gérée).
  • CLI :
    redis-cli -h <redis-host> ping
    redis-cli -h <redis-host> info keyspace

E. Secret Manager​

Le mot de passe administrateur d'OpenEMR (OE_PASS) et le mot de passe de la base de données MySQL (MYSQL_PASS) sont stockés dans Secret Manager et injectés dans le service à l'exécution. Ils n'apparaissent jamais en clair dans la configuration.

  • Console : Security → Secret Manager.
  • CLI :
    gcloud secrets list --project "$PROJECT"
    # Retrieve the admin password to log in for the first time:
    gcloud secrets versions access latest \
    --secret=<admin_password_secret_id> --project "$PROJECT"

L'ID du secret du mot de passe administrateur est exposé par la sortie admin_password_secret_id. Consultez App_CloudRun pour les détails d'injection et de rotation.

F. Réseau et entrée​

Le service est joignable par défaut via son URL run.app. Un équilibreur de charge HTTPS externe avec un domaine personnalisé, Cloud CDN et Cloud Armor peut être ajouté par-dessus. Les paramètres d'entrée et la sortie VPC contrôlent le trafic à destination et en provenance du service.

  • Console : Cloud Run (URL du service) ; Network services → Load balancing.
  • CLI :
    gcloud run services describe <service-name> --region "$REGION" \
    --format='value(status.url)'
    gcloud compute addresses list --project "$PROJECT"

Consultez App_CloudRun.

G. Cloud Logging et Monitoring​

Les journaux des conteneurs sont envoyés vers Cloud Logging ; les métriques Cloud Run et Cloud SQL sont envoyées vers Cloud Monitoring, avec des tests de disponibilité et des règles d'alerte facultatifs.

  • Console : Logging → Logs Explorer ; Monitoring → Dashboards / Alerting.
  • CLI :
    gcloud run services logs read <service-name> \
    --project "$PROJECT" --region "$REGION" --limit 50

3. Comportement de l'application OpenEMR​

  • Deux jobs d'initialisation s'exécutent à chaque déploiement.

    JobRôleImage
    nfs-initPrépare l'arborescence du répertoire NFS sites/, attribue la propriété à l'UID 1000 (Apache) et restaure éventuellement une sauvegarde lorsque backup_uri est définigoogle-cloud-cli:alpine
    db-initCrée la base de données MySQL et l'utilisateur applicatifmysql:8.0-debian

    Inspectez les jobs et leurs exécutions :

    gcloud run jobs list --project "$PROJECT" --region "$REGION"
    gcloud run jobs executions list --job nfs-init --project "$PROJECT" --region "$REGION"
    gcloud run jobs executions list --job db-init --project "$PROJECT" --region "$REGION"
  • L'installation du schéma au premier démarrage prend de 5 à 20 minutes. Une fois les jobs d'initialisation terminés, le conteneur du service exécute auto_configure.php pour installer le schéma de la base de données OpenEMR et créer le compte administrateur. Pendant cette phase, un serveur web PHP intégré temporaire renvoie HTTP 200 sur le chemin de la sonde de démarrage, ce qui empêche l'instance d'être arrêtée pendant que l'installateur s'exécute.

  • La sonde de démarrage est TCP. La sonde de démarrage Cloud Run est par défaut une sonde TCP sur le port 80 afin d'éviter de faux échecs pendant la phase d'installation au premier démarrage, lorsque Apache/PHP ne sert peut-être pas encore de réponses HTTP.

  • Mises à niveau tenant compte de la version. Lors des déploiements suivants, le script de démarrage compare la version de l'image à la version stockée sur NFS et exécute automatiquement les scripts de mise à niveau appropriés (fsupgrade-N.sh).

  • Connexion administrateur. Le nom d'utilisateur initial de l'administrateur est admin. Le mot de passe est généré automatiquement et stocké dans Secret Manager — récupérez-le avec :

    gcloud secrets versions access latest \
    --secret=<admin_password_secret_id> --project "$PROJECT"

    Si le compte administrateur est verrouillé après des tentatives de connexion échouées, utilisez l'utilitaire /root/unlock_admin.sh <new_password> depuis l'intérieur du conteneur en cours d'exécution.

  • Considérations HIPAA. OpenEMR stocke des informations de santé protégées (PHI). Pour les déploiements soumis à HIPAA, activez enable_iap ou enable_cloud_armor pour restreindre l'accès, définissez enable_audit_logging = true et portez backup_retention_days à au moins 90.


4. Variables de configuration​

Les variables sont regroupées exactement comme elles apparaissent sur la plateforme de déploiement. Seuls les paramètres propres à OpenEMR ou notables pour lui sont listés ; toutes les autres entrées sont héritées d'App_CloudRun avec leur comportement standard.

Groupe 1 — Projet et identité​

VariableValeur par défautDescription
project_id(obligatoire)Projet Google Cloud cible.
regionus-central1Région du service et des ressources régionales.

Groupe 2 — Environnement de déploiement​

VariableValeur par défautDescription
tenant_iddemoSuffixe court qui rend les noms de ressources uniques par environnement.
support_users[]Adresses e-mail auxquelles sont accordés l'accès au projet et les alertes de surveillance.
resource_labels{}Libellés appliqués à toutes les ressources.

Groupe 3 — Identité de l'application​

VariableValeur par défautDescription
application_nameopenemrNom de base des ressources. Ne pas modifier après le premier déploiement.
display_nameOpenEMRNom convivial affiché dans la console.
description(définie)Description du service.
application_version7.0.4Tag de version de l'image OpenEMR ; incrémentez-le pour déployer une nouvelle version.

Groupe 4 — Exécution et mise à l'échelle​

VariableValeur par défautDescription
deploy_applicationtrueDéfinissez false pour ne provisionner que l'infrastructure sans déployer le conteneur.
cpu_limit2000mCPU par instance ; 2 vCPU recommandés pour des charges de travail cliniques concurrentes.
memory_limit4GiMémoire par instance ; 4 GiB recommandés. En dessous de 2 GiB, des arrêts OOM se produisent sous charge clinique.
cpu_always_allocatedtrueAlloue le CPU en permanence (facturation à l'instance), et pas seulement pendant les requêtes. La configuration en arrière-plan au premier démarrage d'OpenEMR (vidage du cache Twig, vérification de la mise en page en base, passe de durcissement des permissions) nécessite un CPU continu ; avec la facturation à la requête (false), le CPU est réduit quasiment à zéro et la configuration peut rester bloquée pendant de nombreuses minutes, voire ne jamais se terminer.
min_instance_count1Nombre minimal d'instances. Conservez ≥ 1 pour éviter les délais de démarrage à froid pour les utilisateurs cliniques.
max_instance_count1N'augmentez cette valeur qu'après avoir vérifié que le partage des sessions via Redis est opérationnel.
container_port80OpenEMR/Apache écoute sur le port 80.
execution_environmentgen2Doit rester gen2 pour la prise en charge des volumes NFS.
timeout_seconds300Durée maximale d'une requête. À augmenter pour la génération de rapports ou le téléversement de fichiers volumineux.
traffic_split[]Répartit le trafic entre les révisions pour des déploiements progressifs.
max_revisions_to_retain7Nombre d'anciennes révisions à conserver.

Groupe 5 — Contrôle d'accès et d'entrée​

VariableValeur par défautDescription
ingress_settingsallRéseaux autorisés à atteindre le service. Utilisez internal-and-cloud-load-balancing pour les déploiements HIPAA placés derrière un équilibreur de charge.
vpc_egress_settingPRIVATE_RANGES_ONLYManière dont le trafic sortant est routé via le connecteur VPC.
enable_iapfalseExige une connexion Google via Identity-Aware Proxy. Recommandé pour un accès réservé au personnel clinique.
iap_authorized_users / iap_authorized_groups[]Personnes autorisées à accéder via IAP.

Groupe 6 — Variables d'environnement et secrets​

VariableValeur par défautDescription
environment_variables{}Paramètres non secrets supplémentaires. Les valeurs principales MYSQL_* et OE_* sont définies automatiquement. Ajouts courants : PHP_MEMORY_LIMIT, SMTP_HOST, SMTP_PORT.
secret_environment_variables{}Table variable d'environnement → nom d'un secret Secret Manager. À utiliser pour les valeurs sensibles comme les identifiants SMTP.
secret_propagation_delay / secret_rotation_period(définies)Attente de réplication / cadence de rotation.

Groupe 7 — Sauvegarde et restauration​

VariableValeur par défautDescription
backup_schedule0 2 * * *Cron des sauvegardes automatiques (UTC). Ne pas désactiver pour les déploiements soumis à HIPAA.
backup_retention_days7Rétention ; à porter à 30–90 pour la production/la conformité.
enable_backup_importfalseRestaure une sauvegarde lors du déploiement.
backup_sourcegcsSource de l'import : gcs ou gdrive.
backup_uri""URI GCS (gs://bucket/path) ou ID de fichier Google Drive. Lorsqu'il est défini, il est injecté dans nfs-init sous la forme BACKUP_FILEID.
backup_formatsqlFormat du fichier de sauvegarde : sql, tar, gz, tgz, tar.gz ou zip.

Groupe 8 — CI/CD et Binary Authorization​

Intégration Cloud Build / Cloud Deploy standard d'App_CloudRun — voir App_CloudRun. Entrées clés : enable_cicd_trigger, github_repository_url, github_token, enable_cloud_deploy, enable_binary_authorization, binauthz_evaluation_mode.

Groupe 9 — Instance NFS et SQL personnalisé​

VariableValeur par défautDescription
nfs_instance_name / nfs_instance_base_name(définies)Instance NFS existante / nom de base pour une instance inline.
enable_custom_sql_scripts / custom_sql_scripts_bucket / custom_sql_scripts_path / custom_sql_scripts_use_rootdésactivéExécute du SQL depuis un bucket GCS après le provisionnement.

Groupe 10 — Domaine, CDN, Cloud Armor et rétention des images​

VariableValeur par défautDescription
enable_cloud_armorfalseProvisionne un équilibreur de charge HTTPS global + le WAF Cloud Armor.
application_domains[]Noms d'hôte personnalisés pour l'équilibreur de charge HTTPS.
enable_cdnfalseActive Cloud CDN sur le backend de l'équilibreur de charge.
admin_ip_ranges[]Plages CIDR autorisées pour l'accès privilégié.
max_images_to_retain / delete_untagged_images / image_retention_days(définies)Règle de nettoyage d'Artifact Registry.

Groupe 11 — Stockage et système de fichiers​

VariableValeur par défautDescription
enable_nfstrueDoit rester true. OpenEMR a besoin de NFS pour le répertoire sites/.
nfs_mount_path/var/www/localhost/htdocs/openemr/sitesChemin de montage. Doit correspondre au répertoire sites d'OpenEMR.
create_cloud_storage / storage_buckets / gcs_volumes(définies)Bucket de données / buckets supplémentaires / montages GCS Fuse.
manage_storage_kms_iam / enable_artifact_registry_cmekfalseOptions CMEK.

Groupe 12 — Backend de base de données​

VariableValeur par défautDescription
database_typeMYSQL_8_0Fixe — ne pas modifier. OpenEMR nécessite MySQL.
db_nameopenemrNom de la base de données. Immuable après le premier déploiement.
db_useropenemrUtilisateur applicatif. Immuable après le premier déploiement.
database_password_length32Longueur du mot de passe généré (16–64).
enable_auto_password_rotation / rotation_propagation_delay_secdésactivéRotation du mot de passe de la base de données.
db_host_env_var_name / db_name_env_var_name / db_user_env_var_name / db_port_env_var_name / service_url_env_var_name""Noms de variables d'environnement supplémentaires sous lesquels les informations de connexion sont injectées.

Groupe 13 — Jobs et tâches planifiées​

VariableValeur par défautDescription
initialization_jobs[]Laissez vide pour utiliser la séquence intégrée nfs-init / db-init.
cron_jobs[]Jobs Cloud Run récurrents appelés selon une planification.

Groupe 14 — Observabilité et santé​

VariableValeur par défautDescription
startup_probeTCP sur le port 80, 12 échecs × 10sSonde de démarrage TCP. Évite les échecs de sonde HTTP pendant la phase d'installation au premier démarrage.
liveness_probeHTTP GET /interface/login/login.php, 10 échecs × 30sLa page de connexion ne renvoie HTTP 200 que lorsque toute la pile est opérationnelle.
uptime_check_configdésactivéTest de disponibilité Cloud Monitoring. Activez-le explicitement une fois le service joignable.
alert_policies[]Règles d'alerte sur les métriques.

Groupe 21 — Magasin de sessions Redis​

VariableValeur par défautDescription
enable_redistrueUtilise Redis pour le stockage des sessions PHP.
redis_host""Laissez vide pour utiliser l'IP du serveur NFS ; définissez-le explicitement pour une instance Memorystore dédiée.
redis_port6379Port Redis.
redis_auth""Mot de passe d'authentification Redis facultatif (sensible).

Groupe 22 — VPC Service Controls et journalisation d'audit​

VariableValeur par défautDescription
enable_vpc_scfalseApplique un périmètre VPC-SC. Nécessite que organization_id soit défini explicitement. Recommandé pour les environnements HIPAA.
vpc_cidr_ranges / vpc_sc_dry_run(définies)Plages CIDR du niveau d'accès / mode simulation (dry-run).
enable_audit_loggingfalseJournaux Cloud Audit Logs détaillés (DATA_READ, DATA_WRITE). Recommandé pour la conformité HIPAA.

5. Sorties​

Renvoyées à l'issue d'un déploiement réussi — le moyen le plus rapide de localiser et d'explorer les ressources en cours d'exécution.

SortieDescription
service_nameNom du service Cloud Run.
service_urlURL run.app par défaut du service.
service_locationRégion dans laquelle s'exécute le service.
stage_servicesURL des services propres à chaque étape (Cloud Deploy).
load_balancer_ip / load_balancer_urlIP / URL de l'équilibreur de charge HTTPS externe (lorsqu'il est activé).
admin_password_secret_idID du secret Secret Manager contenant le mot de passe administrateur d'OpenEMR (OE_PASS).
database_instance_nameNom de l'instance Cloud SQL.
database_name / database_userNom / utilisateur de la base de données applicative.
database_password_secretSecret Secret Manager contenant le mot de passe de la base de données (MYSQL_PASS).
database_host / database_portPoint de terminaison / port de la base de données.
nfs_server_ipIP interne du serveur NFS (sensible).
nfs_instance_tagsTags réseau de l'instance NFS.
nfs_mount_pathChemin de montage NFS dans le conteneur.
nfs_share_pathChemin du partage NFS sur le serveur.
nfs_setup_jobNom du job de configuration NFS.
storage_bucketsBuckets Cloud Storage créés.
network_name / network_exists / regionsRéseau VPC, présence, régions.
container_image / container_registryImage déployée et dépôt Artifact Registry.
monitoring_enabled / monitoring_notification_channels / uptime_check_namesÉtat de la surveillance, canaux, tests de disponibilité.
initialization_jobsNoms des jobs de configuration.
deployment_id / tenant_id / resource_prefixIdentifiants de nommage.
project_id / project_numberIdentifiants du projet.
cicd_enabled / github_repository_url / github_repository_owner / github_repository_name / cicd_configurationÉtat et détails du CI/CD.
artifact_registry_repository / cloudbuild_trigger_name / cloudbuild_trigger_idRegistre et déclencheur de build.
vpc_sc_enabled / vpc_sc_perimeter_name / vpc_sc_dry_run_modeÉtat de VPC-SC.
audit_logging_enabled / artifact_registry_cmek_enabledÉtat des journaux d'audit et de CMEK.

6. Pièges de configuration et valeurs par défaut judicieuses​

Risque : Critique (perte de données / panne / sécurité) — Élevé (service dégradé) — Moyen (coût ou dégradation partielle) — Faible (mineur).

ParamètreValeur judicieuseRisqueConséquence en cas d'erreur
enable_nfstrueCritiqueOpenEMR ne peut pas fonctionner sans NFS. Le répertoire sites/, sqlconf.php et les documents des patients résident tous sur NFS. Le désactiver provoque un échec immédiat au démarrage.
nfs_mount_path/var/www/localhost/htdocs/openemr/sitesCritiqueDoit correspondre au chemin du répertoire sites d'OpenEMR. En cas de non-correspondance, nfs-init prépare le mauvais emplacement et le conteneur ne trouve jamais de sqlconf.php configuré.
execution_environmentgen2Critiquegen1 ne prend pas en charge les montages NFS ; le service ne démarre pas.
database_typeMYSQL_8_0CritiqueOpenEMR nécessite MySQL ; PostgreSQL ou NONE casse l'installateur et tous les appels PHP à la base de données.
db_name / db_userdéfinis une seule foisCritiqueImmuables après le premier déploiement ; les renommer recrée la base de données/l'utilisateur et détruit toutes les données des patients.
enable_backup_importfalse sauf en cas de restaurationCritiqueL'activer sans backup_uri valide fait échouer le job d'import et peut corrompre le répertoire sites sur NFS.
backup_schedule0 2 * * *CritiqueDésactiver les sauvegardes d'un DME contenant des PHI constitue une violation de la conformité HIPAA.
startup_probeTCP (par défaut)ÉlevéUne sonde HTTP échoue pendant la phase d'installation au premier démarrage, lorsque Apache n'a pas encore complètement démarré, ce qui conduit Cloud Run à redémarrer le conteneur avant la fin de la configuration.
enable_redistrueÉlevéPlusieurs instances avec des magasins de sessions PHP isolés entraînent des pertes de session et des échecs de connexion pour les utilisateurs cliniques.
redis_host"" (NFS) ou expliciteÉlevéUn hôte Redis injoignable provoque des échecs de session PHP et empêche toute connexion.
memory_limit≥ 4GiÉlevéLa génération de PDF et les rapports de facturation d'OpenEMR sont gourmands en mémoire. En dessous de 2 GiB, des arrêts OOM se produisent en cours de requête.
min_instance_count1ÉlevéLa mise à l'échelle à zéro ajoute une latence de démarrage à froid et expose à des accès cliniques manqués.
cpu_always_allocatedtrueÉlevéLa configuration au premier démarrage d'OpenEMR (vidage du cache Twig, vérification de la mise en page en base, passe de durcissement des permissions) est un travail en arrière-plan, non lié à une requête. Avec la facturation à la requête (false), le CPU est réduit quasiment à zéro entre les requêtes, si bien que le premier démarrage peut prendre de nombreuses minutes, voire ne jamais se terminer — confirmé en conditions réelles : un démarrage identique est passé d'un état bloqué à une page de connexion affichée en <15s une fois l'option définie à true.
backup_retention_days7 (à augmenter en production)MoyenLes environnements soumis à HIPAA doivent conserver au moins 90 jours.
enable_iap / enable_cloud_armorà activer dans le secteur de la santéMoyenSans ces contrôles, l'interface d'administration d'OpenEMR et les dossiers des patients sont joignables publiquement.
enable_audit_loggingtrue pour HIPAAMoyenHIPAA exige la journalisation des accès aux PHI.

Pour le comportement du socle évoqué tout au long de cette page — identité du service, mise à l'échelle et concurrence, entrée et équilibrage de charge, CI/CD, Cloud Armor, IAP, Binary Authorization, VPC-SC, sauvegardes et mise en miroir des images — consultez App_CloudRun. La configuration applicative propre à OpenEMR partagée avec la variante GKE est décrite dans OpenEMR_Common.

Need RAD to do something it does not do yet? Request it on the roadmap, or vote on what is already there.