EspoCRM role: custom image + single data volume + runtime flag setter

• Build a custom image and replace upstream entrypoint with docker-entrypoint-custom.sh (strict fail on flag script).

• Introduce set_flags.php and wire via ESPOCRM_SET_FLAGS_SCRIPT; apply flags at container start; clear cache afterwards.

• Keep exactly one Docker volume (data:/var/www/html/); drop separate custom/extensions mounts.

• Compose: use custom image, add healthchecks & depends_on for daemon/websocket; keep service healthy gating.

• Ansible: deploy scripts, build & up via handlers; patch siteUrl as www-data; run upgrade non-fatal; always run flag setter.

• Vars/Env: add ESPO_INIT_* toggles and ESPOCRM_SET_FLAGS_SCRIPT; refactor variables for scripts & custom image paths.

Conversation context: https://chatgpt.com/share/68dd1992-020c-800f-bcf5-2db60cb4aab2
This commit is contained in:
2025-10-01 14:08:09 +02:00
parent 09a4c243d7
commit e7702948b8
9 changed files with 216 additions and 81 deletions

View File

@@ -0,0 +1,33 @@
<?php
/**
* set_flags.php Ensure EspoCRM runtime flags are set idempotently.
*/
require "/var/www/html/bootstrap.php";
$app = new \Espo\Core\Application();
$c = $app->getContainer();
$cfg = $c->get("config");
$w = $c->get("injectableFactory")->create("\Espo\Core\Utils\Config\ConfigWriter");
// Read from ENV
$flags = [
"maintenanceMode" => in_array(strtolower(getenv("ESPO_INIT_MAINTENANCE_MODE") ?: "false"), ["1","true","yes","on"]),
"cronDisabled" => in_array(strtolower(getenv("ESPO_INIT_CRON_DISABLED") ?: "false"), ["1","true","yes","on"]),
"useCache" => in_array(strtolower(getenv("ESPO_INIT_USE_CACHE") ?: "true"), ["1","true","yes","on"])
];
$changed = false;
foreach ($flags as $k => $v) {
if ($cfg->get($k) !== $v) {
$w->set($k, $v);
$changed = true;
}
}
if ($changed) {
$w->save();
echo "CHANGED\n";
} else {
echo "UNCHANGED\n";
}