mirror of
https://github.com/kevinveenbirkenbach/computer-playbook.git
synced 2026-11-06 10:59:59 +00:00
In swarm, `docker stack deploy` drops the host IP of a short port mapping, so a `127.0.0.1:<ports.local>` publish lands on the ingress routing mesh on every node. The provisioning of these three roles only worked because the mesh answered on the host: - web-app-gitea waited for `DOCKER_REACH_HOST:<ports.local.http>` with wait_for and polled `/api/v1/version` there with uri_retry. - web-app-shopware waited for `DOCKER_REACH_HOST:<ports.local.http>`. - web-app-fider bootstrapped its first tenant in swarm by POSTing to `127.0.0.1:<ports.local.http>` on the hosting node. As long as these calls depend on the mesh, container_ports cannot stop publishing loopback ports in swarm. The probes now run inside the service's own container through the resolved `<PREFIX>_LOCAL_CID` on `<PREFIX>_HOST_NODE`, against the internal port: - Gitea uses the curl it ships. The first wait accepts any HTTP answer, as wait_for did. The post-migration wait still requires 200. - Shopware runs the wget probe its compose healthcheck already uses. - Fider ships no HTTP client, so bash writes the tenant POST to /dev/tcp. The body comes in on stdin and the status line is checked for 200/201. Fider's compose path is unchanged. The compose render of all three roles is unchanged. The host-side ingress guard from svc-swarm-node stays in place until the remaining host-side consumers are moved. Refs #1089 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
35 lines
1.8 KiB
YAML
35 lines
1.8 KiB
YAML
---
|
|
# General
|
|
application_id: "web-app-fider"
|
|
|
|
FIDER_CONTAINER: "{{ lookup('config', application_id, 'services.fider.name') }}"
|
|
FIDER_INTERNAL_PORT: "{{ lookup('config', application_id, 'services.fider.ports.internal.http') }}"
|
|
|
|
FIDER_OIDC_ENABLED: "{{ lookup('config', application_id, 'services.sso.enabled') }}"
|
|
|
|
FIDER_TENANT_BOOTSTRAP_BODY:
|
|
tenantName: "{{ SOFTWARE_NAME }}"
|
|
subdomain: "fider"
|
|
name: "{{ lookup('users', 'administrator').firstname }} {{ lookup('users', 'administrator').lastname }}"
|
|
email: "{{ lookup('users', 'administrator').email }}"
|
|
legalAgreement: true
|
|
token: ""
|
|
FIDER_MCP_ENABLED: "{{ lookup('config', application_id, 'services.fidermcp.enabled') | bool }}"
|
|
FIDER_MCP_SERVICE_KEY: "fidermcp"
|
|
FIDER_MCP_CONTAINER: "{{ lookup('config', application_id, 'services.fidermcp.name') }}"
|
|
FIDER_MCP_PORT: "{{ lookup('config', application_id, 'services.fidermcp.ports.internal.http') }}"
|
|
FIDER_MCP_BEARER: "{{ lookup('config', application_id, 'secrets.credentials.mcp_bearer') }}"
|
|
FIDER_MCP_INSTANCE_DIR: "{{ [lookup('container', application_id, 'directories.instance'), 'mcp'] | path_join }}"
|
|
FIDER_MCP_UPSTREAM_HOST: "{{ lookup('config', application_id, 'services.fider.name') }}"
|
|
FIDER_MCP_UPSTREAM_PORT: "{{ FIDER_INTERNAL_PORT }}"
|
|
FIDER_MCP_UPSTREAM_URL: "http://{{ FIDER_MCP_UPSTREAM_HOST }}:{{ FIDER_MCP_UPSTREAM_PORT }}"
|
|
FIDER_MCP_CONTRACT:
|
|
provider: "{{ application_id }}"
|
|
upstream_url: "{{ FIDER_MCP_UPSTREAM_URL }}"
|
|
auth_subject: "{{ lookup('config', application_id, 'mcp.auth_subject') }}"
|
|
mutating_tools_enabled: "{{ lookup('config', application_id, 'mcp.tools.mutating_tools_enabled') | bool }}"
|
|
tools: "{{ lookup('file', 'mcp/tools.json') | from_json }}"
|
|
limits: "{{ lookup('config', application_id, 'mcp.limits') }}"
|
|
schema_sha256: "{{ lookup('config', application_id, 'mcp.tools.schema_sha256') }}"
|
|
FIDER_MCP_UPSTREAM_KEY: ""
|