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

@@ -2,8 +2,9 @@
{% set service_name = ESPOCRM_SERVICE %}
{{ service_name }}:
{{ lookup('template', 'roles/docker-container/templates/build.yml.j2') | indent(4) }}
container_name: {{ ESPOCRM_CONTAINER }}
image: "{{ ESPOCRM_IMAGE }}:{{ ESPOCRM_VERSION }}"
image: "{{ ESPOCRM_CUSTOM_IMAGE }}"
init: true
stop_signal: SIGTERM
stop_grace_period: 30s
@@ -14,12 +15,13 @@
{% include 'roles/docker-container/templates/depends_on/dmbs_excl.yml.j2' %}
{% include 'roles/docker-container/templates/networks.yml.j2' %}
volumes:
- data:/var/www/html
- data:/var/www/html/
{% set service_name = 'daemon' %}
{{ service_name }}:
image: "{{ ESPOCRM_IMAGE }}:{{ ESPOCRM_VERSION }}"
image: "{{ ESPOCRM_CUSTOM_IMAGE }}"
container_name: {{ ESPOCRM_CONTAINER }}_{{ service_name }}
pull_policy: never
init: true
stop_signal: SIGTERM
stop_grace_period: 30s
@@ -27,12 +29,22 @@
entrypoint: docker-daemon.sh
{% include 'roles/docker-container/templates/networks.yml.j2' %}
volumes:
- data:/var/www/html
- data:/var/www/html/
depends_on:
{{ ESPOCRM_SERVICE }}:
condition: service_healthy
healthcheck:
test: ["CMD", "php", "-r", "require '/var/www/html/bootstrap.php'; echo 'OK';"]
interval: 30s
timeout: 5s
retries: 5
start_period: 40s
{% set service_name = 'websocket' %}
{{ service_name }}:
image: "{{ ESPOCRM_IMAGE }}:{{ ESPOCRM_VERSION }}"
image: "{{ ESPOCRM_CUSTOM_IMAGE }}"
container_name: {{ ESPOCRM_CONTAINER }}_{{ service_name }}
pull_policy: never
init: true
stop_signal: SIGTERM
stop_grace_period: 30s
@@ -46,12 +58,21 @@
{% include 'roles/docker-container/templates/depends_on/dmbs_excl.yml.j2' %}
{% include 'roles/docker-container/templates/networks.yml.j2' %}
volumes:
- data:/var/www/html
- data:/var/www/html/
ports:
- "127.0.0.1:{{ ports.localhost.websocket[application_id] }}:8080"
depends_on:
{{ ESPOCRM_SERVICE }}:
condition: service_healthy
healthcheck:
test: ["CMD", "sh", "-c", "exec 3<>/dev/tcp/127.0.0.1/8080 && echo 'OK' && exec 3<&- 3>&-"]
interval: 30s
timeout: 5s
retries: 5
start_period: 40s
{% include 'roles/docker-compose/templates/volumes.yml.j2' %}
data:
name: {{ ESPOCRM_VOLUME }}
name: {{ ESPOCRM_DATA_VOLUME }}
{% include 'roles/docker-compose/templates/networks.yml.j2' %}