Compare commits
1 Commits
feat/honch
...
feat/world
| Author | SHA1 | Date | |
|---|---|---|---|
| 5aa21876da |
13
.gitignore
vendored
Normal file
13
.gitignore
vendored
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
# Temp/scratch files — never commit these
|
||||||
|
*.bak
|
||||||
|
*.swp
|
||||||
|
*.tmp
|
||||||
|
*~
|
||||||
|
scratch/
|
||||||
|
.env
|
||||||
|
.env.local
|
||||||
|
tmp/
|
||||||
|
temp/
|
||||||
|
replace_compose.py
|
||||||
|
entrypoint-*.sh
|
||||||
|
copy_*.txt
|
||||||
@@ -72,8 +72,6 @@ services:
|
|||||||
networks:
|
networks:
|
||||||
- ai_backend
|
- ai_backend
|
||||||
- ai_net
|
- ai_net
|
||||||
depends_on:
|
|
||||||
- honcho
|
|
||||||
labels:
|
labels:
|
||||||
- "traefik.enable=true"
|
- "traefik.enable=true"
|
||||||
- "traefik.docker.network=ai_net"
|
- "traefik.docker.network=ai_net"
|
||||||
@@ -127,7 +125,6 @@ services:
|
|||||||
- "traefik.http.routers.syncthing-https.tls.certresolver=njalla"
|
- "traefik.http.routers.syncthing-https.tls.certresolver=njalla"
|
||||||
- "traefik.http.services.syncthing.loadbalancer.server.port=8384"
|
- "traefik.http.services.syncthing.loadbalancer.server.port=8384"
|
||||||
|
|
||||||
|
|
||||||
ollama:
|
ollama:
|
||||||
build:
|
build:
|
||||||
context: ./ollama
|
context: ./ollama
|
||||||
@@ -161,95 +158,6 @@ services:
|
|||||||
- "303"
|
- "303"
|
||||||
- "26"
|
- "26"
|
||||||
|
|
||||||
# --- Honcho: AI-native user modeling ---
|
|
||||||
honcho:
|
|
||||||
build: ./honcho
|
|
||||||
container_name: honcho
|
|
||||||
restart: unless-stopped
|
|
||||||
ports:
|
|
||||||
- "127.0.0.1:8001:8000"
|
|
||||||
environment:
|
|
||||||
- DB_CONNECTION_URI=postgresql+psycopg://honcho:honcho_pass@honcho-db:5432/honcho
|
|
||||||
- CACHE_URL=redis://honcho-redis:6379/0
|
|
||||||
- CACHE_ENABLED=true
|
|
||||||
- EMBEDDING_VECTOR_DIMENSIONS=1536
|
|
||||||
- VECTOR_STORE_DIMENSIONS=
|
|
||||||
volumes:
|
|
||||||
- /mnt/HoardingCow_docker_data/Honcho/data:/app/data
|
|
||||||
networks:
|
|
||||||
- ai_backend
|
|
||||||
- ai_net
|
|
||||||
depends_on:
|
|
||||||
honcho-db:
|
|
||||||
condition: service_healthy
|
|
||||||
honcho-redis:
|
|
||||||
condition: service_healthy
|
|
||||||
|
|
||||||
# --- OpenConcho: Honcho web UI ---
|
|
||||||
openconcho:
|
|
||||||
build: ./openconcho
|
|
||||||
container_name: openconcho
|
|
||||||
restart: unless-stopped
|
|
||||||
networks:
|
|
||||||
- ai_backend
|
|
||||||
- ai_net
|
|
||||||
labels:
|
|
||||||
- "traefik.enable=true"
|
|
||||||
|
|
||||||
# Router for HTTP + redirect to HTTPS
|
|
||||||
- "traefik.http.routers.openconcho-http.rule=Host(`honcho.lazyworkhorse.net`)"
|
|
||||||
- "traefik.http.routers.openconcho-http.entrypoints=web"
|
|
||||||
- "traefik.http.routers.openconcho-http.middlewares=redirect-to-https"
|
|
||||||
|
|
||||||
# Router for HTTPS with TLS — protected by Authelia
|
|
||||||
- "traefik.http.routers.openconcho-https.rule=Host(`honcho.lazyworkhorse.net`)"
|
|
||||||
- "traefik.http.routers.openconcho-https.entrypoints=websecure"
|
|
||||||
- "traefik.http.routers.openconcho-https.tls=true"
|
|
||||||
- "traefik.http.routers.openconcho-https.tls.certresolver=njalla"
|
|
||||||
- "traefik.http.routers.openconcho-https.middlewares=hermes-auth"
|
|
||||||
|
|
||||||
# Service Loadbalancer
|
|
||||||
- "traefik.http.services.openconcho.loadbalancer.server.port=80"
|
|
||||||
|
|
||||||
honcho-db:
|
|
||||||
image: pgvector/pgvector:pg15
|
|
||||||
container_name: honcho-db
|
|
||||||
restart: unless-stopped
|
|
||||||
ports:
|
|
||||||
- "127.0.0.1:5432:5432"
|
|
||||||
command: ["postgres", "-c", "max_connections=200"]
|
|
||||||
environment:
|
|
||||||
- POSTGRES_DB=honcho
|
|
||||||
- POSTGRES_USER=honcho
|
|
||||||
- POSTGRES_PASSWORD=honcho_pass
|
|
||||||
- PGDATA=/var/lib/postgresql/data/pgdata
|
|
||||||
volumes:
|
|
||||||
- /mnt/HoardingCow_docker_data/Honcho/postgres:/var/lib/postgresql/data
|
|
||||||
- ./honcho/init-db.sql:/docker-entrypoint-initdb.d/init.sql:ro
|
|
||||||
networks:
|
|
||||||
- ai_backend
|
|
||||||
healthcheck:
|
|
||||||
test: ["CMD-SHELL", "pg_isready -U honcho -d honcho"]
|
|
||||||
interval: 5s
|
|
||||||
timeout: 5s
|
|
||||||
retries: 5
|
|
||||||
|
|
||||||
honcho-redis:
|
|
||||||
image: redis:8
|
|
||||||
container_name: honcho-redis
|
|
||||||
restart: unless-stopped
|
|
||||||
ports:
|
|
||||||
- "127.0.0.1:6379:6379"
|
|
||||||
volumes:
|
|
||||||
- /mnt/HoardingCow_docker_data/Honcho/redis:/data
|
|
||||||
networks:
|
|
||||||
- ai_backend
|
|
||||||
healthcheck:
|
|
||||||
test: ["CMD-SHELL", "redis-cli ping"]
|
|
||||||
interval: 5s
|
|
||||||
timeout: 5s
|
|
||||||
retries: 5
|
|
||||||
|
|
||||||
networks:
|
networks:
|
||||||
ai_net:
|
ai_net:
|
||||||
external: true
|
external: true
|
||||||
|
|||||||
@@ -43,14 +43,6 @@ RUN apt-get update && \
|
|||||||
# ---------- UV ----------
|
# ---------- UV ----------
|
||||||
COPY --chmod=0755 --from=ghcr.io/astral-sh/uv:latest /uv /usr/local/bin/
|
COPY --chmod=0755 --from=ghcr.io/astral-sh/uv:latest /uv /usr/local/bin/
|
||||||
|
|
||||||
# ---------- Matrix bridge + extra pip deps ----------
|
|
||||||
# Previously installed inline at container startup and persisted via volume mount.
|
|
||||||
# Now baked into the image so the fragile venv volume mount can be removed.
|
|
||||||
RUN . /opt/hermes/.venv/bin/activate && \
|
|
||||||
uv pip install --no-cache-dir 'mautrix[encryption]' openai
|
|
||||||
|
|
||||||
WORKDIR /opt/hermes
|
|
||||||
|
|
||||||
# ---------- Matrix bridge + extra pip deps ----------
|
# ---------- Matrix bridge + extra pip deps ----------
|
||||||
# Previously installed inline at container startup and persisted via volume mount.
|
# Previously installed inline at container startup and persisted via volume mount.
|
||||||
# Now baked into the image so the fragile venv volume mount can be removed.
|
# Now baked into the image so the fragile venv volume mount can be removed.
|
||||||
|
|||||||
@@ -1,41 +0,0 @@
|
|||||||
# build stage — fetches and builds Honcho from source
|
|
||||||
# Using buildkit cache mounts for speed across rebuilds
|
|
||||||
FROM python:3.13-slim-bookworm AS builder
|
|
||||||
|
|
||||||
RUN apt-get update && \
|
|
||||||
apt-get install -y --no-install-recommends git && \
|
|
||||||
rm -rf /var/lib/apt/lists/*
|
|
||||||
|
|
||||||
COPY --from=ghcr.io/astral-sh/uv:0.9.24 /uv /bin/uv
|
|
||||||
|
|
||||||
# Clone Honcho at a pinned commit for reproducibility
|
|
||||||
ARG HONCHO_REPO=https://github.com/plastic-labs/honcho
|
|
||||||
ARG HONCHO_REF=main
|
|
||||||
RUN git clone --depth 1 --branch ${HONCHO_REF} ${HONCHO_REPO} /app
|
|
||||||
|
|
||||||
WORKDIR /app
|
|
||||||
|
|
||||||
ENV UV_COMPILE_BYTECODE=1
|
|
||||||
ENV UV_LINK_MODE=copy
|
|
||||||
ENV UV_PYTHON=/usr/local/bin/python3.13
|
|
||||||
|
|
||||||
RUN uv sync --frozen
|
|
||||||
|
|
||||||
# --- runtime stage ---
|
|
||||||
FROM python:3.13-slim-bookworm
|
|
||||||
|
|
||||||
RUN groupadd --system app && \
|
|
||||||
useradd --system --gid app --create-home app
|
|
||||||
|
|
||||||
COPY --from=builder /app /app
|
|
||||||
|
|
||||||
WORKDIR /app
|
|
||||||
ENV PATH="/app/.venv/bin:$PATH"
|
|
||||||
ENV HOME=/app
|
|
||||||
|
|
||||||
COPY --chown=app:app config.toml /app/config.toml
|
|
||||||
|
|
||||||
USER app
|
|
||||||
EXPOSE 8000
|
|
||||||
|
|
||||||
CMD ["fastapi", "run", "--host", "0.0.0.0", "src/main.py"]
|
|
||||||
@@ -1,117 +0,0 @@
|
|||||||
[app]
|
|
||||||
LOG_LEVEL = "INFO"
|
|
||||||
MAX_MESSAGE_SIZE = 25000
|
|
||||||
EMBED_MESSAGES = true
|
|
||||||
NAMESPACE = "honcho"
|
|
||||||
|
|
||||||
[db]
|
|
||||||
CONNECTION_URI = "postgresql+psycopg://honcho:honcho_pass@honcho-db:5432/honcho"
|
|
||||||
SCHEMA = "public"
|
|
||||||
POOL_SIZE = 10
|
|
||||||
MAX_OVERFLOW = 20
|
|
||||||
|
|
||||||
[auth]
|
|
||||||
USE_AUTH = false
|
|
||||||
|
|
||||||
[sentry]
|
|
||||||
ENABLED = false
|
|
||||||
|
|
||||||
[telemetry]
|
|
||||||
ENABLED = false
|
|
||||||
|
|
||||||
[webhook]
|
|
||||||
ENABLED = false
|
|
||||||
|
|
||||||
[cache]
|
|
||||||
ENABLED = true
|
|
||||||
URL = "redis://honcho-redis:6379/0"
|
|
||||||
|
|
||||||
[llm]
|
|
||||||
DEFAULT_MAX_TOKENS = 4096
|
|
||||||
|
|
||||||
# Embeddings via Ollama (nomic-embed-text recommended on this system)
|
|
||||||
[embedding]
|
|
||||||
VECTOR_DIMENSIONS = 768
|
|
||||||
MAX_INPUT_TOKENS = 8192
|
|
||||||
|
|
||||||
[embedding.model_config]
|
|
||||||
transport = "openai"
|
|
||||||
model = "nomic-embed-text"
|
|
||||||
base_url = "http://ollama:11434/v1"
|
|
||||||
|
|
||||||
# --- Deriver (user representation builder) ---
|
|
||||||
[deriver]
|
|
||||||
ENABLED = true
|
|
||||||
WORKERS = 1
|
|
||||||
POLLING_SLEEP_INTERVAL_SECONDS = 5.0
|
|
||||||
FLUSH_ENABLED = true
|
|
||||||
|
|
||||||
[deriver.model_config]
|
|
||||||
transport = "openai"
|
|
||||||
model = "hermes-3"
|
|
||||||
base_url = "http://ollama:11434/v1"
|
|
||||||
|
|
||||||
# --- Dialectic ---
|
|
||||||
[dialectic]
|
|
||||||
MAX_INPUT_TOKENS = 4096
|
|
||||||
SESSION_HISTORY_MAX_TOKENS = 8192
|
|
||||||
|
|
||||||
[dialectic.levels.minimal]
|
|
||||||
MAX_TOOL_ITERATIONS = 1
|
|
||||||
MAX_OUTPUT_TOKENS = 512
|
|
||||||
[dialectic.levels.minimal.model_config]
|
|
||||||
transport = "openai"
|
|
||||||
model = "hermes-3"
|
|
||||||
base_url = "http://ollama:11434/v1"
|
|
||||||
|
|
||||||
[dialectic.levels.low]
|
|
||||||
MAX_TOOL_ITERATIONS = 3
|
|
||||||
[dialectic.levels.low.model_config]
|
|
||||||
transport = "openai"
|
|
||||||
model = "hermes-3"
|
|
||||||
base_url = "http://ollama:11434/v1"
|
|
||||||
|
|
||||||
[dialectic.levels.medium]
|
|
||||||
MAX_TOOL_ITERATIONS = 2
|
|
||||||
[dialectic.levels.medium.model_config]
|
|
||||||
transport = "openai"
|
|
||||||
model = "hermes-3"
|
|
||||||
base_url = "http://ollama:11434/v1"
|
|
||||||
|
|
||||||
[dialectic.levels.high]
|
|
||||||
MAX_TOOL_ITERATIONS = 4
|
|
||||||
[dialectic.levels.high.model_config]
|
|
||||||
transport = "openai"
|
|
||||||
model = "hermes-3"
|
|
||||||
base_url = "http://ollama:11434/v1"
|
|
||||||
|
|
||||||
[dialectic.levels.max]
|
|
||||||
MAX_TOOL_ITERATIONS = 10
|
|
||||||
[dialectic.levels.max.model_config]
|
|
||||||
transport = "openai"
|
|
||||||
model = "hermes-3"
|
|
||||||
base_url = "http://ollama:11434/v1"
|
|
||||||
|
|
||||||
# --- Summary ---
|
|
||||||
[summary]
|
|
||||||
ENABLED = true
|
|
||||||
MESSAGES_PER_SHORT_SUMMARY = 20
|
|
||||||
MESSAGES_PER_LONG_SUMMARY = 60
|
|
||||||
|
|
||||||
[summary.model_config]
|
|
||||||
transport = "openai"
|
|
||||||
model = "hermes-3"
|
|
||||||
base_url = "http://ollama:11434/v1"
|
|
||||||
|
|
||||||
# --- Dream ---
|
|
||||||
[dream]
|
|
||||||
ENABLED = false
|
|
||||||
|
|
||||||
# --- Peer Card ---
|
|
||||||
[peer_card]
|
|
||||||
ENABLED = true
|
|
||||||
|
|
||||||
# --- Vector Store ---
|
|
||||||
[vector_store]
|
|
||||||
TYPE = "pgvector"
|
|
||||||
DIMENSIONS = 768
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
CREATE EXTENSION IF NOT EXISTS vector;
|
|
||||||
@@ -1,23 +0,0 @@
|
|||||||
# build stage
|
|
||||||
FROM node:22-bookworm AS builder
|
|
||||||
|
|
||||||
ENV PNPM_HOME=/pnpm
|
|
||||||
ENV PATH=$PNPM_HOME:$PATH
|
|
||||||
RUN corepack enable && corepack prepare pnpm@latest --activate
|
|
||||||
|
|
||||||
WORKDIR /app
|
|
||||||
RUN apt-get update && apt-get install -y git && rm -rf /var/lib/apt/lists/*
|
|
||||||
|
|
||||||
ARG OPENCONCHO_SHA=e490d911fcb27ee193558fd9a28856cde2057665
|
|
||||||
RUN git clone --depth 1 https://github.com/offendingcommit/openconcho.git /app && \
|
|
||||||
git -C /app fetch --depth 1 origin ${OPENCONCHO_SHA} && \
|
|
||||||
git -C /app checkout ${OPENCONCHO_SHA}
|
|
||||||
|
|
||||||
RUN pnpm install --frozen-lockfile
|
|
||||||
RUN pnpm --filter @openconcho/web build
|
|
||||||
|
|
||||||
# runtime stage
|
|
||||||
FROM nginx:alpine
|
|
||||||
COPY --from=builder /app/packages/web/dist /usr/share/nginx/html
|
|
||||||
EXPOSE 80
|
|
||||||
CMD ["nginx", "-g", "daemon off;"]
|
|
||||||
53
int/.env.example
Normal file
53
int/.env.example
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
# =============================================================================
|
||||||
|
# WorldMonitor — Environment Variables
|
||||||
|
# =============================================================================
|
||||||
|
# Copy this file to .env (gitignored) and fill in your keys.
|
||||||
|
# All keys are optional — the dashboard works without them,
|
||||||
|
# but the corresponding features will be disabled.
|
||||||
|
#
|
||||||
|
# Usage:
|
||||||
|
# cp .env.example .env.local (docker-compose auto-loads .env from CWD)
|
||||||
|
#
|
||||||
|
# For production secrets, add these to the shared containers.env
|
||||||
|
# agenix secret at: secrets/containers.env.age
|
||||||
|
# =============================================================================
|
||||||
|
|
||||||
|
# ── REQUIRED: These containers refuse to start without them ──
|
||||||
|
# Generate with: openssl rand -hex 32
|
||||||
|
REDIS_PASSWORD=
|
||||||
|
REDIS_TOKEN=
|
||||||
|
RELAY_SHARED_SECRET=
|
||||||
|
|
||||||
|
# ── LLM / AI (for intelligence assessments) ──
|
||||||
|
# Pick one or both
|
||||||
|
GROQ_API_KEY= # https://console.groq.com (free: 14,400 req/day)
|
||||||
|
OPENROUTER_API_KEY= # https://openrouter.ai (free: 50 req/day)
|
||||||
|
|
||||||
|
# ── Markets & Economics (optional) ──
|
||||||
|
FINNHUB_API_KEY= # https://finnhub.io (free tier)
|
||||||
|
FRED_API_KEY= # https://fred.stlouisfed.org (free)
|
||||||
|
EIA_API_KEY= # https://www.eia.gov/opendata/ (free)
|
||||||
|
|
||||||
|
# ── Aviation (optional) ──
|
||||||
|
AVIATIONSTACK_API= # https://aviationstack.com (free tier)
|
||||||
|
WINGBITS_API_KEY= # https://wingbits.com (contact them)
|
||||||
|
|
||||||
|
# ── Maritime (optional) ──
|
||||||
|
AISSTREAM_API_KEY= # https://aisstream.io (free tier)
|
||||||
|
|
||||||
|
# ── Conflict & Unrest (optional) ──
|
||||||
|
ACLED_ACCESS_TOKEN= # https://acleddata.com (free for researchers)
|
||||||
|
|
||||||
|
# ── Earth Observation (optional) ──
|
||||||
|
NASA_FIRMS_API_KEY= # https://firms.modaps.eosdis.nasa.gov (free)
|
||||||
|
|
||||||
|
# ── Infrastructure / Internet (optional) ──
|
||||||
|
CLOUDFLARE_API_TOKEN= # https://developers.cloudflare.com/fundamentals/api/
|
||||||
|
|
||||||
|
# ── Port (optional, defaults to 3000) ──
|
||||||
|
WM_PORT=3000
|
||||||
|
|
||||||
|
# ── Convex (for cloud sync / auth — optional for self-host) ──
|
||||||
|
CONVEX_URL=
|
||||||
|
CLERK_SECRET_KEY=
|
||||||
|
VITE_CLERK_PUBLISHABLE_KEY=
|
||||||
177
int/compose.yml
Normal file
177
int/compose.yml
Normal file
@@ -0,0 +1,177 @@
|
|||||||
|
# =============================================================================
|
||||||
|
# Integrations stack
|
||||||
|
# =============================================================================
|
||||||
|
# Currently running: WorldMonitor
|
||||||
|
# Planned: TAK server (commented out — needs fixing)
|
||||||
|
# =============================================================================
|
||||||
|
|
||||||
|
# ── TAK Server (FreeTAKServer) ──
|
||||||
|
# Disabled: needs debugging. Was having connectivity/auth issues.
|
||||||
|
# See: https://github.com/FreeTAKTeam/FreeTAKServer
|
||||||
|
#
|
||||||
|
# services:
|
||||||
|
# freetakserver:
|
||||||
|
# image: ghcr.io/freetakteam/freetakserver:master
|
||||||
|
# container_name: freetakserver
|
||||||
|
# hostname: freetakserver
|
||||||
|
# restart: always
|
||||||
|
# networks:
|
||||||
|
# - int_backend
|
||||||
|
# volumes:
|
||||||
|
# - /mnt/HoardingCow_docker_data/TAK/fts_data:/opt/fts:z,rw
|
||||||
|
# ports:
|
||||||
|
# - 8087:8087
|
||||||
|
# - 8089:8089
|
||||||
|
# - 8443:8443
|
||||||
|
# - 9000:9000
|
||||||
|
# - 19023:19023
|
||||||
|
# environment:
|
||||||
|
# FTS_FED_PASSWORD: "${FTS_FED_PASSWORD}"
|
||||||
|
# FTS_CLIENT_CERT_PASSWORD: "${FTS_CLIENT_CERT_PASSWORD}"
|
||||||
|
# FTS_WEBSOCKET_KEY: "${FTS_WEBSOCKET_KEY}"
|
||||||
|
# FTS_SECRET_KEY: "${FTS_SECRET_KEY}"
|
||||||
|
# FTS_CONNECTION_MESSAGE: "Welcome to FreeTAKServer. The Parrot is not dead. It's just resting"
|
||||||
|
# FTS_COT_PORT: 8087
|
||||||
|
# FTS_SSLCOT_PORT: 8089
|
||||||
|
# FTS_API_PORT: 19023
|
||||||
|
# FTS_FED_PORT: 9000
|
||||||
|
# FTS_DP_ADDRESS: 'freetakserver'
|
||||||
|
# FTS_USER_ADDRESS: 'freetakserver'
|
||||||
|
# FTS_API_ADDRESS: 'freetakserver'
|
||||||
|
# FTS_ROUTING_PROXY_SUBSCRIBE_PORT: 19030
|
||||||
|
# FTS_ROUTING_PROXY_SUBSCRIBE_IP: 'freetakserver'
|
||||||
|
# FTS_ROUTING_PROXY_PUBLISHER_PORT: 19032
|
||||||
|
# FTS_ROUTING_PROXY_PUBLISHER_IP: 'freetakserver'
|
||||||
|
# FTS_ROUTING_PROXY_SERVER_PORT: 19031
|
||||||
|
# FTS_ROUTING_PROXY_SERVER_IP: 'freetakserver'
|
||||||
|
# FTS_INTEGRATION_MANAGER_PULLER_PORT: 19033
|
||||||
|
# FTS_INTEGRATION_MANAGER_PULLER_ADDRESS: 'freetakserver'
|
||||||
|
# FTS_INTEGRATION_MANAGER_PUBLISHER_PORT: 19034
|
||||||
|
# FTS_INTEGRATION_MANAGER_PUBLISHER_ADDRESS: 'freetakserver'
|
||||||
|
# FTS_OPTIMIZE_API: "True"
|
||||||
|
# FTS_DATA_RECEPTION_BUFFER: 1024
|
||||||
|
# FTS_MAX_RECEPTION_TIME: 4
|
||||||
|
# FTS_NUM_ROUTING_WORKERS: 3
|
||||||
|
# FTS_COT_TO_DB: "True"
|
||||||
|
# FTS_MAINLOOP_DELAY: 100
|
||||||
|
# FTS_EMERGENCY_RADIUS: 0
|
||||||
|
# FTS_LOG_LEVEL: "info"
|
||||||
|
#
|
||||||
|
# freetakserver-ui:
|
||||||
|
# image: ghcr.io/freetakteam/ui:latest
|
||||||
|
# container_name: freetakserver-ui
|
||||||
|
# hostname: freetakserver-ui
|
||||||
|
# restart: always
|
||||||
|
# networks:
|
||||||
|
# - int_net
|
||||||
|
# ports:
|
||||||
|
# - 5000:5000
|
||||||
|
# volumes:
|
||||||
|
# - /mnt/HoardingCow_docker_data/TAK/fts_ui_data:/home/freetak/data:z,rw
|
||||||
|
# environment:
|
||||||
|
# FTS_IP: "freetakserver"
|
||||||
|
# FTS_API_PORT: 19023
|
||||||
|
# FTS_API_PROTO: 'http'
|
||||||
|
# FTS_UI_EXPOSED_IP: 'freetakserver-ui'
|
||||||
|
# FTS_MAP_EXPOSED_IP: '127.0.0.1'
|
||||||
|
# FTS_MAP_PORT: 8000
|
||||||
|
# FTS_MAP_PROTO: 'http'
|
||||||
|
# FTS_UI_PORT: 5000
|
||||||
|
# FTS_UI_WSKEY: "${FTS_WEBSOCKET_KEY}"
|
||||||
|
# FTS_API_KEY: 'Bearer token'
|
||||||
|
# FTS_UI_SQLALCHEMY_DATABASE_URI: 'sqlite:////home/freetak/data/FTSServer-UI.db'
|
||||||
|
# labels:
|
||||||
|
# - "traefik.enable=true"
|
||||||
|
# - "traefik.docker.network=traefik-net"
|
||||||
|
# - "traefik.http.routers.fts-ui-http.rule=Host(`tak.lazyworkhorse.net`)"
|
||||||
|
# - "traefik.http.routers.fts-ui-http.entrypoints=web"
|
||||||
|
# - "traefik.http.routers.fts-ui-http.middlewares=redirect-to-https"
|
||||||
|
# - "traefik.http.routers.fts-ui-https.rule=Host(`tak.lazyworkhorse.net`)"
|
||||||
|
# - "traefik.http.routers.fts-ui-https.entrypoints=websecure"
|
||||||
|
# - "traefik.http.routers.fts-ui-https.tls=true"
|
||||||
|
# - "traefik.http.routers.fts-ui-https.tls.certresolver=njalla"
|
||||||
|
# - "traefik.http.services.fts-ui.loadbalancer.server.port=5000"
|
||||||
|
# - "traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https"
|
||||||
|
|
||||||
|
# ── WorldMonitor ──
|
||||||
|
# Real-time global intelligence dashboard
|
||||||
|
# Repo: https://github.com/koala73/worldmonitor
|
||||||
|
# Self-hosted, map-first OSINT with MCP support (39 tools)
|
||||||
|
services:
|
||||||
|
|
||||||
|
worldmonitor:
|
||||||
|
build:
|
||||||
|
context: https://github.com/koala73/worldmonitor.git
|
||||||
|
dockerfile: Dockerfile
|
||||||
|
image: worldmonitor:latest
|
||||||
|
container_name: worldmonitor
|
||||||
|
ports:
|
||||||
|
- "${WM_PORT:-3000}:8080"
|
||||||
|
environment:
|
||||||
|
UPSTASH_REDIS_REST_URL: "http://redis-rest:80"
|
||||||
|
UPSTASH_REDIS_REST_TOKEN: "${REDIS_TOKEN:?REDIS_TOKEN required}"
|
||||||
|
LOCAL_API_PORT: "46123"
|
||||||
|
LOCAL_API_MODE: "docker"
|
||||||
|
LOCAL_API_CLOUD_FALLBACK: "false"
|
||||||
|
WS_RELAY_URL: "http://ais-relay:3004"
|
||||||
|
# LLM providers (optional — features degrade gracefully)
|
||||||
|
LLM_API_URL: "${LLM_API_URL:-}"
|
||||||
|
LLM_API_KEY: "${LLM_API_KEY:-}"
|
||||||
|
LLM_MODEL: "${LLM_MODEL:-}"
|
||||||
|
GROQ_API_KEY: "${GROQ_API_KEY:-}"
|
||||||
|
# Data source API keys (optional — features degrade gracefully)
|
||||||
|
AISSTREAM_API_KEY: "${AISSTREAM_API_KEY:-}"
|
||||||
|
FINNHUB_API_KEY: "${FINNHUB_API_KEY:-}"
|
||||||
|
EIA_API_KEY: "${EIA_API_KEY:-}"
|
||||||
|
FRED_API_KEY: "${FRED_API_KEY:-}"
|
||||||
|
ACLED_ACCESS_TOKEN: "${ACLED_ACCESS_TOKEN:-}"
|
||||||
|
NASA_FIRMS_API_KEY: "${NASA_FIRMS_API_KEY:-}"
|
||||||
|
CLOUDFLARE_API_TOKEN: "${CLOUDFLARE_API_TOKEN:-}"
|
||||||
|
AVIATIONSTACK_API: "${AVIATIONSTACK_API:-}"
|
||||||
|
depends_on:
|
||||||
|
redis-rest:
|
||||||
|
condition: service_started
|
||||||
|
ais-relay:
|
||||||
|
condition: service_started
|
||||||
|
restart: unless-stopped
|
||||||
|
|
||||||
|
ais-relay:
|
||||||
|
build:
|
||||||
|
context: https://github.com/koala73/worldmonitor.git
|
||||||
|
dockerfile: Dockerfile.relay
|
||||||
|
image: worldmonitor-ais-relay:latest
|
||||||
|
container_name: worldmonitor-ais-relay
|
||||||
|
environment:
|
||||||
|
AISSTREAM_API_KEY: "${AISSTREAM_API_KEY:-}"
|
||||||
|
PORT: "3004"
|
||||||
|
restart: unless-stopped
|
||||||
|
|
||||||
|
redis:
|
||||||
|
image: docker.io/redis:7-alpine
|
||||||
|
container_name: worldmonitor-redis
|
||||||
|
command: >
|
||||||
|
redis-server
|
||||||
|
--requirepass "${REDIS_PASSWORD:?REDIS_PASSWORD required}"
|
||||||
|
--maxmemory 256mb
|
||||||
|
--maxmemory-policy allkeys-lru
|
||||||
|
volumes:
|
||||||
|
- wm-redis-data:/data
|
||||||
|
restart: unless-stopped
|
||||||
|
|
||||||
|
redis-rest:
|
||||||
|
build:
|
||||||
|
context: https://github.com/koala73/worldmonitor.git
|
||||||
|
dockerfile: docker/Dockerfile.redis-rest
|
||||||
|
image: worldmonitor-redis-rest:latest
|
||||||
|
container_name: worldmonitor-redis-rest
|
||||||
|
ports:
|
||||||
|
- "127.0.0.1:8079:80"
|
||||||
|
environment:
|
||||||
|
SRH_TOKEN: "${REDIS_TOKEN:?REDIS_TOKEN required}"
|
||||||
|
SRH_CONNECTION_STRING: "redis://:${REDIS_PASSWORD:?REDIS_PASSWORD required}@redis:6379"
|
||||||
|
depends_on:
|
||||||
|
- redis
|
||||||
|
restart: unless-stopped
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
wm-redis-data:
|
||||||
@@ -1,98 +0,0 @@
|
|||||||
services:
|
|
||||||
freetakserver:
|
|
||||||
image: ghcr.io/freetakteam/freetakserver:master
|
|
||||||
container_name: freetakserver
|
|
||||||
hostname: freetakserver
|
|
||||||
restart: always
|
|
||||||
networks:
|
|
||||||
- tak_backend
|
|
||||||
volumes:
|
|
||||||
- /mnt/HoardingCow_docker_data/TAK/fts_data:/opt/fts:z,rw
|
|
||||||
ports:
|
|
||||||
- 8087:8087
|
|
||||||
- 8089:8089
|
|
||||||
- 8443:8443
|
|
||||||
- 9000:9000
|
|
||||||
- 19023:19023
|
|
||||||
environment:
|
|
||||||
FTS_FED_PASSWORD: "${FTS_FED_PASSWORD}"
|
|
||||||
FTS_CLIENT_CERT_PASSWORD: "${FTS_CLIENT_CERT_PASSWORD}"
|
|
||||||
FTS_WEBSOCKET_KEY: "${FTS_WEBSOCKET_KEY}"
|
|
||||||
FTS_SECRET_KEY: "${FTS_SECRET_KEY}"
|
|
||||||
FTS_CONNECTION_MESSAGE: "Welcome to FreeTAKServer. The Parrot is not dead. It's just resting"
|
|
||||||
FTS_COT_PORT: 8087
|
|
||||||
FTS_SSLCOT_PORT: 8089
|
|
||||||
FTS_API_PORT: 19023
|
|
||||||
FTS_FED_PORT: 9000
|
|
||||||
FTS_DP_ADDRESS: 'freetakserver'
|
|
||||||
FTS_USER_ADDRESS: 'freetakserver'
|
|
||||||
FTS_API_ADDRESS: 'freetakserver'
|
|
||||||
FTS_ROUTING_PROXY_SUBSCRIBE_PORT: 19030
|
|
||||||
FTS_ROUTING_PROXY_SUBSCRIBE_IP: 'freetakserver'
|
|
||||||
FTS_ROUTING_PROXY_PUBLISHER_PORT: 19032
|
|
||||||
FTS_ROUTING_PROXY_PUBLISHER_IP: 'freetakserver'
|
|
||||||
FTS_ROUTING_PROXY_SERVER_PORT: 19031
|
|
||||||
FTS_ROUTING_PROXY_SERVER_IP: 'freetakserver'
|
|
||||||
FTS_INTEGRATION_MANAGER_PULLER_PORT: 19033
|
|
||||||
FTS_INTEGRATION_MANAGER_PULLER_ADDRESS: 'freetakserver'
|
|
||||||
FTS_INTEGRATION_MANAGER_PUBLISHER_PORT: 19034
|
|
||||||
FTS_INTEGRATION_MANAGER_PUBLISHER_ADDRESS: 'freetakserver'
|
|
||||||
FTS_OPTIMIZE_API: "True"
|
|
||||||
FTS_DATA_RECEPTION_BUFFER: 1024
|
|
||||||
FTS_MAX_RECEPTION_TIME: 4
|
|
||||||
FTS_NUM_ROUTING_WORKERS: 3
|
|
||||||
FTS_COT_TO_DB: "True"
|
|
||||||
FTS_MAINLOOP_DELAY: 100
|
|
||||||
FTS_EMERGENCY_RADIUS: 0
|
|
||||||
FTS_LOG_LEVEL: "info"
|
|
||||||
|
|
||||||
freetakserver-ui:
|
|
||||||
image: ghcr.io/freetakteam/ui:latest
|
|
||||||
container_name: freetakserver-ui
|
|
||||||
hostname: freetakserver-ui
|
|
||||||
restart: always
|
|
||||||
networks:
|
|
||||||
- tak_net
|
|
||||||
ports:
|
|
||||||
- 5000:5000
|
|
||||||
volumes:
|
|
||||||
- /mnt/HoardingCow_docker_data/TAK/fts_ui_data:/home/freetak/data:z,rw
|
|
||||||
environment:
|
|
||||||
FTS_IP: "freetakserver"
|
|
||||||
FTS_API_PORT: 19023
|
|
||||||
FTS_API_PROTO: 'http'
|
|
||||||
FTS_UI_EXPOSED_IP: 'freetakserver-ui'
|
|
||||||
FTS_MAP_EXPOSED_IP: '127.0.0.1'
|
|
||||||
FTS_MAP_PORT: 8000
|
|
||||||
FTS_MAP_PROTO: 'http'
|
|
||||||
FTS_UI_PORT: 5000
|
|
||||||
FTS_UI_WSKEY: "${FTS_WEBSOCKET_KEY}"
|
|
||||||
FTS_API_KEY: 'Bearer token'
|
|
||||||
FTS_UI_SQLALCHEMY_DATABASE_URI: 'sqlite:////home/freetak/data/FTSServer-UI.db'
|
|
||||||
labels:
|
|
||||||
- "traefik.enable=true"
|
|
||||||
- "traefik.docker.network=traefik-net"
|
|
||||||
|
|
||||||
# HTTP -> HTTPS Redirect
|
|
||||||
- "traefik.http.routers.fts-ui-http.rule=Host(`tak.lazyworkhorse.net`)"
|
|
||||||
- "traefik.http.routers.fts-ui-http.entrypoints=web"
|
|
||||||
- "traefik.http.routers.fts-ui-http.middlewares=redirect-to-https"
|
|
||||||
|
|
||||||
# HTTPS Router
|
|
||||||
- "traefik.http.routers.fts-ui-https.rule=Host(`tak.lazyworkhorse.net`)"
|
|
||||||
- "traefik.http.routers.fts-ui-https.entrypoints=websecure"
|
|
||||||
- "traefik.http.routers.fts-ui-https.tls=true"
|
|
||||||
- "traefik.http.routers.fts-ui-https.tls.certresolver=njalla"
|
|
||||||
|
|
||||||
# Service & Port
|
|
||||||
- "traefik.http.services.fts-ui.loadbalancer.server.port=5000"
|
|
||||||
|
|
||||||
# Reuse your existing redirect middleware
|
|
||||||
- "traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https"
|
|
||||||
|
|
||||||
networks:
|
|
||||||
tak_net:
|
|
||||||
external: true
|
|
||||||
tak_backend:
|
|
||||||
driver: bridge
|
|
||||||
name: tak_backend
|
|
||||||
Reference in New Issue
Block a user