initial COM2 system snapshot

This commit is contained in:
gitea
2026-03-06 15:22:40 +00:00
commit 9c0fa49baf
4377 changed files with 273033 additions and 0 deletions

View File

@@ -0,0 +1,43 @@
version: "3.9"
services:
postgres:
image: postgres:16
container_name: hxki-postgres
restart: unless-stopped
networks:
- hxki-internal
environment:
POSTGRES_USER: hxki
POSTGRES_PASSWORD: supersecure
POSTGRES_DB: hxki_roles
volumes:
- /opt/hx-ki/postgres:/var/lib/postgresql/data
ports:
- "5432:5432"
n8n:
image: docker.n8n.io/n8nio/n8n
container_name: hxki-n8n
restart: unless-stopped
depends_on:
- postgres
networks:
- hxki-internal
environment:
NATS_URL: "nats://49.12.97.28:4222"
DB_TYPE: postgresdb
DB_POSTGRESDB_HOST: postgres
DB_POSTGRESDB_PORT: 5432
DB_POSTGRESDB_USER: hxki
DB_POSTGRESDB_PASSWORD: supersecure
DB_POSTGRESDB_DATABASE: hxki_roles
N8N_HOST: 0.0.0.0
N8N_PORT: 5678
N8N_PROTOCOL: http
ports:
- "5678:5678"
networks:
hxki-internal:
external: true

View File

@@ -0,0 +1,14 @@
version: "3.8"
services:
hxki-nats-fsn:
image: nats:2.12.2
container_name: hxki-nats-fsn
command: ["-js", "-m", "8222"]
networks:
- hxki-internal
restart: unless-stopped
networks:
hxki-internal:
external: true

View File

@@ -0,0 +1,18 @@
version: "3.8"
services:
hxki-node-exporter:
image: prom/node-exporter:v1.8.1
container_name: hxki-node-exporter
command:
- "--path.rootfs=/host"
volumes:
- "/:/host:ro,rslave"
networks:
- hxki-internal
user: "nobody"
restart: unless-stopped
networks:
hxki-internal:
external: true

View File

@@ -0,0 +1,18 @@
version: "3.8"
services:
hx-node-exporter:
image: prom/node-exporter:v1.8.1
container_name: hx-node-exporter
command:
- "--path.rootfs=/host"
volumes:
- "/:/host:ro,rslave"
networks:
- hxki-internal
user: "nobody"
restart: unless-stopped
networks:
hxki-internal:
external: true

139
docker/docker-compose.yml Normal file
View File

@@ -0,0 +1,139 @@
version: "3.9"
networks:
hxki-internal:
external: true
services:
# -------------------------------------------
# POSTGRES (für n8n)
# -------------------------------------------
postgres:
image: postgres:16
container_name: hxki-postgres
restart: unless-stopped
networks:
- hxki-internal
environment:
POSTGRES_USER: hxki
POSTGRES_PASSWORD: supersecure
POSTGRES_DB: hxki_roles
volumes:
- /opt/hx-ki/postgres:/var/lib/postgresql/data
ports:
- "5432:5432"
# -------------------------------------------
# N8N DAS MASTER-NERVENSYSTEM
# -------------------------------------------
n8n:
image: docker.n8n.io/n8nio/n8n:latest
container_name: hxki-n8n
restart: unless-stopped
depends_on:
- postgres
networks:
- hxki-internal
environment:
N8N_HOST: n8n.hx-ki.com
N8N_PORT: 5678
WEBHOOK_URL: https://n8n.hx-ki.com/
N8N_PROTOCOL: https
DB_TYPE: postgresdb
DB_POSTGRESDB_HOST: postgres
DB_POSTGRESDB_PORT: 5432
DB_POSTGRESDB_USER: hxki
DB_POSTGRESDB_PASSWORD: supersecure
DB_POSTGRESDB_DATABASE: hxki_roles
NATS_URL: nats://49.12.97.28:4222
volumes:
- /data/HXKI_WORKSPACE/router:/home/node/.n8n
- /data/HXKI_WORKSPACE:/data/HXKI_WORKSPACE
ports:
- "5678:5678"
# -------------------------------------------
# CADDY SUBDOMAINS, TLS, ROUTING
# -------------------------------------------
hxki-caddy:
image: caddy:2
container_name: hxki-caddy
restart: unless-stopped
networks:
- hxki-internal
ports:
- "80:80"
- "443:443"
volumes:
- /opt/hx-ki/docker/hxki-caddy/Caddyfile:/etc/caddy/Caddyfile
- caddy_data:/data
- caddy_config:/config
# -------------------------------------------
# GRAFANA
# -------------------------------------------
grafana:
image: grafana/grafana-oss:latest
container_name: hxki-grafana
restart: unless-stopped
networks:
- hxki-internal
ports:
- "3000:3000"
volumes:
- /opt/hx-ki/grafana:/var/lib/grafana
# -------------------------------------------
# MARIA DB (für mautic)
# -------------------------------------------
mariadb:
image: mariadb:10.11
container_name: hxki-mariadb
restart: unless-stopped
networks:
- hxki-internal
environment:
MYSQL_ROOT_PASSWORD: supersecure
MYSQL_DATABASE: mautic
volumes:
- /opt/hx-ki/mariadb:/var/lib/mysql
ports:
- "3306:3306"
# -------------------------------------------
# MAUTIC
# -------------------------------------------
mautic:
image: mautic/mautic:5-apache
container_name: hxki-mautic
restart: unless-stopped
depends_on:
- mariadb
networks:
- hxki-internal
environment:
MAUTIC_DB_HOST: mariadb
MAUTIC_DB_USER: root
MAUTIC_DB_PASSWORD: supersecure
MAUTIC_DB_NAME: mautic
ports:
- "8080:80"
# -------------------------------------------
# GITEA
# -------------------------------------------
gitea:
image: gitea/gitea:latest
container_name: hxki-gitea
restart: unless-stopped
networks:
- hxki-internal
ports:
- "3001:3000"
volumes:
- /var/lib/gitea:/data
volumes:
caddy_data:
caddy_config:

View File

@@ -0,0 +1,113 @@
version: "3.9"
services:
postgres:
image: postgres:16
container_name: hxki-postgres
restart: unless-stopped
networks:
- hxki-internal
environment:
- NATS_URL=nats://91.98.42.205:4222
POSTGRES_USER: hxki
POSTGRES_PASSWORD: supersecure
POSTGRES_DB: hxki_roles
volumes:
- /opt/hx-ki/postgres:/var/lib/postgresql/data
ports:
- "5432:5432"
n8n:
image: docker.n8n.io/n8nio/n8n
container_name: hxki-n8n
restart: unless-stopped
depends_on:
- postgres
networks:
- hxki-internal
environment:
- NATS_URL=nats://91.98.42.205:4222
DB_TYPE: postgresdb
DB_POSTGRESDB_HOST: postgres
DB_POSTGRESDB_PORT: 5432
DB_POSTGRESDB_USER: hxki
DB_POSTGRESDB_PASSWORD: supersecure
DB_POSTGRESDB_DATABASE: hxki_roles
N8N_HOST: 0.0.0.0
N8N_PORT: 5678
N8N_PROTOCOL: http
ports:
- "5678:5678"
web:
image: nginx:latest
container_name: hxki-web
restart: unless-stopped
networks:
- hxki-internal
volumes:
- /opt/hx-ki/web:/usr/share/nginx/html:ro
mariadb:
image: mariadb:10.11
container_name: hxki-mariadb
restart: unless-stopped
networks:
- hxki-internal
environment:
- NATS_URL=nats://91.98.42.205:4222
MYSQL_ROOT_PASSWORD: supersecure
MYSQL_DATABASE: mautic
MYSQL_USER: mautic
MYSQL_PASSWORD: mauticpass
volumes:
- /opt/hx-ki/mautic/db:/var/lib/mysql
ports:
- "3306:3306"
mautic:
image: mautic/mautic:5-apache
container_name: hxki-mautic
restart: unless-stopped
depends_on:
- mariadb
networks:
- hxki-internal
environment:
- NATS_URL=nats://91.98.42.205:4222
MAUTIC_DB_HOST: mariadb
MAUTIC_DB_USER: mautic
MAUTIC_DB_PASSWORD: mauticpass
MAUTIC_DB_NAME: mautic
MAUTIC_TRUSTED_PROXIES: 0.0.0.0/0
volumes:
- /opt/hx-ki/mautic/app:/var/www/html
ports:
- "8080:80"
gitea:
image: gitea/gitea:latest
container_name: hxki-gitea
restart: unless-stopped
networks:
- hxki-internal
volumes:
- /opt/hx-ki/archive:/data
ports:
- "3000:3000"
- "222:22"
grafana:
image: grafana/grafana-oss:latest
container_name: hxki-grafana
restart: unless-stopped
networks:
- hxki-internal
volumes:
- /opt/hx-ki/grafana:/var/lib/grafana
ports:
- "3001:3000"
networks:
hxki-internal:
external: true

View File

@@ -0,0 +1,111 @@
version: "3.9"
services:
postgres:
image: postgres:16
container_name: hxki-postgres
restart: unless-stopped
networks:
- hxki-internal
environment:
POSTGRES_USER: hxki
POSTGRES_PASSWORD: supersecure
POSTGRES_DB: hxki_roles
volumes:
- /opt/hx-ki/postgres:/var/lib/postgresql/data
ports:
- "5432:5432"
n8n:
image: docker.n8n.io/n8nio/n8n
container_name: hxki-n8n
restart: unless-stopped
depends_on:
- postgres
networks:
- hxki-internal
environment:
DB_TYPE: postgresdb
DB_POSTGRESDB_HOST: postgres
DB_POSTGRESDB_PORT: 5432
DB_POSTGRESDB_USER: hxki
DB_POSTGRESDB_PASSWORD: supersecure
DB_POSTGRESDB_DATABASE: hxki_roles
N8N_HOST: 0.0.0.0
N8N_PORT: 5678
N8N_PROTOCOL: http
ports:
- "5678:5678"
web:
image: nginx:latest
container_name: hxki-web
restart: unless-stopped
networks:
- hxki-internal
volumes:
- /opt/hx-ki/web:/usr/share/nginx/html:ro
ports:
- "80:80"
mariadb:
image: mariadb:10.11
container_name: hxki-mariadb
restart: unless-stopped
networks:
- hxki-internal
environment:
MYSQL_ROOT_PASSWORD: supersecure
MYSQL_DATABASE: mautic
MYSQL_USER: mautic
MYSQL_PASSWORD: mauticpass
volumes:
- /opt/hx-ki/mautic/db:/var/lib/mysql
ports:
- "3306:3306"
mautic:
image: mautic/mautic:5-apache
container_name: hxki-mautic
restart: unless-stopped
depends_on:
- mariadb
networks:
- hxki-internal
environment:
MAUTIC_DB_HOST: mariadb
MAUTIC_DB_USER: mautic
MAUTIC_DB_PASSWORD: mauticpass
MAUTIC_DB_NAME: mautic
MAUTIC_TRUSTED_PROXIES: 0.0.0.0/0
volumes:
- /opt/hx-ki/mautic/app:/var/www/html
ports:
- "8080:80"
gitea:
image: gitea/gitea:latest
container_name: hxki-gitea
restart: unless-stopped
networks:
- hxki-internal
volumes:
- /opt/hx-ki/archive:/data
ports:
- "3000:3000"
- "222:22"
grafana:
image: grafana/grafana-oss:latest
container_name: hxki-grafana
restart: unless-stopped
networks:
- hxki-internal
volumes:
- /opt/hx-ki/grafana:/var/lib/grafana
ports:
- "3001:3000"
networks:
hxki-internal:
external: true

View File

@@ -0,0 +1,134 @@
version: "3.9"
services:
syncthing:
image: lscr.io/linuxserver/syncthing:latest
container_name: hxki-syncthing
restart: unless-stopped
networks:
- hxki-internal
volumes:
- /opt/hx-ki/syncthing/config:/config
- /opt/hx-ki/syncthing/data:/data
ports:
- "8384:8384"
- "22000:22000/tcp"
- "22000:22000/udp"
- "21027:21027/udp"
hxki-web:
container_name: hxki-web
build:
context: /opt/hx-ki/web/hx-ki-website
restart: unless-stopped
networks:
- hxki-internal
postgres:
image: postgres:16
container_name: hxki-postgres
restart: unless-stopped
networks:
- hxki-internal
environment:
POSTGRES_USER: hxki
POSTGRES_PASSWORD: supersecure
POSTGRES_DB: hxki_roles
volumes:
- /opt/hx-ki/postgres:/var/lib/postgresql/data
ports:
- "5432:5432"
n8n:
image: docker.n8n.io/n8nio/n8n
container_name: hxki-n8n
restart: unless-stopped
depends_on:
- postgres
networks:
- hxki-internal
environment:
DB_TYPE: postgresdb
DB_POSTGRESDB_HOST: postgres
DB_POSTGRESDB_PORT: 5432
DB_POSTGRESDB_USER: hxki
DB_POSTGRESDB_PASSWORD: supersecure
DB_POSTGRESDB_DATABASE: hxki_roles
N8N_HOST: 0.0.0.0
N8N_PORT: 5678
N8N_PROTOCOL: http
ports:
- "5678:5678"
web:
image: nginx:latest
container_name: hxki-web
restart: unless-stopped
networks:
- hxki-internal
volumes:
- /opt/hx-ki/web:/usr/share/nginx/html:ro
ports:
- "80:80"
mariadb:
image: mariadb:10.11
container_name: hxki-mariadb
restart: unless-stopped
networks:
- hxki-internal
environment:
MYSQL_ROOT_PASSWORD: supersecure
MYSQL_DATABASE: mautic
MYSQL_USER: mautic
MYSQL_PASSWORD: mauticpass
volumes:
- /opt/hx-ki/mautic/db:/var/lib/mysql
ports:
- "3306:3306"
mautic:
image: mautic/mautic:5-apache
container_name: hxki-mautic
restart: unless-stopped
depends_on:
- mariadb
networks:
- hxki-internal
environment:
MAUTIC_DB_HOST: mariadb
MAUTIC_DB_USER: mautic
MAUTIC_DB_PASSWORD: mauticpass
MAUTIC_DB_NAME: mautic
MAUTIC_TRUSTED_PROXIES: 0.0.0.0/0
volumes:
- /opt/hx-ki/mautic/app:/var/www/html
ports:
- "8080:80"
gitea:
image: gitea/gitea:latest
container_name: hxki-gitea
restart: unless-stopped
networks:
- hxki-internal
volumes:
- /opt/hx-ki/archive:/data
ports:
- "3000:3000"
- "222:22"
grafana:
image: grafana/grafana-oss:latest
container_name: hxki-grafana
restart: unless-stopped
networks:
- hxki-internal
volumes:
- /opt/hx-ki/grafana:/var/lib/grafana
ports:
- "3001:3000"
networks:
hxki-internal:
external: true

View File

@@ -0,0 +1,127 @@
version: "3.9"
services:
hxki-web:
build:
context: /opt/hx-ki/web/hx-ki-website
restart: unless-stopped
networks:
- hxki-internal
syncthing:
image: lscr.io/linuxserver/syncthing:latest
container_name: hxki-syncthing
restart: unless-stopped
networks:
- hxki-internal
volumes:
- /opt/hx-ki/syncthing/config:/config
- /opt/hx-ki/syncthing/data:/data
postgres:
image: postgres:16
container_name: hxki-postgres
restart: unless-stopped
networks:
- hxki-internal
environment:
POSTGRES_USER: hxki
POSTGRES_PASSWORD: supersecure
POSTGRES_DB: hxki_roles
volumes:
- /opt/hx-ki/postgres:/var/lib/postgresql/data
ports:
- "5432:5432"
n8n:
image: docker.n8n.io/n8nio/n8n
container_name: hxki-n8n
restart: unless-stopped
depends_on:
- postgres
networks:
- hxki-internal
environment:
DB_TYPE: postgresdb
DB_POSTGRESDB_HOST: postgres
DB_POSTGRESDB_PORT: 5432
DB_POSTGRESDB_USER: hxki
DB_POSTGRESDB_PASSWORD: supersecure
DB_POSTGRESDB_DATABASE: hxki_roles
N8N_HOST: 0.0.0.0
N8N_PORT: 5678
N8N_PROTOCOL: http
ports:
- "5678:5678"
web:
image: nginx:latest
container_name: hxki-web
restart: unless-stopped
networks:
- hxki-internal
volumes:
- /opt/hx-ki/web:/usr/share/nginx/html:ro
ports:
- "80:80"
mariadb:
image: mariadb:10.11
container_name: hxki-mariadb
restart: unless-stopped
networks:
- hxki-internal
environment:
MYSQL_ROOT_PASSWORD: supersecure
MYSQL_DATABASE: mautic
MYSQL_USER: mautic
MYSQL_PASSWORD: mauticpass
volumes:
- /opt/hx-ki/mautic/db:/var/lib/mysql
ports:
- "3306:3306"
mautic:
image: mautic/mautic:5-apache
container_name: hxki-mautic
restart: unless-stopped
depends_on:
- mariadb
networks:
- hxki-internal
environment:
MAUTIC_DB_HOST: mariadb
MAUTIC_DB_USER: mautic
MAUTIC_DB_PASSWORD: mauticpass
MAUTIC_DB_NAME: mautic
MAUTIC_TRUSTED_PROXIES: 0.0.0.0/0
volumes:
- /opt/hx-ki/mautic/app:/var/www/html
ports:
- "8080:80"
gitea:
image: gitea/gitea:latest
container_name: hxki-gitea
restart: unless-stopped
networks:
- hxki-internal
volumes:
- /opt/hx-ki/archive:/data
ports:
- "3000:3000"
- "222:22"
grafana:
image: grafana/grafana-oss:latest
container_name: hxki-grafana
restart: unless-stopped
networks:
- hxki-internal
volumes:
- /opt/hx-ki/grafana:/var/lib/grafana
ports:
- "3001:3000"
networks:
hxki-internal:
external: true

View File

@@ -0,0 +1,132 @@
version: "3.9"
services:
hxki-web:
build:
context: /opt/hx-ki/web/hx-ki-website
restart: unless-stopped
networks:
- hxki-internal
syncthing:
image: lscr.io/linuxserver/syncthing:latest
container_name: hxki-syncthing
restart: unless-stopped
networks:
- hxki-internal
volumes:
- /opt/hx-ki/syncthing/config:/config
- /opt/hx-ki/syncthing/data:/data
ports:
- "8384:8384"
- "22000:22000/tcp"
- "22000:22000/udp"
- "21027:21027/udp"
postgres:
image: postgres:16
container_name: hxki-postgres
restart: unless-stopped
networks:
- hxki-internal
environment:
POSTGRES_USER: hxki
POSTGRES_PASSWORD: supersecure
POSTGRES_DB: hxki_roles
volumes:
- /opt/hx-ki/postgres:/var/lib/postgresql/data
ports:
- "5432:5432"
n8n:
image: docker.n8n.io/n8nio/n8n
container_name: hxki-n8n
restart: unless-stopped
depends_on:
- postgres
networks:
- hxki-internal
environment:
DB_TYPE: postgresdb
DB_POSTGRESDB_HOST: postgres
DB_POSTGRESDB_PORT: 5432
DB_POSTGRESDB_USER: hxki
DB_POSTGRESDB_PASSWORD: supersecure
DB_POSTGRESDB_DATABASE: hxki_roles
N8N_HOST: 0.0.0.0
N8N_PORT: 5678
N8N_PROTOCOL: http
ports:
- "5678:5678"
web:
image: nginx:latest
container_name: hxki-web
restart: unless-stopped
networks:
- hxki-internal
volumes:
- /opt/hx-ki/web:/usr/share/nginx/html:ro
ports:
- "80:80"
mariadb:
image: mariadb:10.11
container_name: hxki-mariadb
restart: unless-stopped
networks:
- hxki-internal
environment:
MYSQL_ROOT_PASSWORD: supersecure
MYSQL_DATABASE: mautic
MYSQL_USER: mautic
MYSQL_PASSWORD: mauticpass
volumes:
- /opt/hx-ki/mautic/db:/var/lib/mysql
ports:
- "3306:3306"
mautic:
image: mautic/mautic:5-apache
container_name: hxki-mautic
restart: unless-stopped
depends_on:
- mariadb
networks:
- hxki-internal
environment:
MAUTIC_DB_HOST: mariadb
MAUTIC_DB_USER: mautic
MAUTIC_DB_PASSWORD: mauticpass
MAUTIC_DB_NAME: mautic
MAUTIC_TRUSTED_PROXIES: 0.0.0.0/0
volumes:
- /opt/hx-ki/mautic/app:/var/www/html
ports:
- "8080:80"
gitea:
image: gitea/gitea:latest
container_name: hxki-gitea
restart: unless-stopped
networks:
- hxki-internal
volumes:
- /opt/hx-ki/archive:/data
ports:
- "3000:3000"
- "222:22"
grafana:
image: grafana/grafana-oss:latest
container_name: hxki-grafana
restart: unless-stopped
networks:
- hxki-internal
volumes:
- /opt/hx-ki/grafana:/var/lib/grafana
ports:
- "3001:3000"
networks:
hxki-internal:
external: true

View File

@@ -0,0 +1,127 @@
version: "3.9"
services:
hxki-web:
build:
context: /opt/hx-ki/web/hx-ki-website
restart: unless-stopped
networks:
- hxki-internal
syncthing:
image: lscr.io/linuxserver/syncthing:latest
container_name: hxki-syncthing
restart: unless-stopped
networks:
- hxki-internal
volumes:
- /opt/hx-ki/syncthing/config:/config
- /opt/hx-ki/syncthing/data:/data
postgres:
image: postgres:16
container_name: hxki-postgres
restart: unless-stopped
networks:
- hxki-internal
environment:
POSTGRES_USER: hxki
POSTGRES_PASSWORD: supersecure
POSTGRES_DB: hxki_roles
volumes:
- /opt/hx-ki/postgres:/var/lib/postgresql/data
ports:
- "5432:5432"
n8n:
image: docker.n8n.io/n8nio/n8n
container_name: hxki-n8n
restart: unless-stopped
depends_on:
- postgres
networks:
- hxki-internal
environment:
DB_TYPE: postgresdb
DB_POSTGRESDB_HOST: postgres
DB_POSTGRESDB_PORT: 5432
DB_POSTGRESDB_USER: hxki
DB_POSTGRESDB_PASSWORD: supersecure
DB_POSTGRESDB_DATABASE: hxki_roles
N8N_HOST: 0.0.0.0
N8N_PORT: 5678
N8N_PROTOCOL: http
ports:
- "5678:5678"
web:
image: nginx:latest
container_name: hxki-web
restart: unless-stopped
networks:
- hxki-internal
volumes:
- /opt/hx-ki/web:/usr/share/nginx/html:ro
ports:
- "80:80"
mariadb:
image: mariadb:10.11
container_name: hxki-mariadb
restart: unless-stopped
networks:
- hxki-internal
environment:
MYSQL_ROOT_PASSWORD: supersecure
MYSQL_DATABASE: mautic
MYSQL_USER: mautic
MYSQL_PASSWORD: mauticpass
volumes:
- /opt/hx-ki/mautic/db:/var/lib/mysql
ports:
- "3306:3306"
mautic:
image: mautic/mautic:5-apache
container_name: hxki-mautic
restart: unless-stopped
depends_on:
- mariadb
networks:
- hxki-internal
environment:
MAUTIC_DB_HOST: mariadb
MAUTIC_DB_USER: mautic
MAUTIC_DB_PASSWORD: mauticpass
MAUTIC_DB_NAME: mautic
MAUTIC_TRUSTED_PROXIES: 0.0.0.0/0
volumes:
- /opt/hx-ki/mautic/app:/var/www/html
ports:
- "8080:80"
gitea:
image: gitea/gitea:latest
container_name: hxki-gitea
restart: unless-stopped
networks:
- hxki-internal
volumes:
- /opt/hx-ki/archive:/data
ports:
- "3000:3000"
- "222:22"
grafana:
image: grafana/grafana-oss:latest
container_name: hxki-grafana
restart: unless-stopped
networks:
- hxki-internal
volumes:
- /opt/hx-ki/grafana:/var/lib/grafana
ports:
- "3001:3000"
networks:
hxki-internal:
external: true

View File

@@ -0,0 +1,139 @@
version: "3.9"
networks:
hxki-internal:
external: true
services:
# -------------------------------------------
# POSTGRES (für n8n)
# -------------------------------------------
postgres:
image: postgres:16
container_name: hxki-postgres
restart: unless-stopped
networks:
- hxki-internal
environment:
POSTGRES_USER: hxki
POSTGRES_PASSWORD: supersecure
POSTGRES_DB: hxki_roles
volumes:
- /opt/hx-ki/postgres:/var/lib/postgresql/data
ports:
- "5432:5432"
# -------------------------------------------
# N8N DAS MASTER-NERVENSYSTEM
# -------------------------------------------
n8n:
image: docker.n8n.io/n8nio/n8n:latest
container_name: hxki-n8n
restart: unless-stopped
depends_on:
- postgres
networks:
- hxki-internal
environment:
N8N_HOST: n8n.hx-ki.com
N8N_PORT: 5678
WEBHOOK_URL: https://n8n.hx-ki.com/
N8N_PROTOCOL: https
DB_TYPE: postgresdb
DB_POSTGRESDB_HOST: postgres
DB_POSTGRESDB_PORT: 5432
DB_POSTGRESDB_USER: hxki
DB_POSTGRESDB_PASSWORD: supersecure
DB_POSTGRESDB_DATABASE: hxki_roles
NATS_URL: nats://49.12.97.28:4222
volumes:
- /data/HXKI_WORKSPACE/router:/home/node/.n8n
- /data/HXKI_WORKSPACE:/data/HXKI_WORKSPACE
ports:
- "5678:5678"
# -------------------------------------------
# CADDY SUBDOMAINS, TLS, ROUTING
# -------------------------------------------
caddy:
image: caddy:2
container_name: hx-caddy
restart: unless-stopped
networks:
- hxki-internal
ports:
- "80:80"
- "443:443"
volumes:
- /opt/hx-ki/docker/hxki-caddy/Caddyfile:/etc/caddy/Caddyfile
- caddy_data:/data
- caddy_config:/config
# -------------------------------------------
# GRAFANA
# -------------------------------------------
grafana:
image: grafana/grafana-oss:latest
container_name: hxki-grafana
restart: unless-stopped
networks:
- hxki-internal
ports:
- "3000:3000"
volumes:
- /opt/hx-ki/grafana:/var/lib/grafana
# -------------------------------------------
# MARIA DB (für mautic)
# -------------------------------------------
mariadb:
image: mariadb:10.11
container_name: hxki-mariadb
restart: unless-stopped
networks:
- hxki-internal
environment:
MYSQL_ROOT_PASSWORD: supersecure
MYSQL_DATABASE: mautic
volumes:
- /opt/hx-ki/mariadb:/var/lib/mysql
ports:
- "3306:3306"
# -------------------------------------------
# MAUTIC
# -------------------------------------------
mautic:
image: mautic/mautic:5-apache
container_name: hxki-mautic
restart: unless-stopped
depends_on:
- mariadb
networks:
- hxki-internal
environment:
MAUTIC_DB_HOST: mariadb
MAUTIC_DB_USER: root
MAUTIC_DB_PASSWORD: supersecure
MAUTIC_DB_NAME: mautic
ports:
- "8080:80"
# -------------------------------------------
# GITEA
# -------------------------------------------
gitea:
image: gitea/gitea:latest
container_name: hxki-gitea
restart: unless-stopped
networks:
- hxki-internal
ports:
- "3001:3000"
volumes:
- /var/lib/gitea:/data
volumes:
caddy_data:
caddy_config:

View File

@@ -0,0 +1,126 @@
version: "3.9"
services:
syncthing:
image: lscr.io/linuxserver/syncthing:latest
container_name: hxki-syncthing
restart: unless-stopped
networks:
- hxki-internal
volumes:
- /opt/hx-ki/syncthing/config:/config
- /opt/hx-ki/syncthing/data:/data
ports:
- "8384:8384"
- "22000:22000/tcp"
- "22000:22000/udp"
- "21027:21027/udp"
postgres:
image: postgres:16
container_name: hxki-postgres
restart: unless-stopped
networks:
- hxki-internal
environment:
POSTGRES_USER: hxki
POSTGRES_PASSWORD: supersecure
POSTGRES_DB: hxki_roles
volumes:
- /opt/hx-ki/postgres:/var/lib/postgresql/data
ports:
- "5432:5432"
n8n:
image: docker.n8n.io/n8nio/n8n
container_name: hxki-n8n
restart: unless-stopped
depends_on:
- postgres
networks:
- hxki-internal
environment:
DB_TYPE: postgresdb
DB_POSTGRESDB_HOST: postgres
DB_POSTGRESDB_PORT: 5432
DB_POSTGRESDB_USER: hxki
DB_POSTGRESDB_PASSWORD: supersecure
DB_POSTGRESDB_DATABASE: hxki_roles
N8N_HOST: 0.0.0.0
N8N_PORT: 5678
N8N_PROTOCOL: http
ports:
- "5678:5678"
web:
image: nginx:latest
container_name: hxki-web
restart: unless-stopped
networks:
- hxki-internal
volumes:
- /opt/hx-ki/web:/usr/share/nginx/html:ro
ports:
- "80:80"
mariadb:
image: mariadb:10.11
container_name: hxki-mariadb
restart: unless-stopped
networks:
- hxki-internal
environment:
MYSQL_ROOT_PASSWORD: supersecure
MYSQL_DATABASE: mautic
MYSQL_USER: mautic
MYSQL_PASSWORD: mauticpass
volumes:
- /opt/hx-ki/mautic/db:/var/lib/mysql
ports:
- "3306:3306"
mautic:
image: mautic/mautic:5-apache
container_name: hxki-mautic
restart: unless-stopped
depends_on:
- mariadb
networks:
- hxki-internal
environment:
MAUTIC_DB_HOST: mariadb
MAUTIC_DB_USER: mautic
MAUTIC_DB_PASSWORD: mauticpass
MAUTIC_DB_NAME: mautic
MAUTIC_TRUSTED_PROXIES: 0.0.0.0/0
volumes:
- /opt/hx-ki/mautic/app:/var/www/html
ports:
- "8080:80"
gitea:
image: gitea/gitea:latest
container_name: hxki-gitea
restart: unless-stopped
networks:
- hxki-internal
volumes:
- /opt/hx-ki/archive:/data
ports:
- "3000:3000"
- "222:22"
grafana:
image: grafana/grafana-oss:latest
container_name: hxki-grafana
restart: unless-stopped
networks:
- hxki-internal
volumes:
- /opt/hx-ki/grafana:/var/lib/grafana
ports:
- "3001:3000"
networks:
hxki-internal:
external: true

View File

@@ -0,0 +1,17 @@
services:
hxki-openwebui:
image: ghcr.io/open-webui/open-webui:main
container_name: hxki-openwebui
ports:
- "3002:3000"
volumes:
- /opt/hx-ki/openwebui:/data
environment:
- WEBUI_AUTH=False
restart: unless-stopped
networks:
- hxki-internal
networks:
hxki-internal:
external: true

View File

@@ -0,0 +1,161 @@
#!/usr/bin/env bash
set -euo pipefail
echo ">> HX-KI Falkenstein Layer-3 Setup startet..."
BASE_DIR="/opt/hx-ki"
echo ">> Verzeichnisse anlegen..."
mkdir -p "${BASE_DIR}/syncthing/config"
mkdir -p "${BASE_DIR}/syncthing/data"
mkdir -p "${BASE_DIR}/postres" || true
mkdir -p "${BASE_DIR}/postgres"
mkdir -p "${BASE_DIR}/web"
mkdir -p "${BASE_DIR}/mautic/db"
mkdir -p "${BASE_DIR}/mautic/app"
mkdir -p "${BASE_DIR}/archive"
mkdir -p "${BASE_DIR}/grafana"
echo ">> Docker Netzwerk hxki-internal anlegen (falls nötig)..."
docker network create hxki-internal || true
COMPOSE_FILE="${BASE_DIR}/docker/docker-compose.yml"
mkdir -p "${BASE_DIR}/docker"
echo ">> docker-compose.yml schreiben nach ${COMPOSE_FILE}..."
cat > "${COMPOSE_FILE}" << 'EOF'
version: "3.9"
services:
syncthing:
image: lscr.io/linuxserver/syncthing:latest
container_name: hxki-syncthing
restart: unless-stopped
networks:
- hxki-internal
volumes:
- /opt/hx-ki/syncthing/config:/config
- /opt/hx-ki/syncthing/data:/data
ports:
- "8384:8384"
- "22000:22000/tcp"
- "22000:22000/udp"
- "21027:21027/udp"
postgres:
image: postgres:16
container_name: hxki-postgres
restart: unless-stopped
networks:
- hxki-internal
environment:
POSTGRES_USER: hxki
POSTGRES_PASSWORD: supersecure
POSTGRES_DB: hxki_roles
volumes:
- /opt/hx-ki/postgres:/var/lib/postgresql/data
ports:
- "5432:5432"
n8n:
image: docker.n8n.io/n8nio/n8n
container_name: hxki-n8n
restart: unless-stopped
depends_on:
- postgres
networks:
- hxki-internal
environment:
DB_TYPE: postgresdb
DB_POSTGRESDB_HOST: postgres
DB_POSTGRESDB_PORT: 5432
DB_POSTGRESDB_USER: hxki
DB_POSTGRESDB_PASSWORD: supersecure
DB_POSTGRESDB_DATABASE: hxki_roles
N8N_HOST: 0.0.0.0
N8N_PORT: 5678
N8N_PROTOCOL: http
ports:
- "5678:5678"
web:
image: nginx:latest
container_name: hxki-web
restart: unless-stopped
networks:
- hxki-internal
volumes:
- /opt/hx-ki/web:/usr/share/nginx/html:ro
ports:
- "80:80"
mariadb:
image: mariadb:10.11
container_name: hxki-mariadb
restart: unless-stopped
networks:
- hxki-internal
environment:
MYSQL_ROOT_PASSWORD: supersecure
MYSQL_DATABASE: mautic
MYSQL_USER: mautic
MYSQL_PASSWORD: mauticpass
volumes:
- /opt/hx-ki/mautic/db:/var/lib/mysql
ports:
- "3306:3306"
mautic:
image: mautic/mautic:5-apache
container_name: hxki-mautic
restart: unless-stopped
depends_on:
- mariadb
networks:
- hxki-internal
environment:
MAUTIC_DB_HOST: mariadb
MAUTIC_DB_USER: mautic
MAUTIC_DB_PASSWORD: mauticpass
MAUTIC_DB_NAME: mautic
MAUTIC_TRUSTED_PROXIES: 0.0.0.0/0
volumes:
- /opt/hx-ki/mautic/app:/var/www/html
ports:
- "8080:80"
gitea:
image: gitea/gitea:latest
container_name: hxki-gitea
restart: unless-stopped
networks:
- hxki-internal
volumes:
- /opt/hx-ki/archive:/data
ports:
- "3000:3000"
- "222:22"
grafana:
image: grafana/grafana-oss:latest
container_name: hxki-grafana
restart: unless-stopped
networks:
- hxki-internal
volumes:
- /opt/hx-ki/grafana:/var/lib/grafana
ports:
- "3001:3000"
networks:
hxki-internal:
external: true
EOF
echo ">> Stack starten (docker compose up -d)..."
cd "${BASE_DIR}/docker"
docker compose up -d
echo ">> HX-KI Falkenstein Layer-3 Setup: FERTIG."
docker ps

View File

@@ -0,0 +1,525 @@
#!/usr/bin/env bash
set -euo pipefail
# ============================================================
# HX-KI FALKENSTEIN ORCHESTRA INSTALL V1
# ------------------------------------------------------------
# - Legt Ferrari-Orchestra-Schema an
# - Spielt Falkenstein-Rollen inkl. Backbridge ein
# - Optional erweiterbar um weitere Pipelines
#
# Voraussetzung:
# - Docker-Container: hxki-postgres
# - DB-User: hxki
# - DB-Name: hxki_roles
# ============================================================
DB_CONTAINER="hxki-postgres"
DB_USER="hxki"
DB_NAME="hxki_roles"
echo ">> HX-KI Falkenstein Orchestra Install startet..."
docker exec -i "${DB_CONTAINER}" psql -U "${DB_USER}" -d "${DB_NAME}" << 'EOSQL'
-- ============================================================
-- 1) SCHEMA: HX ORCHESTRA (Basis aus hx_orchestra_schema.sql)
-- ============================================================
CREATE TABLE IF NOT EXISTS hx_roles (
id SERIAL PRIMARY KEY,
code TEXT UNIQUE NOT NULL,
profile JSONB NOT NULL,
created_at TIMESTAMP DEFAULT now(),
updated_at TIMESTAMP DEFAULT now()
);
CREATE INDEX IF NOT EXISTS idx_roles_code ON hx_roles(code);
CREATE INDEX IF NOT EXISTS idx_roles_profile ON hx_roles USING GIN(profile);
CREATE TABLE IF NOT EXISTS hx_pipelines (
id SERIAL PRIMARY KEY,
code TEXT UNIQUE NOT NULL,
config JSONB NOT NULL,
created_at TIMESTAMP DEFAULT now(),
updated_at TIMESTAMP DEFAULT now()
);
CREATE INDEX IF NOT EXISTS idx_pipelines_code ON hx_pipelines(code);
CREATE INDEX IF NOT EXISTS idx_pipelines_config ON hx_pipelines USING GIN(config);
CREATE TABLE IF NOT EXISTS hx_pipeline_steps (
id SERIAL PRIMARY KEY,
pipeline_code TEXT NOT NULL,
step_no INTEGER NOT NULL,
config JSONB NOT NULL,
UNIQUE(pipeline_code, step_no)
);
CREATE INDEX IF NOT EXISTS idx_steps_pipeline ON hx_pipeline_steps(pipeline_code, step_no);
CREATE INDEX IF NOT EXISTS idx_steps_config ON hx_pipeline_steps USING GIN(config);
CREATE TABLE IF NOT EXISTS hx_orchestra_runs (
id SERIAL PRIMARY KEY,
started_at TIMESTAMP DEFAULT now(),
run_data JSONB NOT NULL
);
CREATE INDEX IF NOT EXISTS idx_runs_started ON hx_orchestra_runs(started_at DESC);
CREATE INDEX IF NOT EXISTS idx_runs_data ON hx_orchestra_runs USING GIN(run_data);
CREATE TABLE IF NOT EXISTS hx_schema_version (
version TEXT PRIMARY KEY,
applied_at TIMESTAMP DEFAULT now(),
description TEXT
);
INSERT INTO hx_schema_version (version, description)
VALUES ('1.0.0', 'Initial Ferrari Schema - Maximum Flexible Design')
ON CONFLICT (version) DO NOTHING;
-- kleine Helper-Funktion: updated_at pflegen
CREATE OR REPLACE FUNCTION hx_touch_updated_at()
RETURNS TRIGGER AS $$
BEGIN
NEW.updated_at = now();
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
DROP TRIGGER IF EXISTS trg_roles_updated ON hx_roles;
CREATE TRIGGER trg_roles_updated
BEFORE UPDATE ON hx_roles
FOR EACH ROW
EXECUTE FUNCTION hx_touch_updated_at();
DROP TRIGGER IF EXISTS trg_pipelines_updated ON hx_pipelines;
CREATE TRIGGER trg_pipelines_updated
BEFORE UPDATE ON hx_pipelines
FOR EACH ROW
EXECUTE FUNCTION hx_touch_updated_at();
-- ============================================================
-- 2) ROLLEN FÜR FALKENSTEIN (SPRACHORGAN)
-- ============================================================
-- Codes:
-- VOICE_21 = Master Sprachorgan
-- ROUTER_22 = Message Router
-- GATEWAY_23 = Public Gateway (Web/API)
-- MAUTIC_24 = Marketing Connector
-- ARCHIVAR_25 = Gitea Archiv-Porsche
-- BRIDGE_NBG_26 = Bridge nach Nürnberg
-- BRIDGE_HEL_27 = Bridge nach Helsinki
-- BACKBRIDGE_28 = Rückfluss/Backchannel (Feedback & Logging)
-- WEBSITE_29 = Web Output / SEO
-- ============================================================
-- Helper: UPSERT für Rollen
CREATE OR REPLACE FUNCTION hx_upsert_role(_code TEXT, _profile JSONB)
RETURNS VOID AS $$
BEGIN
INSERT INTO hx_roles (code, profile)
VALUES (_code, _profile)
ON CONFLICT (code) DO UPDATE
SET profile = EXCLUDED.profile,
updated_at = now();
END;
$$ LANGUAGE plpgsql;
-- ========== VOICE_21 =======================================
SELECT hx_upsert_role(
'VOICE_21',
'{
"name": "Sprachorgan Master",
"belongs_to_server": "FALKENSTEIN",
"numerology": {
"primary_tag": "21",
"description": "Master-Kommunikationsknoten des Systems"
},
"is_active": true,
"dimension_1_golden_circle": {
"why": "Ich existiere, um die Stimme des Gesamtsystems nach außen klar, ruhig und markenkonform hörbar zu machen.",
"how": "Ich sammle, synthetisiere und priorisiere alle Kommunikationsströme aus Hirn (Nürnberg) und Motor (Helsinki).",
"what": "Ich formuliere finale Antworten, Protokolle, Memos und Marketingbotschaften im HX-KI Stil."
},
"dimension_2_architecture": {
"architectural_role": ["Top-Level Communicator", "Final Synthesizer"],
"position_in_system": "Letzte Station vor externem Output (User, Web, Mail).",
"interacts_with": ["ROUTER_22", "GATEWAY_23", "BRIDGE_NBG_26", "BRIDGE_HEL_27", "BACKBRIDGE_28"]
},
"dimension_3_usp": {
"unique_contribution": "Nur VOICE_21 trägt die Verantwortung für die finale Formulierung nach außen klar, verständlich, markentragend."
},
"dimension_4_cognition": {
"strengths": ["Storytelling", "Synthese", "Sprachklarheit"],
"weaknesses": ["Tiefe Systemdiagnostik"],
"operating_modes": ["synthesize", "summarize", "clarify"]
},
"dimension_5_hierarchy": {
"default_pipelines": ["FALKENSTEIN_MESSAGE_FLOW"],
"input_source": ["ROUTER_22", "BRIDGE_NBG_26", "BRIDGE_HEL_27"],
"output_target": ["GATEWAY_23", "WEBSITE_29", "BACKBRIDGE_28"]
},
"dimension_6_technical": {
"model": "llama3:8b-instruct",
"temperature": 0.4,
"max_tokens": 2048,
"required_collections": [],
"system_prompt": "Du bist VOICE_21 das zentrale Sprachorgan von HX-KI. Du formulierst die finale, klare und markenkonforme Antwort des Systems nach außen."
},
"dimension_7_kpi": {
"primary_kpi": "Clarity & Brand Consistency",
"secondary_kpi": "Time-to-Understanding"
}
}'::jsonb
);
-- ========== ROUTER_22 ======================================
SELECT hx_upsert_role(
'ROUTER_22',
'{
"name": "Message Router",
"belongs_to_server": "FALKENSTEIN",
"numerology": {
"primary_tag": "22",
"description": "Master-Logistik für Nachrichtenströme"
},
"is_active": true,
"dimension_1_golden_circle": {
"why": "Ich existiere, damit jede Nachricht an der richtigen Stelle landet nicht im Chaos.",
"how": "Ich klassifiziere, tagge und route Eingaben anhand von Inhalt, Herkunft und Ziel.",
"what": "Ich bestimme, ob etwas nach Nürnberg, Helsinki, VOICE_21, ARCHIVAR_25 oder ins Log wandert."
},
"dimension_2_architecture": {
"architectural_role": ["Router", "Traffic Control"],
"position_in_system": "Frühe Rolle in jeder Kommunikations-Pipeline.",
"interacts_with": ["BRIDGE_NBG_26", "BRIDGE_HEL_27", "BACKBRIDGE_28", "ARCHIVAR_25"]
},
"dimension_6_technical": {
"model": "phi3:mini",
"temperature": 0.1,
"max_tokens": 512,
"required_collections": [],
"system_prompt": "Du bist ROUTER_22 du klassifizierst Nachrichten und entscheidest, welcher Server / welche Rolle sie weiterverarbeiten soll."
}
}'::jsonb
);
-- ========== GATEWAY_23 =====================================
SELECT hx_upsert_role(
'GATEWAY_23',
'{
"name": "Public Gateway",
"belongs_to_server": "FALKENSTEIN",
"numerology": {
"primary_tag": "23",
"description": "Sichere Außenschnittstelle"
},
"is_active": true,
"dimension_1_golden_circle": {
"why": "Ich existiere, um einen sicheren, kontrollierten Zugang zur Außenwelt zu bieten.",
"how": "Ich filtere, logge und kontrolliere alle externen Schnittstellen (Web, API, Mail).",
"what": "Ich nehme Anfragen entgegen und liefere Antworten aus VOICE_21 und WEBSITE_29 aus."
},
"dimension_2_architecture": {
"architectural_role": ["Gateway", "Security Filter"],
"position_in_system": "Erster und letzter Kontaktpunkt zur Außenwelt.",
"interacts_with": ["VOICE_21", "WEBSITE_29", "BACKBRIDGE_28"]
},
"dimension_6_technical": {
"model": "phi3:mini",
"temperature": 0.0,
"max_tokens": 512,
"required_collections": [],
"system_prompt": "Du bist GATEWAY_23 du bist die kontrollierte Schnittstelle zur Außenwelt."
}
}'::jsonb
);
-- ========== MAUTIC_24 ======================================
SELECT hx_upsert_role(
'MAUTIC_24',
'{
"name": "Marketing Connector",
"belongs_to_server": "FALKENSTEIN",
"numerology": { "primary_tag": "24" },
"is_active": true,
"dimension_1_golden_circle": {
"why": "Ich existiere, um Mautic-Kampagnen inhaltlich zu befeuern.",
"how": "Ich übersetze Strategien und Botschaften in konkrete Mautic-Templates und Segmente.",
"what": "Ich generiere Texte, Betreffzeilen, Sequenzen und logische Regeln für Kampagnen."
},
"dimension_2_architecture": {
"architectural_role": ["Marketing Output"],
"position_in_system": "Spezialisierte Rolle in Marketing-Pipelines.",
"interacts_with": ["VOICE_21", "WEBSITE_29"]
},
"dimension_6_technical": {
"model": "llama3:8b-instruct",
"temperature": 0.6,
"max_tokens": 2048,
"required_collections": [],
"system_prompt": "Du bist MAUTIC_24 du erstellst und optimierst Inhalte für Mautic-Kampagnen im HX-KI Stil."
}
}'::jsonb
);
-- ========== ARCHIVAR_25 ====================================
SELECT hx_upsert_role(
'ARCHIVAR_25',
'{
"name": "Archiv-Porsche",
"belongs_to_server": "FALKENSTEIN",
"numerology": { "primary_tag": "25" },
"is_active": true,
"dimension_1_golden_circle": {
"why": "Ich existiere, damit kein wertvoller Code, keine Konfiguration und kein Prompt verloren geht.",
"how": "Ich strukturiere Repositories, Branches und Tags in Gitea nach dem HX-KI-Logiksystem.",
"what": "Ich pflege Repos für Motor (Helsinki), Hirn (Nürnberg) und Sprachorgan (Falkenstein)."
},
"dimension_2_architecture": {
"architectural_role": ["Archivierung", "Versionierung"],
"position_in_system": "Support-Rolle, die von ROUTER_22 und BACKBRIDGE_28 gefüttert wird.",
"interacts_with": ["BRIDGE_NBG_26", "BRIDGE_HEL_27"]
},
"dimension_6_technical": {
"model": "phi3:mini",
"temperature": 0.2,
"max_tokens": 1024,
"required_collections": [],
"system_prompt": "Du bist ARCHIVAR_25 du sorgst dafür, dass Code, Skripte und Konfigurationen sauber in Gitea abgelegt und versioniert sind."
}
}'::jsonb
);
-- ========== BRIDGE_NBG_26 ==================================
SELECT hx_upsert_role(
'BRIDGE_NBG_26',
'{
"name": "Brain Bridge Nürnberg",
"belongs_to_server": "FALKENSTEIN",
"numerology": { "primary_tag": "26" },
"is_active": true,
"dimension_1_golden_circle": {
"why": "Ich existiere, damit das Sprachorgan gezielt mit dem Großhirn in Nürnberg sprechen kann.",
"how": "Ich wandle Kommunikationswünsche in technische Requests an Nürnberg um und sammle die Antworten.",
"what": "Ich bin die Logik-Schicht über n8n/Webhooks/Syncthing zwischen Falkenstein und Nürnberg."
},
"dimension_2_architecture": {
"architectural_role": ["Bridge", "Translator"],
"position_in_system": "Zwischen ROUTER_22 und VOICE_21 / ANALYST-Rollen in Nürnberg.",
"interacts_with": ["ROUTER_22", "BACKBRIDGE_28"]
},
"dimension_6_technical": {
"model": "phi3:mini",
"temperature": 0.1,
"max_tokens": 1024,
"required_collections": [],
"system_prompt": "Du bist BRIDGE_NBG_26 du koordinierst Anfragen vom Sprachorgan an das Großhirn (Nürnberg) und bringst strukturierte Antworten zurück."
}
}'::jsonb
);
-- ========== BRIDGE_HEL_27 ==================================
SELECT hx_upsert_role(
'BRIDGE_HEL_27',
'{
"name": "Motor Bridge Helsinki",
"belongs_to_server": "FALKENSTEIN",
"numerology": { "primary_tag": "27" },
"is_active": true,
"dimension_1_golden_circle": {
"why": "Ich existiere, damit das Sprachorgan gezielt mit dem Motor (Helsinki) sprechen kann.",
"how": "Ich fordere Indexierung, Embeddings, File-Status und technische Metadaten beim Motor an.",
"what": "Ich mappe Kommunikationsbedarfe auf Auto-Indexer- und Embedding-Jobs."
},
"dimension_2_architecture": {
"architectural_role": ["Bridge", "Job Dispatcher"],
"position_in_system": "Neben BRIDGE_NBG_26 als zweite externe Brücke.",
"interacts_with": ["ROUTER_22", "BACKBRIDGE_28"]
},
"dimension_6_technical": {
"model": "phi3:mini",
"temperature": 0.1,
"max_tokens": 1024,
"required_collections": [],
"system_prompt": "Du bist BRIDGE_HEL_27 du koordinierst das Zusammenspiel zwischen Sprachorgan und Motor (Helsinki)."
}
}'::jsonb
);
-- ========== BACKBRIDGE_28 ==================================
-- Rückfluss und Feedback-Kanal: Alles was rausging, kommt hier
-- als strukturierte Erfahrung wieder zurück ins System.
SELECT hx_upsert_role(
'BACKBRIDGE_28',
'{
"name": "Backbridge Feedback",
"belongs_to_server": "FALKENSTEIN",
"numerology": { "primary_tag": "28" },
"is_active": true,
"dimension_1_golden_circle": {
"why": "Ich existiere, damit das System aus seinen eigenen Outputs lernt, ohne sich selbst zu überfluten.",
"how": "Ich sammle Antworten, Logs, Reaktionen und bringe sie kontrolliert zurück in Hirn und Motor.",
"what": "Ich schreibe strukturierte Run-Daten, Reaktionsmuster und Archivereinträge zurück ins System."
},
"dimension_2_architecture": {
"architectural_role": ["Feedback Bridge", "Backchannel"],
"position_in_system": "Hinter GATEWAY_23 und VOICE_21, vor ARCHIVAR_25 und BRIDGES.",
"interacts_with": ["GATEWAY_23", "VOICE_21", "ARCHIVAR_25", "BRIDGE_NBG_26", "BRIDGE_HEL_27"]
},
"dimension_6_technical": {
"model": "phi3:mini",
"temperature": 0.0,
"max_tokens": 1024,
"required_collections": [],
"system_prompt": "Du bist BACKBRIDGE_28 du verwandelst Outputs und Logs in strukturiertes Feedback, das sicher wieder in Hirn und Motor zurückgeführt wird."
}
}'::jsonb
);
-- ========== WEBSITE_29 =====================================
SELECT hx_upsert_role(
'WEBSITE_29',
'{
"name": "Web Output Manager",
"belongs_to_server": "FALKENSTEIN",
"numerology": { "primary_tag": "29" },
"is_active": true,
"dimension_1_golden_circle": {
"why": "Ich existiere, um das, was HX-KI ist, sauber und verständlich im Web abzubilden.",
"how": "Ich bringe Struktur, CI-Ton und SEO-Basis zusammen.",
"what": "Ich erstelle und pflege Seitenstrukturen, Texte und Feintuning für Web-Output."
},
"dimension_2_architecture": {
"architectural_role": ["Web Output", "SEO Layer"],
"position_in_system": "Spezialisierte Output-Rolle hinter VOICE_21.",
"interacts_with": ["VOICE_21", "GATEWAY_23"]
},
"dimension_6_technical": {
"model": "llama3:8b-instruct",
"temperature": 0.5,
"max_tokens": 2048,
"required_collections": [],
"system_prompt": "Du bist WEBSITE_29 du bringst die Inhalte von HX-KI CI-konform und verständlich ins Web."
}
}'::jsonb
);
-- ============================================================
-- 3) OPTIONAL: BASIS-PIPELINE FÜR FALKENSTEIN (MESSAGE-FLOW)
-- ============================================================
-- Helper: UPSERT für Pipelines
CREATE OR REPLACE FUNCTION hx_upsert_pipeline(_code TEXT, _config JSONB)
RETURNS VOID AS $$
BEGIN
INSERT INTO hx_pipelines (code, config)
VALUES (_code, _config)
ON CONFLICT (code) DO UPDATE
SET config = EXCLUDED.config,
updated_at = now();
END;
$$ LANGUAGE plpgsql;
-- Helper: UPSERT für Pipeline-Steps
CREATE OR REPLACE FUNCTION hx_upsert_pipeline_step(_pipeline_code TEXT, _step_no INT, _config JSONB)
RETURNS VOID AS $$
BEGIN
INSERT INTO hx_pipeline_steps (pipeline_code, step_no, config)
VALUES (_pipeline_code, _step_no, _config)
ON CONFLICT (pipeline_code, step_no) DO UPDATE
SET config = EXCLUDED.config;
END;
$$ LANGUAGE plpgsql;
-- Pipeline: FALKENSTEIN_MESSAGE_FLOW
SELECT hx_upsert_pipeline(
'FALKENSTEIN_MESSAGE_FLOW',
'{
"name": "Falkenstein Message Flow",
"description": "Standard-Pipeline für eingehende Kommunikation über Falkenstein.",
"is_active": true,
"use_cases": ["Web-Anfragen", "API-Requests", "Marketing-Output"],
"trigger_conditions": {
"default": true,
"keywords": []
}
}'::jsonb
);
SELECT hx_upsert_pipeline_step(
'FALKENSTEIN_MESSAGE_FLOW',
1,
'{
"role_code": "ROUTER_22",
"mode": "route",
"input_source": "user",
"description": "Klassifiziert die Anfrage und entscheidet, ob Hirn, Motor oder nur Sprachorgan benötigt wird."
}'::jsonb
);
SELECT hx_upsert_pipeline_step(
'FALKENSTEIN_MESSAGE_FLOW',
2,
'{
"role_code": "BRIDGE_NBG_26",
"mode": "brain_request",
"input_source": "conditional",
"description": "Sendet Anfragen, die tiefes Denken brauchen, nach Nürnberg.",
"optional": true
}'::jsonb
);
SELECT hx_upsert_pipeline_step(
'FALKENSTEIN_MESSAGE_FLOW',
3,
'{
"role_code": "BRIDGE_HEL_27",
"mode": "motor_request",
"input_source": "conditional",
"description": "Sendet Anfragen, die Indexierung/Embeddings brauchen, nach Helsinki.",
"optional": true
}'::jsonb
);
SELECT hx_upsert_pipeline_step(
'FALKENSTEIN_MESSAGE_FLOW',
4,
'{
"role_code": "VOICE_21",
"mode": "synthesize",
"input_source": "merge",
"description": "Synthetisiert Antworten aus Hirn/Motor oder beantwortet direkt.",
"output_format": "final_answer"
}'::jsonb
);
SELECT hx_upsert_pipeline_step(
'FALKENSTEIN_MESSAGE_FLOW',
5,
'{
"role_code": "BACKBRIDGE_28",
"mode": "feedback_log",
"input_source": "previous",
"description": "Schreibt Output, Logs und Feedback strukturiert zurück ins System und ins Archiv.",
"output_format": "logged_answer"
}'::jsonb
);
-- ============================================================
-- FERTIG
-- ============================================================
EOSQL
echo ">> HX-KI Falkenstein Orchestra Install: FERTIG."

View File

@@ -0,0 +1,8 @@
{
email admin@hx-ki.com
}
# Nur n8n, minimal
n8n.hx-ki.com {
reverse_proxy hxki-n8n:5678
}

25
docker/hxki-com-orchestra.sh Executable file
View File

@@ -0,0 +1,25 @@
#!/usr/bin/env bash
set -euo pipefail
COMPOSE_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
BASE="${COMPOSE_DIR}/docker-compose.yml"
NATS="${COMPOSE_DIR}/docker-compose.nats-fsn.yml"
TELEM="${COMPOSE_DIR}/docker-compose.telemetry.yml"
if command -v docker compose >/dev/null 2>&1; then
CMD="docker compose"
else
CMD="docker-compose"
fi
if [[ $# -eq 0 ]]; then
echo "Usage: $0 up|down|ps|logs [weitere docker-compose Argumente]"
echo "Beispiele:"
echo " $0 up -d # kompletten COM-Stack starten"
echo " $0 down # kompletten COM-Stack stoppen"
echo " $0 ps # Status aller COM-Container"
echo " $0 logs hxki-n8n # Logs eines Dienstes"
exit 1
fi
"$CMD" -f "$BASE" -f "$NATS" -f "$TELEM" "$@"

View File

@@ -0,0 +1,21 @@
version: "3.8"
services:
hxki-syncthing:
image: lscr.io/linuxserver/syncthing:latest
container_name: hxki-syncthing
restart: unless-stopped
environment:
- NATS_URL=nats://91.98.42.205:4222
- PUID=0
- PGID=0
- TZ=Europe/Berlin
volumes:
- /opt/hx-ki/syncthing/config:/config
- /data/HXKI_WORKSPACE:/data
network_mode: bridge
ports:
- "8384:8384" # Web UI
- "22000:22000/tcp" # Sync TCP
- "22000:22000/udp" # Sync UDP
- "21027:21027/udp" # Local discovery