8adbd3fac4
- Deploy Clay (claude Code web UI) at agent.ladkau.de behind basic auth; Traefik proxies to clay's HTTPS port 2633 with insecureSkipVerify - Document MCP server persistence: binaries need to be baked into the Dockerfile, config in /opt/clay/data survives rebuilds - Document scheduled agent workflows via Gitea Actions on.schedule with email reporting via Gmail SMTP - Fix registry UI: split /v2/ (registry) and / (UI) into separate Traefik routers; add registry_internal network - Add weekly registry GC cron job (/usr/local/bin/registry-gc) - Remove rate-limit middleware from Gitea router (act_runner polling exceeded 60 req/min limit) - Set Traefik websecure readTimeout: 0 to fix large layer upload 499s
36 lines
1.3 KiB
Django/Jinja
36 lines
1.3 KiB
Django/Jinja
# Managed by Ansible — do not edit manually
|
|
services:
|
|
clay:
|
|
image: clay:local
|
|
build:
|
|
context: {{ clay_data_dir }}
|
|
dockerfile: Dockerfile
|
|
container_name: clay
|
|
restart: unless-stopped
|
|
tty: true
|
|
environment:
|
|
- ANTHROPIC_API_KEY={{ anthropic_api_key }}
|
|
volumes:
|
|
- {{ clay_data_dir }}/data:/root/.clay
|
|
- {{ clay_data_dir }}/workspace:/workspace
|
|
command: ["clay-server", "--yes", "-p", "2633"]
|
|
networks:
|
|
- traefik_public
|
|
labels:
|
|
- "traefik.enable=true"
|
|
- "traefik.http.routers.clay.rule=Host(`{{ domain_clay }}`)"
|
|
- "traefik.http.routers.clay.entrypoints=websecure"
|
|
- "traefik.http.routers.clay.tls.certresolver=letsencrypt"
|
|
- "traefik.http.services.clay.loadbalancer.server.scheme=https"
|
|
- "traefik.http.services.clay.loadbalancer.server.port=2633"
|
|
- "traefik.http.routers.clay.middlewares=clay-auth"
|
|
{% set ns = namespace(entries=[]) %}
|
|
{% for user in clay_users %}
|
|
{% set ns.entries = ns.entries + [user.username + ':' + (user.password | password_hash('bcrypt', (user.username | hash('md5'))[:22]) | replace('$', '$$'))] %}
|
|
{% endfor %}
|
|
- "traefik.http.middlewares.clay-auth.basicauth.users={{ ns.entries | join(',') }}"
|
|
|
|
networks:
|
|
traefik_public:
|
|
external: true
|