mirror of
https://github.com/kevinveenbirkenbach/computer-playbook.git
synced 2025-11-08 14:17:57 +00:00
- added new file roles/web-app-shopware/files/framework.yaml defining trusted_proxies and trusted_headers for Symfony - mounted framework.yaml into /var/www/html/config/packages/ in docker-compose - exposed new role vars SHOPWARE_FRAMEWORK_HOST/DOCKER for mounting path - rendered framework.yaml via Ansible copy task with proper permissions - adjusted env.j2 to set TRUSTED_PROXIES and TRUSTED_HOSTS dynamically from domains and networks - added SHOPWARE_DOMAIN var to vars/main.yml - removed inline framework.yaml creation from Dockerfile (now managed via mount) - updated proxy template (html.conf.j2) to include X-Forwarded-Ssl header - improved init.sh permission handling for shared volumes See ChatGPT conversation for implementation details and rationale: https://chatgpt.com/share/690d4fe7-2830-800f-8b6d-b868e7fe0e97
146 lines
4.7 KiB
Django/Jinja
146 lines
4.7 KiB
Django/Jinja
x-environment: &shopware
|
|
image: "{{ SHOPWARE_CUSTOM_IMAGE }}"
|
|
volumes:
|
|
- files:/var/www/html/files
|
|
- theme:/var/www/html/public/theme
|
|
- media:/var/www/html/public/media
|
|
- thumbnail:/var/www/html/public/thumbnail
|
|
- sitemap:/var/www/html/public/sitemap
|
|
- "{{ SHOPWARE_INIT_HOST }}:{{ SHOPWARE_INIT_DOCKER }}:ro"
|
|
- bundles:/var/www/html/public/bundles
|
|
- "{{ SHOPWARE_FRAMEWORK_HOST }}:{{ SHOPWARE_FRAMEWORK_DOCKER }}:ro"
|
|
working_dir: {{ SHOPWARE_ROOT }}
|
|
|
|
{% include 'roles/docker-compose/templates/base.yml.j2' %}
|
|
|
|
# -------------------------
|
|
# INIT (runs once per deployment)
|
|
# -------------------------
|
|
{% set service_name = 'init' %}
|
|
{% set docker_restart_policy = 'no' %}
|
|
{{ service_name }}:
|
|
{% include 'roles/docker-container/templates/base.yml.j2' %}
|
|
{% set docker_restart_policy = DOCKER_RESTART_POLICY %}
|
|
<<: *shopware
|
|
container_name: "{{ SHOPWARE_INIT_CONTAINER }}"
|
|
entrypoint: [ "sh", "{{ SHOPWARE_INIT_DOCKER }}" ]
|
|
user: "0:0"
|
|
|
|
{% include 'roles/docker-container/templates/networks.yml.j2' %}
|
|
|
|
{# -------------------------
|
|
WEB (serves HTTP on 8000)
|
|
------------------------- #}
|
|
{% set service_name = 'web' %}
|
|
{% set container_port = applications | get_app_conf(application_id, 'docker.services.web.port') %}
|
|
{{ service_name }}:
|
|
{% include 'roles/docker-container/templates/base.yml.j2' %}
|
|
<<: *shopware
|
|
{{ lookup('template', 'roles/docker-container/templates/build.yml.j2') | indent(4) }}
|
|
container_name: "{{ SHOPWARE_WEB_CONTAINER }}"
|
|
ports:
|
|
- "127.0.0.1:{{ ports.localhost.http[application_id] }}:{{ container_port }}"
|
|
depends_on:
|
|
init:
|
|
condition: service_completed_successfully
|
|
healthcheck:
|
|
test: ["CMD-SHELL", "wget -q --spider http://127.0.0.1:{{ container_port }}/robots.txt || wget -q --spider http://127.0.0.1:{{ container_port }}/ || exit 1"]
|
|
interval: 30s
|
|
timeout: 5s
|
|
retries: 10
|
|
start_period: 120s
|
|
|
|
|
|
{% include 'roles/docker-container/templates/networks.yml.j2' %}
|
|
|
|
{# -------------------------
|
|
WORKER (async queues)
|
|
------------------------- #}
|
|
{% set service_name = 'worker' %}
|
|
{{ service_name }}:
|
|
{% include 'roles/docker-container/templates/base.yml.j2' %}
|
|
<<: *shopware
|
|
container_name: "{{ SHOPWARE_WORKER_CONTAINER }}"
|
|
pull_policy: never
|
|
entrypoint: {{ SHOPWARE_WORKER_ENTRYPOINT }}
|
|
depends_on:
|
|
init:
|
|
condition: service_completed_successfully
|
|
# @todo Activate for swarm deploy
|
|
# deploy:
|
|
# replicas: {{ SHOPWARE_WORKER_REPLICAS }}
|
|
healthcheck:
|
|
test: ["CMD", "php", "-v"]
|
|
interval: 30s
|
|
timeout: 5s
|
|
retries: 3
|
|
start_period: 10s
|
|
|
|
{% include 'roles/docker-container/templates/networks.yml.j2' %}
|
|
|
|
{# -------------------------
|
|
SCHEDULER (cron-like)
|
|
------------------------- #}
|
|
{% set service_name = 'scheduler' %}
|
|
{{ service_name }}:
|
|
{% include 'roles/docker-container/templates/base.yml.j2' %}
|
|
<<: *shopware
|
|
container_name: "{{ SHOPWARE_SCHED_CONTAINER }}"
|
|
pull_policy: never
|
|
entrypoint: {{ SHOPWARE_SCHED_ENTRYPOINT }}
|
|
depends_on:
|
|
init:
|
|
condition: service_completed_successfully
|
|
healthcheck:
|
|
test: ["CMD", "php", "-v"]
|
|
interval: 30s
|
|
timeout: 5s
|
|
retries: 3
|
|
start_period: 10s
|
|
|
|
|
|
{% include 'roles/docker-container/templates/networks.yml.j2' %}
|
|
|
|
{% if SHOPWARE_OPENSEARCH_ENABLED %}
|
|
{% set service_name = 'opensearch' %}
|
|
{{ service_name }}:
|
|
{% include 'roles/docker-container/templates/base.yml.j2' %}
|
|
image: "{{ SHOPWARE_OPENSEARCH_IMAGE }}:{{ SHOPWARE_OPENSEARCH_VERSION }}"
|
|
container_name: "{{ SHOPWARE_OPENSEARCH_CONTAINER }}"
|
|
environment:
|
|
- discovery.type=single-node
|
|
- plugins.security.disabled=true
|
|
- bootstrap.memory_lock=true
|
|
- OPENSEARCH_JAVA_OPTS=-Xms{{ SHOPWARE_OPENSEARCH_MEM_RESERVATION }} -Xmx{{ SHOPWARE_OPENSEARCH_MEM_RESERVATION }}
|
|
ulimits:
|
|
memlock: { soft: -1, hard: -1 }
|
|
depends_on:
|
|
init:
|
|
condition: service_completed_successfully
|
|
healthcheck:
|
|
test: ["CMD-SHELL", "curl -fsSL http://127.0.0.1:{{ SHOPWARE_OPENSEARCH_PORT }}/_cluster/health || exit 1"]
|
|
interval: 30s
|
|
timeout: 10s
|
|
retries: 5
|
|
start_period: 60s
|
|
{% include 'roles/docker-container/templates/networks.yml.j2' %}
|
|
{% endif %}
|
|
|
|
{% include 'roles/docker-compose/templates/volumes.yml.j2' %}
|
|
data:
|
|
name: {{ SHOPWARE_VOLUME }}
|
|
files:
|
|
name: {{ entity_name }}_files
|
|
theme:
|
|
name: {{ entity_name }}_theme
|
|
media:
|
|
name: {{ entity_name }}_media
|
|
thumbnail:
|
|
name: {{ entity_name }}_thumbnail
|
|
sitemap:
|
|
name: {{ entity_name }}_sitemap
|
|
bundles:
|
|
name: {{ entity_name }}_bundles
|
|
|
|
{% include 'roles/docker-compose/templates/networks.yml.j2' %}
|