mirror of
https://github.com/kevinveenbirkenbach/computer-playbook.git
synced 2025-10-10 10:48:10 +02:00
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:
60
roles/web-app-espocrm/files/docker-entrypoint-custom.sh
Normal file
60
roles/web-app-espocrm/files/docker-entrypoint-custom.sh
Normal file
@@ -0,0 +1,60 @@
|
||||
#!/bin/sh
|
||||
set -euo pipefail
|
||||
|
||||
log() { printf '%s %s\n' "[entrypoint]" "$*" >&2; }
|
||||
|
||||
# --- Simple boolean normalization --------------------------------------------
|
||||
bool_norm () {
|
||||
v="$(printf '%s' "${1:-}" | tr '[:upper:]' '[:lower:]')"
|
||||
case "$v" in
|
||||
1|true|yes|on) echo "true" ;;
|
||||
0|false|no|off|"") echo "false" ;;
|
||||
*) echo "false" ;;
|
||||
esac
|
||||
}
|
||||
|
||||
# Expected ENV (from env.j2)
|
||||
MAINTENANCE="$(bool_norm "${ESPO_INIT_MAINTENANCE_MODE:-false}")"
|
||||
CRON_DISABLED="$(bool_norm "${ESPO_INIT_CRON_DISABLED:-false}")"
|
||||
USE_CACHE="$(bool_norm "${ESPO_INIT_USE_CACHE:-true}")"
|
||||
|
||||
APP_DIR="/var/www/html"
|
||||
SET_FLAGS_SCRIPT="${ESPOCRM_SET_FLAGS_SCRIPT}"
|
||||
|
||||
# --- Wait for bootstrap.php (max 60s, e.g. fresh volume) ----------------------
|
||||
log "Waiting for ${APP_DIR}/bootstrap.php..."
|
||||
for i in $(seq 1 60); do
|
||||
[ -f "${APP_DIR}/bootstrap.php" ] && break
|
||||
sleep 1
|
||||
done
|
||||
if [ ! -f "${APP_DIR}/bootstrap.php" ]; then
|
||||
log "ERROR: bootstrap.php missing after 60s"; exit 1
|
||||
fi
|
||||
|
||||
# --- Apply config flags via set_flags.php ------------------------------------
|
||||
log "Applying runtime flags via set_flags.php..."
|
||||
php "${SET_FLAGS_SCRIPT}"
|
||||
|
||||
# --- Clear cache (safe) -------------------------------------------------------
|
||||
php "${APP_DIR}/clear_cache.php" || true
|
||||
|
||||
# --- Hand off to CMD ----------------------------------------------------------
|
||||
if [ "$#" -gt 0 ]; then
|
||||
log "Exec CMD: $*"
|
||||
exec "$@"
|
||||
fi
|
||||
|
||||
# Try common server commands
|
||||
for cmd in apache2-foreground httpd-foreground php-fpm php-fpm8.3 php-fpm8.2 supervisord; do
|
||||
if command -v "$cmd" >/dev/null 2>&1; then
|
||||
log "Starting: $cmd"
|
||||
case "$cmd" in
|
||||
php-fpm|php-fpm8.*) exec "$cmd" -F ;;
|
||||
supervisord) exec "$cmd" -n ;;
|
||||
*) exec "$cmd" ;;
|
||||
esac
|
||||
fi
|
||||
done
|
||||
|
||||
log "No known server command found; tailing to keep container alive."
|
||||
exec tail -f /dev/null
|
33
roles/web-app-espocrm/files/set_flags.php
Normal file
33
roles/web-app-espocrm/files/set_flags.php
Normal 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";
|
||||
}
|
Reference in New Issue
Block a user