refactor: move stack into hermes-stack/ subdir, clean root

This commit is contained in:
Sivarius
2026-08-07 08:14:14 +08:00
parent 00aa4bf6cb
commit 2f891853d5
12 changed files with 75 additions and 110 deletions
-64
View File
@@ -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
```
-15
View File
@@ -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
+1 -3
View File
@@ -2,12 +2,10 @@
.env .env
!.env.example !.env.example
# Volume data (persistent container state) # Volume data
volumes/searxng/data/ volumes/searxng/data/
volumes/camofox/browser/ volumes/camofox/browser/
volumes/shared/ volumes/shared/
# Keep gitkeep files
!volumes/**/.gitkeep !volumes/**/.gitkeep
# Python # Python
+64
View File
@@ -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
```
@@ -7,29 +7,29 @@ cd "$DIR"
case "${1:-status}" in case "${1:-status}" in
start) start)
echo "🚀 Starting Hermes Docker Stack..." 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 "SearXNG: http://localhost:8964"
echo "Camofox: http://localhost:9377" echo "Camofox: http://localhost:9377"
;; ;;
stop) stop)
echo "🛑 Stopping..." 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) restart)
docker compose -f docker-compose.yml down docker compose -f compose/searxng/docker-compose.yml -f compose/camofox/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 up -d
;; ;;
status) status)
echo "=== Hermes Docker Stack ===" 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 "---" 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") code=$(curl -s -o /dev/null -w '%{http_code}' "$url" 2>/dev/null || echo "down")
echo "$url → $code" echo "$url → $code"
done done
;; ;;
logs) 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) dev)
echo "🧪 Starting DEV stack..." echo "🧪 Starting DEV stack..."
@@ -1,28 +1,10 @@
FROM node:22-alpine FROM node:22-alpine
RUN apk add --no-cache \ RUN apk add --no-cache \
# Playwright deps nss freetype freetype-dev harfbuzz ca-certificates ttf-freefont \
nss \ libstdc++ dbus-glib xvfb xauth wget curl yt-dlp
freetype \
freetype-dev \
harfbuzz \
ca-certificates \
ttf-freefont \
# Firefox deps
libstdc++ \
dbus-glib \
# Xvfb for headless mode
xvfb \
xauth \
# General
wget \
curl \
yt-dlp
# Install Camofox browser globally
RUN npm install -g @askjo/camofox-browser@1.13.1 RUN npm install -g @askjo/camofox-browser@1.13.1
# Install Playwright Firefox
RUN npx playwright install firefox RUN npx playwright install firefox
EXPOSE 9377 EXPOSE 9377
@@ -20,7 +20,7 @@ search:
- json - json
server: 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" bind_address: "0.0.0.0"
port: 8080 port: 8080
base_url: "http://localhost:8964/" base_url: "http://localhost:8964/"