Files
server-infra/roles/web-static/templates/docker-compose.yml.j2
T
westfarn a84350fe60
Sync runner checkout / sync (push) Successful in 7s
Proxy Hesychia Stripe webhooks off the static site (#42)
## 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
2026-10-10 04:54:04 -07:00

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