Commit graph

600 commits

Author SHA1 Message Date
sirius0xdev
93ce67a108
fix(news_bot): clean URLs + switch scraper to GHCR registry
- De-duplicate URLs in scrapy-urls configmap
- Switch CronJob image from siriussec/newsscraper:0.5.4 to ghcr.io/sirius0xdev/newsscraper:latest
- imagePullPolicy already set to Always

Co-authored-by: Sirius Devops <sirius@siriusdevops.com>
2026-05-27 23:07:57 -04:00
sirius0xdev
75c2aa599e
fix(cnpg): add news_app managed role for news_bot scraper
CNPG cluster was missing the news_app role — scraper cronjob
was failing with 'connection to server at port 5432 failed'
because the role had no login/password configured in managed roles.

Adds news_app to managed roles, pointing to existing
news-app-password secret.

Co-authored-by: Hermes DevOps <hermes@devops.local>
2026-05-27 21:06:28 -04:00
sirius0xdev
007900e01b
fix(news-service): mount news-app-password secret for scraper DB
Adds NEWS_DB_PASSWORD env var from existing news-app-password secret
so the secondary DB connection to news_app_db can authenticate.

Co-authored-by: Hermes DevOps <hermes@devops.local>
2026-05-27 20:41:01 -04:00
sirius0xdev
ba7d6de7c8
feat(news-service): add scraper DB config to K8s configmap
Adds NEWS_DB_HOST, NEWS_DB_PORT, NEWS_DB_NAME, NEWS_DB_USER to news-service ConfigMap for secondary DB connection to news_app_db.
2026-05-27 20:27:07 -04:00
Hermes Agent
a20debf02e config(dashboard): remove explicit ports from service URLs
K8s Services all expose on port 80 (mapping to container ports internally).
URLs should be bare — K8s DNS resolves to port 80 by default.
2026-05-27 20:35:47 +00:00
Hermes Agent
77a5a99c5f config(dashboard): add ports to service URLs
Service-to-service calls need explicit ports. Without them, dashboard
proxy was hitting port 80 which doesn't exist on backend services.
2026-05-27 20:20:38 +00:00
Hermes Agent
89bd139ba9 fix(netpol): allow external egress (ports 80/443) for API websockets
Data service needs to reach Helius WSS, Solana RPC, Jupiter API,
Hyperliquid — all external. Network policy had no egress rule for
external traffic, so all API/websocket connections were blocked.
2026-05-27 19:34:04 +00:00
Hermes Agent
f9623b9ca2 config(execute-service): enable auto-create tables in production
Sets EXECUTE_DB_AUTO_CREATE_TABLES=true so the service creates
its own tables on startup instead of relying on non-existent
alembic migrations.
2026-05-27 19:20:31 +00:00
Hermes Agent
bb170365cc fix: network policy Kafka selector app -> strimzi labels
Data-service pods use NetworkPolicy egress selector app: trading-kafka
but Strimzi Kafka pods are labeled strimzi.io/name=trading-kafka.
This silently blocked all Kafka traffic causing NoBrokersAvailable.
2026-05-27 14:19:26 +00:00
Hermes Agent
6447f92157 fix: redis maxmemory unit 1gi -> 1gb for Redis 7.4.7 compat 2026-05-27 13:59:06 +00:00
Hermes Agent
18b728c95e fix: redis-stack image tag 7.4.0-v8 (7.4.2-v16 not found) 2026-05-27 13:37:47 +00:00
sirius0xdev
f8fa436b8b
Merge RediSearch PR
Redis Stack with RediSearch for HNSW vector search. Memory bumped to 1Gi.
2026-05-27 08:17:36 -04:00
Hermes DevOps
9eecad47bb fix: point data-service to solana-api-keys secret + set Helius key
- Fix deployment env refs: trading-platform-secrets -> solana-api-keys
- Replace placeholder helius-api-key with actual value
2026-05-27 05:52:43 +00:00
sirius0xdev
380325c981
Merge pull request #179 from sirius0xdev/feat/merge-solana-ingester-into-data-service
Merge solana-ingester into data-service
2026-05-27 01:34:26 -04:00
sirius0xdev
6b2472f376
Merge pull request #177 from sirius0xdev/migrate-news-bot-to-rtx6000-vllm
Migrate news bot to rtx6000-brain vLLM endpoint
2026-05-27 01:31:02 -04:00
Hermes Agent
26059b01e6 Merge solana-ingester into data-service, remove standalone deployment
- Remove solana-ingester deployment (was using a nonexistent CLI entrypoint)
- Merge all ingestion into data-service via env vars + shared image
- Add HELIUS_API_KEY, JUPITER_API_KEY, KAFKA_BROKER to data-service configmap
- Add solana secret refs to data-service deployment
- Remove solana-ingester-config configmap
2026-05-27 05:27:55 +00:00
c7731aeec0 fix(secrets): split Solana API keys into separate SOPS file
- Remove helius/jupiter placeholders from trading-secrets.yaml
- Create new solana-api-keys.yaml with helius-api-key and jupiter-api-key
- Update kustomization.yaml to include solana-api-keys.yaml

Convention: each secret group gets its own SOPS-encrypted file
instead of adding new keys to an already encrypted file.
2026-05-27 04:35:47 +00:00
Hermes Agent
e8f33a7bd0 Migrate news bot to rtx6000-brain vLLM endpoint
- Replace Gemini API and A100 vLLM references with central rtx6000-brain vLLM
  endpoint (http://rtx6000-brain-service.customer1.svc.cluster.local:8000/v1)
- Update all ConfigMaps to use model edp1096/Huihui-Qwen3.6-27B-abliterated-FP8
- Add LLM_API_KEY: sk-dummy to all ConfigMaps
- Remove ollama sidecars, initContainers, PVC volumes from all analyst CronJobs
- Remove GPU nodeSelector, tolerations, and GPU resource requests from CronJobs
- Clean up kustomization.yaml: remove ollama-storage.yaml, deepseek-storage.yaml,
  gemini-apikey.yaml references
- Activate deepseek-summarizer.yaml in kustomization, keep others commented
2026-05-27 04:25:41 +00:00
Hermes DevOps
e24e82107d feat: add solana-ingester deployment for real-time market data
- Create solana-ingester Deployment + Service in trading-platform/
  (uses same data-service image, runs WebSocket ingester mode)
- Add solana-ingester ConfigMap (HELIUS_RPC_ENDPOINT, JUPITER_API_URL,
  KAFKA_BROKER, KAFKA_TOPIC)
- Add helius-api-key and jupiter-api-key placeholders to trading-secrets.yaml
  (TODO: replace with real values and re-encrypt with SOPS)
- Update kustomization to include new resources
2026-05-27 04:05:41 +00:00
Hermes DevOps
c587a707a6 feat(redis): add persistent volume for trading-redis
Replace emptyDir with 10Gi PVC (ReadWriteOnce) so hot cache
survives pod restarts.
2026-05-27 04:05:41 +00:00
sirius0xdev
e78674a964 Fix data-service port mismatch: container runs on 8000, not 8001 2026-05-26 10:54:23 -09:00
sirius0xdev
c5e2ef16d2 Move Redis cluster to trading-platform and wire into kustomization 2026-05-26 09:52:16 -09:00
Hermes Agent
308d54cc0b fix(kafka): add fsGroup to pod securityContext for PVC write permissions
Kraft mode fails with AccessDeniedException on meta.properties
because PVC mounts with root ownership. Adding fsGroup: 1000
ensures the volume group matches the Kafka container user.
2026-05-26 03:33:43 +00:00
Hermes Agent
207733f4df bump Kafka version from 3.8.0 to 4.1.0 (supported by Strimzi 1.0.0) 2026-05-26 03:01:40 +00:00
Hermes Agent
f8b97537d7 fix trading-kafka: remove invalid template.pod.brokers, add controller role to KafkaNodePool
- Removed template.pod.brokers (not valid in Strimzi 1.0.0 Kafka schema)
- Moved broker resources to KafkaNodePool.spec.resources
- Added controller role to KafkaNodePool (KRaft requires both controller+broker)
2026-05-26 02:47:43 +00:00
Hermes Agent
c477e80790 bump trading-kafka to Strimzi 1.0.0 v1 API (KafkaNodePool) 2026-05-26 02:11:25 +00:00
Hermes Agent
8865b76154 Revert "bump trading-kafka API from v1beta2 to v1 for Strimzi 1.0.0"
This reverts commit cbdea178cf.
2026-05-26 02:05:15 +00:00
Hermes Agent
cbdea178cf bump trading-kafka API from v1beta2 to v1 for Strimzi 1.0.0 2026-05-26 02:02:35 +00:00
Hermes Agent
7e9b563257 vendor Strimzi 1.0.0 YAML locally instead of remote URL
strimzi.io/install/1.0.0 is not a valid git repo or kustomize remote URL.
Download the full install bundle (strimzi-1.0.0.yaml) and reference it
locally in the strimzi kustomization.
2026-05-26 01:53:06 +00:00
Hermes Agent
47aae85ed3 split Strimzi operator into separate kustomization for Flux dependsOn
Flux dry-run fails when CRDs are in the same kustomization as resources
that reference them - CRDs need to exist before validation.

Two kustomizations now:
  strimzi/        - Strimzi 1.0.0 CRDs + operator
  siriusdevops-db - DBs, Kafka CR (depends on strimzi CRDs)

Wire them in Flux:
  Kustomization 'siriusdevops-strimzi' -> path: strimzi/
  Kustomization 'siriusdevops-db'      -> path: siriusdevops-db/
    dependsOn: [{name: siriusdevops-strimzi}]
2026-05-26 01:32:57 +00:00
Hermes Agent
94f6b04c28 add Strimzi operator as kustomize remote URL (GitOps)
Reference Strimzi 1.0.0 install bundle directly from kustomization.
No separate install step needed — kubectl apply -k handles CRDs + operator
in one shot before the Kafka CR.

Pinned to 1.0.0 for reproducible deployments.
2026-05-26 01:32:57 +00:00
Hermes Agent
25850b5b04 replace manual Kafka StatefulSet with Strimzi operator CR
Remove hand-rolled KRaft StatefulSet that kept failing (mount conflicts,
advertised.listeners issues). Replace with a single Strimzi Kafka CR.

Strimzi handles:
- KRaft setup, storage, scaling
- Broker config & advertised listeners (auto-resolved)
- Topic Operator for proper topic lifecycle
- Bootstrap service at trading-kafka-kafka-bootstrap.customer1.svc.cluster.local:9092

Requires Strimzi 1.0.0 operator installed in the cluster first:
  kubectl apply -f https://strimzi.io/install/latest?namespace=customer1 -n customer1
2026-05-26 01:32:57 +00:00
Hermes Agent
68033faf4e fix Kafka config mount: use /opt/kafka/config/ path instead of /etc/kafka
/etc/kafka doesn't exist in the apache/kafka image - subPath could not
create the parent directory. Switch to /opt/kafka/config/ which exists
in the image, avoiding both the directory conflict and the missing path.
2026-05-26 00:16:42 +00:00
Hermes Agent
5ab0098e34 fix Kafka config mount: use subPath to avoid /etc/kafka/secrets conflict
Container fails with 'read-only file system' when K8s tries to mount
a secret into /etc/kafka/secrets alongside the ConfigMap at /etc/kafka.
Switch to subPath mount of server.properties directly.
2026-05-25 23:53:55 +00:00
Hermes Agent
32a855c457 fix configmap Kafka env var keys to match app code
App code reads KAFKA_BOOTSTRAP_SERVERS (all services), but configmaps
had KAFKA_BROKER (data) and EXECUTE_KAFKA_BOOTSTRAP_SERVERS (execute).
Services silently fell through to hardcoded defaults — Kafka unreachable.

- data-service: KAFKA_BROKER -> KAFKA_BOOTSTRAP_SERVERS
- execute-service: EXECUTE_KAFKA_BOOTSTRAP_SERVERS -> KAFKA_BOOTSTRAP_SERVERS
2026-05-25 23:40:15 +00:00
Hermes Agent
691d7c68e7 move Kafka broker from hermes-db to siriusdevops-db kustomization
Trading services depend on Kafka (trading-kafka.customer1.svc.cluster.local:9092)
but it was never deployed — lived under hermes-db kustomization which isn't
applied. Move to siriusdevops-db where trading infra belongs.

Also remove stale redis-cluster.yaml reference from hermes-db (file missing).
2026-05-25 23:36:14 +00:00
Hermes Agent
9cbf21173f fix(data-service): probe /health/ready instead of /health 2026-05-25 21:17:10 +00:00
sirius0xdev
e28d6ccf10 fix(trading): update network policy egress to siriusdevops-pgdb
Migrate trading platform DB egress rule from hermes-pgdb to
siriusdevops-pgdb to complete the trading DB migration. The
configmaps already point to siriusdevops-pgdb-rw but the
network policy still allowed egress to the old cluster.
2026-05-25 20:08:07 +00:00
sirius0xdev
c357b69743
Merge pull request #156 from sirius0xdev/fix/pgvector-image-and-cluster
chore(news-bot): switch DB to siriusdevops-pgdb (main apps cluster)
2026-05-25 14:56:56 -04:00
Hermes Agent
22498cd97b chore(news-bot): switch to siriusdevops-pgdb as main apps cluster
- news-app-db.yaml: point Database CR to siriusdevops-pgdb
- All ConfigMaps: DB_HOST=siriusdevops-pgdb-rw, LLM_BASE_URL for vLLM
- hermes-pgdb now dedicated to pgvector/RAG for agents only
- Aligns with CNPG extension pattern and active kanban (devops startupProbes, backend exec-service)

PR to master per repo rules.
2026-05-25 18:56:08 +00:00
sirius0xdev
67410a8ac0
Merge pull request #155 from sirius0xdev/fix/pgvector-image-and-cluster
feat: add pgvector image build and update cluster imageName
2026-05-25 14:03:31 -04:00
sirius0xdev
6ca9d9532f
Merge pull request #154 from sirius0xdev/feat/migrate-trading-to-siriusdevops-pgdb
feat: migrate all trading-platform services from hermes-pgdb to siriusdevops-pgdb
2026-05-25 14:03:20 -04:00
Hermes Agent
2f15684895 feat: add pgvector image build workflow and update cluster imageName
- Add build-pgvector-image.yml GH Actions workflow for GCR
- Set imageName to gcr.io/devops-lab-cluster/postgres-pgvector:15.2-0.8.0
- Image change only (CNPG rule: no config changes in same update)
2026-05-25 08:15:12 +00:00
Hermes Agent
3f96800222 feat: migrate all trading-platform services from hermes-pgdb to siriusdevops-pgdb
- Add 'trading' managed role to siriusdevops-pgdb cluster
- Move trading-db-credentials from hermes-db to siriusdevops-db
- Create trading-data-db.yaml (Database kind) pointing to siriusdevops-pgdb
- Update DB_HOST in all 4 trading-platform configmaps to siriusdevops-pgdb-rw
- Remove trading-data-db.yaml and trading-db-credentials.yaml from hermes-db
- Update siriusdevops-db kustomization.yaml to include new resources
2026-05-25 07:55:15 +00:00
Hermes DevOps
7e8fd296c4 fix(platform): allow tailscale namespace in NetworkPolicy for proxy access
Tailscale proxy pods run in the tailscale namespace, so the existing
customer1-only namespaceSelector blocked proxy → dashboard traffic.
2026-05-25 07:15:59 +00:00
Hermes DevOps
113324abc1 fix(platform): add port 3000 to trading-platform NetworkPolicy ingress rules
Dashboard listens on port 3000 but NetworkPolicy only allowed 8000-8003.
This blocked all traffic including Tailscale proxy connections to trade:3000.
2026-05-25 07:05:45 +00:00
569a3d5de9 fix(dashboard): change tailscale hostname to "trade" for reliable resolution
Short hostname "trade" (matches /trade HTTPRoute) instead of "trading-dashboard".

This fixes the "Could not resolve host: trading-dashboard" error on tailnet devices while keeping the same annotation style as Grafana.
2026-05-25 06:32:24 +00:00
4be12802d0 fix(execute-service): add timeoutSeconds: 10 to startup/readiness probes
The /health/ready endpoint calls await initialize() on Hyperliquid and Solana executors. Without explicit timeout, the default 1s probe timeout caused repeated failures even though the app was running.

Added timeoutSeconds: 10 + reduced readiness failureThreshold.

This is the final piece for the "running but not ready" state.
2026-05-25 06:26:09 +00:00
605e15d55c fix(dashboard): add tmp volumeMount for readOnlyRootFilesystem
Next.js standalone mode needs a writable /tmp directory for cache, temp files, and logs.

With , the container was crashing after "Ready in 228ms" (EOF in log stream).

Added the standard emptyDir volumeMount used by other services.

This should make the dashboard stable and accessible on tailnet.
2026-05-25 06:17:28 +00:00
abecefe0e1 fix(execute-service): update startupProbe to /health/ready with 30 failureThreshold
The service was 'running but not ready' because:
- startupProbe used /health (always-ok) with only failureThreshold: 6 (~30s grace)
- Executor initialization (Hyperliquid SDK network calls + Solana client) takes longer

Now uses /health/ready (checks actual executor state) with failureThreshold: 30 (~5min grace), matching the pattern used for data-service and dashboard.

Also updated Helm template for consistency.
2026-05-25 06:09:20 +00:00