Replace Clay with n8n, Ollama, SearXNG and browserless; add Telegram assistant

Remove the Clay role (Claude Code web UI) and its Anthropic API key.

New roles:
- ollama: local CPU LLM (qwen3:4b-instruct), internal network only
- browserless: headless Chromium for JavaScript-heavy pages
- searxng: metasearch backend for the chat web_search tool
- n8n at agent.ladkau.de: web chat (/chat), scheduled workflows,
  Telegram bot; workflows and credentials are imported from the repo

Telegram bot: Gemini 3.8 -> Gemini 3.5 -> local Qwen fallback chain,
/qwen to force the local model, /stocks and a weekday schedule
(07:30, 13:00, 17:40) for the MTE.DE / PTX.F stock report.

Also: dashboard and check-services entries for the chat, vault checks
for the new secrets (n8n, SearXNG, Gemini, Telegram, SMTP), updated
CLAUDE.md, runbooks and README.
This commit is contained in:
ml
2026-10-03 17:10:33 +02:00
parent b3cf4e250a
commit 974486bc53
37 changed files with 2805 additions and 290 deletions
@@ -0,0 +1,6 @@
---
- name: Restart browserless
community.docker.docker_compose_v2:
project_src: "{{ browserless_data_dir }}"
state: present
recreate: always
+26
View File
@@ -0,0 +1,26 @@
---
- name: Create Browserless directory
ansible.builtin.file:
path: "{{ browserless_data_dir }}"
state: directory
owner: root
group: root
mode: "0755"
tags: browserless
- name: Deploy Docker Compose file
ansible.builtin.template:
src: docker-compose.yml.j2
dest: "{{ browserless_data_dir }}/docker-compose.yml"
owner: root
group: root
mode: "0644"
notify: Restart browserless
tags: browserless
- name: Start Browserless
community.docker.docker_compose_v2:
project_src: "{{ browserless_data_dir }}"
state: present
pull: missing
tags: browserless
@@ -0,0 +1,21 @@
# Managed by Ansible — do not edit manually
services:
browserless:
image: ghcr.io/browserless/chromium:{{ browserless_version }}
container_name: browserless
restart: unless-stopped
environment:
# One browser session at a time, short queue — keeps RAM use predictable on the shared VPS
CONCURRENT: "1"
QUEUED: "4"
TIMEOUT: "60000"
shm_size: 512m
mem_limit: {{ browserless_mem_limit }}
networks:
- browserless_internal
# Not exposed via Traefik. Containers that need the API join this network
# (declared as external there) and reach it at http://browserless:3000.
networks:
browserless_internal:
name: browserless_internal