From 2f891853d5f2796ec02b9341d86e2424b1df5afb Mon Sep 17 00:00:00 2001 From: Sivarius Date: Fri, 7 Aug 2026 08:14:14 +0800 Subject: [PATCH] refactor: move stack into hermes-stack/ subdir, clean root --- README.md | 64 ------------------- docker-compose.yml | 15 ----- .env.example => hermes-stack/.env.example | 0 .gitignore => hermes-stack/.gitignore | 4 +- hermes-stack/README.md | 64 +++++++++++++++++++ .../compose}/camofox/docker-compose.yml | 0 .../compose}/searxng/docker-compose.yml | 0 .../dev}/camofox/docker-compose.yml | 0 .../dev}/searxng/docker-compose.yml | 0 {scripts => hermes-stack/scripts}/manage.sh | 14 ++-- {src => hermes-stack/src}/camofox/Dockerfile | 22 +------ .../volumes}/searxng/config/settings.yml | 2 +- 12 files changed, 75 insertions(+), 110 deletions(-) delete mode 100644 README.md delete mode 100644 docker-compose.yml rename .env.example => hermes-stack/.env.example (100%) rename .gitignore => hermes-stack/.gitignore (75%) create mode 100644 hermes-stack/README.md rename {compose => hermes-stack/compose}/camofox/docker-compose.yml (100%) rename {compose => hermes-stack/compose}/searxng/docker-compose.yml (100%) rename {dev => hermes-stack/dev}/camofox/docker-compose.yml (100%) rename {dev => hermes-stack/dev}/searxng/docker-compose.yml (100%) rename {scripts => hermes-stack/scripts}/manage.sh (59%) rename {src => hermes-stack/src}/camofox/Dockerfile (50%) rename {volumes => hermes-stack/volumes}/searxng/config/settings.yml (92%) diff --git a/README.md b/README.md deleted file mode 100644 index e49149e..0000000 --- a/README.md +++ /dev/null @@ -1,64 +0,0 @@ -# Hermes Docker Stack - -Self-hosted SearXNG (metasearch) + Camofox (browser) for Hermes Agent. - -## Структура - -``` -docker/ -├── compose/ # Production compose-файлы (по одному на сервис) -│ ├── searxng/ # SearXNG — self-hosted metasearch -│ └── camofox/ # Camofox — anti-detection browser (Firefox) -├── dev/ # Dev-версии (другие порты) -│ ├── searxng/ -│ └── camofox/ -├── volumes/ # Persistent volume data -│ ├── searxng/config/ # settings.yml -│ ├── searxng/data/ # Search engine data -│ ├── camofox/browser/ # Firefox profiles -│ └── shared/ # Shared downloads -├── scripts/ # Утилиты -│ └── manage.sh -├── tests/ # Тесты -├── docker-compose.yml # Главный стек (extends compose/*) -├── .env # Секреты (gitignored) -├── .env.example # Шаблон .env -└── .gitignore -``` - -## Порты - -| Сервис | Prod | Dev | -|----------|------|------| -| SearXNG | 8964 | 8965 | -| Camofox | 9377 | 9378 | - -## Использование - -```bash -./scripts/manage.sh start # Запустить стек -./scripts/manage.sh status # Статус -./scripts/manage.sh logs # Логи -./scripts/manage.sh stop # Остановить -./scripts/manage.sh dev # Dev-режим -./scripts/manage.sh dev-stop # Остановить dev -``` - -## Интеграция с Hermes - -В `~/.hermes/.env`: -``` -SEARXNG_URL=http://localhost:8964 -CAMOFOX_URL=http://localhost:9377 -``` - -В `~/.hermes/config.yaml`: -```yaml -web: - search_backend: searxng -browser: - backend: camofox - camofox: - rewrite_loopback_urls: true - loopback_host_alias: host.docker.internal -``` diff --git a/docker-compose.yml b/docker-compose.yml deleted file mode 100644 index c4345a9..0000000 --- a/docker-compose.yml +++ /dev/null @@ -1,15 +0,0 @@ -services: - searxng: - extends: - file: ./compose/searxng/docker-compose.yml - service: searxng - - camofox: - extends: - file: ./compose/camofox/docker-compose.yml - service: camofox - -networks: - hermes-net: - name: hermes-net - driver: bridge diff --git a/.env.example b/hermes-stack/.env.example similarity index 100% rename from .env.example rename to hermes-stack/.env.example diff --git a/.gitignore b/hermes-stack/.gitignore similarity index 75% rename from .gitignore rename to hermes-stack/.gitignore index 57ff614..7a2e1c3 100644 --- a/.gitignore +++ b/hermes-stack/.gitignore @@ -2,12 +2,10 @@ .env !.env.example -# Volume data (persistent container state) +# Volume data volumes/searxng/data/ volumes/camofox/browser/ volumes/shared/ - -# Keep gitkeep files !volumes/**/.gitkeep # Python diff --git a/hermes-stack/README.md b/hermes-stack/README.md new file mode 100644 index 0000000..1992318 --- /dev/null +++ b/hermes-stack/README.md @@ -0,0 +1,64 @@ +# Hermes Docker Stack + +Self-hosted SearXNG (metasearch) + Camofox (browser) для Hermes Agent. + +## Структура + +``` +hermes-stack/ # ← самодостаточный проект +├── compose/ # Production compose-файлы +│ ├── searxng/ # SearXNG — self-hosted metasearch +│ └── camofox/ # Camofox — anti-detection browser (Firefox) +├── dev/ # Dev-версии (другие порты) +│ ├── searxng/ +│ └── camofox/ +├── volumes/ # Persistent volume data +│ ├── searxng/config/ # settings.yml +│ ├── searxng/data/ +│ ├── camofox/browser/ # Firefox profiles +│ └── shared/ +├── src/camofox/ # Dockerfile для сборки Camofox +├── scripts/manage.sh # Управление стеком +├── tests/ +├── .env # Секреты (gitignored) +├── .env.example +├── .gitignore +└── README.md +``` + +## Порты + +| Сервис | Prod | Dev | +|----------|------|------| +| SearXNG | 8964 | 8965 | +| Camofox | 9377 | 9378 | + +## Использование + +```bash +cd hermes-stack +./scripts/manage.sh start # Запустить +./scripts/manage.sh status # Статус +./scripts/manage.sh logs # Логи +./scripts/manage.sh stop # Остановить +./scripts/manage.sh dev # Dev-режим +``` + +## Интеграция с Hermes + +В `~/.hermes/.env`: +``` +SEARXNG_URL=http://localhost:8964 +CAMOFOX_URL=http://localhost:9377 +``` + +В `~/.hermes/config.yaml`: +```yaml +web: + search_backend: searxng +browser: + backend: camofox + camofox: + rewrite_loopback_urls: true + loopback_host_alias: host.docker.internal +``` diff --git a/compose/camofox/docker-compose.yml b/hermes-stack/compose/camofox/docker-compose.yml similarity index 100% rename from compose/camofox/docker-compose.yml rename to hermes-stack/compose/camofox/docker-compose.yml diff --git a/compose/searxng/docker-compose.yml b/hermes-stack/compose/searxng/docker-compose.yml similarity index 100% rename from compose/searxng/docker-compose.yml rename to hermes-stack/compose/searxng/docker-compose.yml diff --git a/dev/camofox/docker-compose.yml b/hermes-stack/dev/camofox/docker-compose.yml similarity index 100% rename from dev/camofox/docker-compose.yml rename to hermes-stack/dev/camofox/docker-compose.yml diff --git a/dev/searxng/docker-compose.yml b/hermes-stack/dev/searxng/docker-compose.yml similarity index 100% rename from dev/searxng/docker-compose.yml rename to hermes-stack/dev/searxng/docker-compose.yml diff --git a/scripts/manage.sh b/hermes-stack/scripts/manage.sh similarity index 59% rename from scripts/manage.sh rename to hermes-stack/scripts/manage.sh index d8a6976..868a669 100644 --- a/scripts/manage.sh +++ b/hermes-stack/scripts/manage.sh @@ -7,29 +7,29 @@ cd "$DIR" case "${1:-status}" in start) echo "🚀 Starting Hermes Docker Stack..." - docker compose -f docker-compose.yml up -d + docker compose -f compose/searxng/docker-compose.yml -f compose/camofox/docker-compose.yml up -d echo "SearXNG: http://localhost:8964" echo "Camofox: http://localhost:9377" ;; stop) echo "🛑 Stopping..." - docker compose -f docker-compose.yml down + docker compose -f compose/searxng/docker-compose.yml -f compose/camofox/docker-compose.yml down ;; restart) - docker compose -f docker-compose.yml down - docker compose -f docker-compose.yml up -d + docker compose -f compose/searxng/docker-compose.yml -f compose/camofox/docker-compose.yml down + docker compose -f compose/searxng/docker-compose.yml -f compose/camofox/docker-compose.yml up -d ;; status) echo "=== Hermes Docker Stack ===" - docker compose -f docker-compose.yml ps + docker compose -f compose/searxng/docker-compose.yml -f compose/camofox/docker-compose.yml ps echo "---" - for url in http://localhost:8964/health http://localhost:9377/health; do + for url in http://localhost:8964/ http://localhost:9377/health; do code=$(curl -s -o /dev/null -w '%{http_code}' "$url" 2>/dev/null || echo "down") echo "$url → $code" done ;; logs) - docker compose -f docker-compose.yml logs --tail=50 -f + docker compose -f compose/searxng/docker-compose.yml -f compose/camofox/docker-compose.yml logs --tail=50 -f ;; dev) echo "🧪 Starting DEV stack..." diff --git a/src/camofox/Dockerfile b/hermes-stack/src/camofox/Dockerfile similarity index 50% rename from src/camofox/Dockerfile rename to hermes-stack/src/camofox/Dockerfile index 7f67dae..ee567da 100644 --- a/src/camofox/Dockerfile +++ b/hermes-stack/src/camofox/Dockerfile @@ -1,28 +1,10 @@ FROM node:22-alpine RUN apk add --no-cache \ - # Playwright deps - nss \ - freetype \ - freetype-dev \ - harfbuzz \ - ca-certificates \ - ttf-freefont \ - # Firefox deps - libstdc++ \ - dbus-glib \ - # Xvfb for headless mode - xvfb \ - xauth \ - # General - wget \ - curl \ - yt-dlp + nss freetype freetype-dev harfbuzz ca-certificates ttf-freefont \ + libstdc++ dbus-glib xvfb xauth wget curl yt-dlp -# Install Camofox browser globally RUN npm install -g @askjo/camofox-browser@1.13.1 - -# Install Playwright Firefox RUN npx playwright install firefox EXPOSE 9377 diff --git a/volumes/searxng/config/settings.yml b/hermes-stack/volumes/searxng/config/settings.yml similarity index 92% rename from volumes/searxng/config/settings.yml rename to hermes-stack/volumes/searxng/config/settings.yml index b833041..956f597 100644 --- a/volumes/searxng/config/settings.yml +++ b/hermes-stack/volumes/searxng/config/settings.yml @@ -20,7 +20,7 @@ search: - json server: - secret_key: "" # will be overridden by SEARXNG_SECRET_KEY env + secret_key: "" # overridden by SEARXNG_SECRET_KEY env bind_address: "0.0.0.0" port: 8080 base_url: "http://localhost:8964/"