Sync runner checkout / sync (push) Successful in 7s
## Summary - Closes #41. - Stripe live endpoint `we_1TzDNHDV0RPXOyxGCOftavHV` posts to `https://hesychia.ai/api/finance/webhooks/stripe/`. On 2026-10-09 the `chat_web_app` prod vhost returned HTTP 405 fifteen times (`request_time` 0.000, User-Agent Stripe). `pending_webhooks` stayed 1. - `try_files` falls through to `index.html`, and nginx rejects POST on that static file. The Django handler on `chat_backend` never sees the body. - `chat_web_app` now proxies `/api/finance/webhooks/` to the same-env `chat_backend` port (`8003` prod, `8013` beta) via `host.docker.internal`. `Host` is the backend public hostname so `ALLOWED_HOSTS` matches. Other static apps are unchanged. ## Test plan - [ ] `ansible-playbook playbooks/site.yml --syntax-check` (or the web-static portion) renders without error - [ ] Redeploy web-static (`scripts/deploy.sh` path that runs the web-static role) so `nginx.conf` reloads - [ ] `curl -i -X POST http://127.0.0.1:8082/api/finance/webhooks/stripe/` from an app host reaches Django (400 invalid signature or 503 missing secret), not 405 - [ ] Stripe Dashboard: resend a failed event to the Hesychia.ai endpoint and confirm 2xx Reviewed-on: #42
21 lines
592 B
Django/Jinja
21 lines
592 B
Django/Jinja
# Managed by Ansible (roles/web-static). Do not edit by hand.
|
|
services:
|
|
web-static:
|
|
image: {{ web_static_image }}
|
|
restart: unless-stopped
|
|
# Webhook locations proxy to chat_backend on the host-published port.
|
|
extra_hosts:
|
|
- "host.docker.internal:host-gateway"
|
|
logging:
|
|
driver: json-file
|
|
options:
|
|
max-size: "10m"
|
|
max-file: "3"
|
|
ports:
|
|
{% for a in _static_apps %}
|
|
- "{{ a.port }}:{{ a.port }}"
|
|
{% endfor %}
|
|
volumes:
|
|
- {{ web_static_root }}:{{ web_static_root }}:ro
|
|
- ./nginx.conf:/etc/nginx/conf.d/default.conf:ro
|