@cybermem/mcp 0.5.3 → 0.6.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/index.js +204 -28
- package/package.json +29 -28
- package/requirements.txt +2 -0
- package/server.py +347 -0
- package/src/index.ts +228 -0
- package/test_mcp.py +111 -0
- package/tsconfig.json +14 -0
- package/dist/commands/__tests__/backup.test.js +0 -75
- package/dist/commands/__tests__/restore.test.js +0 -70
- package/dist/commands/backup.js +0 -52
- package/dist/commands/deploy.js +0 -242
- package/dist/commands/init.js +0 -65
- package/dist/commands/restore.js +0 -62
- package/dist/templates/ansible/inventory/hosts.ini +0 -3
- package/dist/templates/ansible/playbooks/deploy-cybermem.yml +0 -71
- package/dist/templates/ansible/playbooks/stop-cybermem.yml +0 -17
- package/dist/templates/charts/cybermem/Chart.yaml +0 -6
- package/dist/templates/charts/cybermem/templates/dashboard-deployment.yaml +0 -29
- package/dist/templates/charts/cybermem/templates/dashboard-service.yaml +0 -20
- package/dist/templates/charts/cybermem/templates/openmemory-deployment.yaml +0 -40
- package/dist/templates/charts/cybermem/templates/openmemory-pvc.yaml +0 -10
- package/dist/templates/charts/cybermem/templates/openmemory-service.yaml +0 -13
- package/dist/templates/charts/cybermem/values-vps.yaml +0 -18
- package/dist/templates/charts/cybermem/values.yaml +0 -42
- package/dist/templates/docker-compose.yml +0 -236
- package/dist/templates/envs/local.example +0 -27
- package/dist/templates/envs/rpi.example +0 -27
- package/dist/templates/envs/vps.example +0 -25
- package/dist/templates/mcp-responder/Dockerfile +0 -6
- package/dist/templates/mcp-responder/server.js +0 -22
- package/dist/templates/monitoring/db_exporter/Dockerfile +0 -19
- package/dist/templates/monitoring/db_exporter/exporter.py +0 -313
- package/dist/templates/monitoring/db_exporter/requirements.txt +0 -2
- package/dist/templates/monitoring/grafana/dashboards/cybermem.json +0 -1088
- package/dist/templates/monitoring/grafana/provisioning/dashboards/default.yml +0 -12
- package/dist/templates/monitoring/grafana/provisioning/datasources/prometheus.yml +0 -9
- package/dist/templates/monitoring/log_exporter/Dockerfile +0 -13
- package/dist/templates/monitoring/log_exporter/exporter.py +0 -274
- package/dist/templates/monitoring/log_exporter/requirements.txt +0 -1
- package/dist/templates/monitoring/postgres_exporter/queries.yml +0 -22
- package/dist/templates/monitoring/prometheus/prometheus.yml +0 -22
- package/dist/templates/monitoring/traefik/dynamic/.gitkeep +0 -0
- package/dist/templates/monitoring/traefik/traefik.yml +0 -32
- package/dist/templates/monitoring/vector/vector.toml/vector.yaml +0 -77
- package/dist/templates/monitoring/vector/vector.yaml +0 -106
- package/dist/templates/openmemory/Dockerfile +0 -19
- package/templates/ansible/inventory/hosts.ini +0 -3
- package/templates/ansible/playbooks/deploy-cybermem.yml +0 -71
- package/templates/ansible/playbooks/stop-cybermem.yml +0 -17
- package/templates/charts/cybermem/Chart.yaml +0 -6
- package/templates/charts/cybermem/templates/dashboard-deployment.yaml +0 -29
- package/templates/charts/cybermem/templates/dashboard-service.yaml +0 -20
- package/templates/charts/cybermem/templates/openmemory-deployment.yaml +0 -40
- package/templates/charts/cybermem/templates/openmemory-pvc.yaml +0 -10
- package/templates/charts/cybermem/templates/openmemory-service.yaml +0 -13
- package/templates/charts/cybermem/values-vps.yaml +0 -18
- package/templates/charts/cybermem/values.yaml +0 -42
- package/templates/docker-compose.yml +0 -236
- package/templates/envs/local.example +0 -27
- package/templates/envs/rpi.example +0 -27
- package/templates/envs/vps.example +0 -25
- package/templates/mcp-responder/Dockerfile +0 -6
- package/templates/mcp-responder/server.js +0 -22
- package/templates/monitoring/db_exporter/Dockerfile +0 -19
- package/templates/monitoring/db_exporter/exporter.py +0 -313
- package/templates/monitoring/db_exporter/requirements.txt +0 -2
- package/templates/monitoring/grafana/dashboards/cybermem.json +0 -1088
- package/templates/monitoring/grafana/provisioning/dashboards/default.yml +0 -12
- package/templates/monitoring/grafana/provisioning/datasources/prometheus.yml +0 -9
- package/templates/monitoring/log_exporter/Dockerfile +0 -13
- package/templates/monitoring/log_exporter/exporter.py +0 -274
- package/templates/monitoring/log_exporter/requirements.txt +0 -1
- package/templates/monitoring/postgres_exporter/queries.yml +0 -22
- package/templates/monitoring/prometheus/prometheus.yml +0 -22
- package/templates/monitoring/traefik/dynamic/.gitkeep +0 -0
- package/templates/monitoring/traefik/traefik.yml +0 -32
- package/templates/monitoring/vector/vector.toml/vector.yaml +0 -77
- package/templates/monitoring/vector/vector.yaml +0 -106
- package/templates/openmemory/Dockerfile +0 -19
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
apiVersion: apps/v1
|
|
2
|
-
kind: Deployment
|
|
3
|
-
metadata:
|
|
4
|
-
name: {{ .Chart.Name }}-dashboard
|
|
5
|
-
labels:
|
|
6
|
-
app.kubernetes.io/name: dashboard
|
|
7
|
-
spec:
|
|
8
|
-
replicas: {{ .Values.dashboard.replicaCount }}
|
|
9
|
-
selector:
|
|
10
|
-
matchLabels:
|
|
11
|
-
app.kubernetes.io/name: dashboard
|
|
12
|
-
template:
|
|
13
|
-
metadata:
|
|
14
|
-
labels:
|
|
15
|
-
app.kubernetes.io/name: dashboard
|
|
16
|
-
spec:
|
|
17
|
-
containers:
|
|
18
|
-
- name: dashboard
|
|
19
|
-
image: "{{ .Values.dashboard.image.repository }}:{{ .Values.dashboard.image.tag }}"
|
|
20
|
-
imagePullPolicy: {{ .Values.dashboard.image.pullPolicy }}
|
|
21
|
-
ports:
|
|
22
|
-
- name: http
|
|
23
|
-
containerPort: 3000
|
|
24
|
-
protocol: TCP
|
|
25
|
-
env:
|
|
26
|
-
- name: NEXT_PUBLIC_API_URL
|
|
27
|
-
value: "http://{{ .Chart.Name }}-openmemory:8080"
|
|
28
|
-
resources:
|
|
29
|
-
{{- toYaml .Values.dashboard.resources | nindent 12 }}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
apiVersion: v1
|
|
2
|
-
kind: Service
|
|
3
|
-
metadata:
|
|
4
|
-
name: {{ .Chart.Name }}-dashboard
|
|
5
|
-
spec:
|
|
6
|
-
type: {{ .Values.dashboard.service.type }}
|
|
7
|
-
ports:
|
|
8
|
-
- port: {{ .Values.dashboard.service.port }}
|
|
9
|
-
targetPort: http
|
|
10
|
-
protocol: TCP
|
|
11
|
-
name: http
|
|
12
|
-
{{- if eq .Values.dashboard.service.type "NodePort" }}
|
|
13
|
-
- port: {{ .Values.dashboard.service.port }}
|
|
14
|
-
targetPort: http
|
|
15
|
-
nodePort: {{ .Values.dashboard.service.nodePort }}
|
|
16
|
-
protocol: TCP
|
|
17
|
-
name: http-node
|
|
18
|
-
{{- end }}
|
|
19
|
-
selector:
|
|
20
|
-
app.kubernetes.io/name: dashboard
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
apiVersion: apps/v1
|
|
2
|
-
kind: Deployment
|
|
3
|
-
metadata:
|
|
4
|
-
name: {{ .Chart.Name }}-openmemory
|
|
5
|
-
labels:
|
|
6
|
-
app.kubernetes.io/name: openmemory
|
|
7
|
-
spec:
|
|
8
|
-
replicas: {{ .Values.openmemory.replicaCount }}
|
|
9
|
-
selector:
|
|
10
|
-
matchLabels:
|
|
11
|
-
app.kubernetes.io/name: openmemory
|
|
12
|
-
template:
|
|
13
|
-
metadata:
|
|
14
|
-
labels:
|
|
15
|
-
app.kubernetes.io/name: openmemory
|
|
16
|
-
spec:
|
|
17
|
-
containers:
|
|
18
|
-
- name: openmemory
|
|
19
|
-
image: "{{ .Values.openmemory.image.repository }}:{{ .Values.openmemory.image.tag }}"
|
|
20
|
-
imagePullPolicy: {{ .Values.openmemory.image.pullPolicy }}
|
|
21
|
-
ports:
|
|
22
|
-
- name: http
|
|
23
|
-
containerPort: 8080
|
|
24
|
-
protocol: TCP
|
|
25
|
-
env:
|
|
26
|
-
- name: OPENMEMORY_API_KEY
|
|
27
|
-
value: {{ .Values.env.OPENMEMORY_API_KEY | quote }}
|
|
28
|
-
- name: OPENAI_API_KEY
|
|
29
|
-
value: {{ .Values.env.OPENAI_API_KEY | quote }}
|
|
30
|
-
- name: DB_PATH
|
|
31
|
-
value: "/data/openmemory.sqlite"
|
|
32
|
-
volumeMounts:
|
|
33
|
-
- name: data
|
|
34
|
-
mountPath: /data
|
|
35
|
-
resources:
|
|
36
|
-
{{- toYaml .Values.openmemory.resources | nindent 12 }}
|
|
37
|
-
volumes:
|
|
38
|
-
- name: data
|
|
39
|
-
persistentVolumeClaim:
|
|
40
|
-
claimName: {{ .Chart.Name }}-openmemory-pvc
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
apiVersion: v1
|
|
2
|
-
kind: Service
|
|
3
|
-
metadata:
|
|
4
|
-
name: {{ .Chart.Name }}-openmemory
|
|
5
|
-
spec:
|
|
6
|
-
type: {{ .Values.openmemory.service.type }}
|
|
7
|
-
ports:
|
|
8
|
-
- port: {{ .Values.openmemory.service.port }}
|
|
9
|
-
targetPort: http
|
|
10
|
-
protocol: TCP
|
|
11
|
-
name: http
|
|
12
|
-
selector:
|
|
13
|
-
app.kubernetes.io/name: openmemory
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
# VPS Overrides
|
|
2
|
-
|
|
3
|
-
openmemory:
|
|
4
|
-
image:
|
|
5
|
-
repository: ghcr.io/mikhailkogan17/cybermem-openmemory
|
|
6
|
-
pullPolicy: Always
|
|
7
|
-
service:
|
|
8
|
-
type: ClusterIP
|
|
9
|
-
|
|
10
|
-
dashboard:
|
|
11
|
-
image:
|
|
12
|
-
repository: ghcr.io/mikhailkogan17/cybermem-dashboard
|
|
13
|
-
pullPolicy: Always
|
|
14
|
-
|
|
15
|
-
env:
|
|
16
|
-
OPENMEMORY_API_KEY: "prod-secret-key-CHANGE-ME"
|
|
17
|
-
# Add your OpenAI Key here for production
|
|
18
|
-
OPENAI_API_KEY: "sk-..."
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
# Default values for cybermem.
|
|
2
|
-
|
|
3
|
-
openmemory:
|
|
4
|
-
image:
|
|
5
|
-
repository: cybermem-openmemory
|
|
6
|
-
pullPolicy: IfNotPresent
|
|
7
|
-
tag: "latest"
|
|
8
|
-
replicaCount: 1
|
|
9
|
-
service:
|
|
10
|
-
type: ClusterIP
|
|
11
|
-
port: 8080
|
|
12
|
-
persistence:
|
|
13
|
-
enabled: true
|
|
14
|
-
size: 10Gi
|
|
15
|
-
accessMode: ReadWriteOnce
|
|
16
|
-
resources:
|
|
17
|
-
limits:
|
|
18
|
-
cpu: 1000m
|
|
19
|
-
memory: 1Gi
|
|
20
|
-
requests:
|
|
21
|
-
cpu: 100m
|
|
22
|
-
memory: 256Mi
|
|
23
|
-
env:
|
|
24
|
-
# Passed to the container
|
|
25
|
-
OM_PORT: "8080"
|
|
26
|
-
|
|
27
|
-
dashboard:
|
|
28
|
-
image:
|
|
29
|
-
repository: cybermem-dashboard
|
|
30
|
-
pullPolicy: IfNotPresent
|
|
31
|
-
tag: "latest"
|
|
32
|
-
replicaCount: 1
|
|
33
|
-
service:
|
|
34
|
-
type: ClusterIP
|
|
35
|
-
port: 3000
|
|
36
|
-
nodePort: 30000 # For k3d/local access if needed
|
|
37
|
-
resources: {}
|
|
38
|
-
|
|
39
|
-
env:
|
|
40
|
-
# Shared secrets
|
|
41
|
-
OPENMEMORY_API_KEY: "dev-secret-key"
|
|
42
|
-
OPENAI_API_KEY: ""
|
|
@@ -1,236 +0,0 @@
|
|
|
1
|
-
# CyberMem - OpenMemory + DevOps monitoring stack
|
|
2
|
-
# For local development only
|
|
3
|
-
# Production deployment: use Helm chart (charts/cybermem/)
|
|
4
|
-
|
|
5
|
-
services:
|
|
6
|
-
traefik:
|
|
7
|
-
image: traefik:v3.0
|
|
8
|
-
container_name: cybermem-traefik
|
|
9
|
-
command:
|
|
10
|
-
- --api.dashboard=true
|
|
11
|
-
- --api.insecure=true
|
|
12
|
-
- --providers.docker=true
|
|
13
|
-
- --providers.docker.exposedbydefault=false
|
|
14
|
-
- --entrypoints.web.address=:8626
|
|
15
|
-
- --accesslog=true
|
|
16
|
-
- --accesslog.filepath=/var/log/traefik/access.log
|
|
17
|
-
- --accesslog.format=json
|
|
18
|
-
ports:
|
|
19
|
-
- "8626:8626"
|
|
20
|
-
volumes:
|
|
21
|
-
- /var/run/docker.sock:/var/run/docker.sock:ro
|
|
22
|
-
- ./monitoring/traefik/traefik.yml:/etc/traefik/traefik.yml:ro
|
|
23
|
-
- ./monitoring/traefik/dynamic:/etc/traefik/dynamic:ro
|
|
24
|
-
- traefik-logs:/var/log/traefik
|
|
25
|
-
labels:
|
|
26
|
-
- traefik.enable=true
|
|
27
|
-
restart: unless-stopped
|
|
28
|
-
|
|
29
|
-
# Workaround: responds 200 on GET /mcp for Perplexity validation
|
|
30
|
-
mcp-responder:
|
|
31
|
-
build:
|
|
32
|
-
context: ./mcp-responder
|
|
33
|
-
dockerfile: Dockerfile
|
|
34
|
-
container_name: cybermem-mcp-responder
|
|
35
|
-
labels:
|
|
36
|
-
- traefik.enable=true
|
|
37
|
-
- traefik.http.routers.mcp-get.entrypoints=web
|
|
38
|
-
- traefik.http.routers.mcp-get.rule=Method(`GET`) && Path(`/mcp`)
|
|
39
|
-
- traefik.http.routers.mcp-get.priority=200
|
|
40
|
-
- traefik.http.services.mcp-get.loadbalancer.server.port=8081
|
|
41
|
-
restart: unless-stopped
|
|
42
|
-
|
|
43
|
-
openmemory:
|
|
44
|
-
build:
|
|
45
|
-
context: ./openmemory
|
|
46
|
-
dockerfile: Dockerfile
|
|
47
|
-
container_name: cybermem-openmemory
|
|
48
|
-
ports: [] # Access via Traefik on 8626
|
|
49
|
-
volumes:
|
|
50
|
-
- openmemory-data:/data
|
|
51
|
-
- ${CYBERMEM_ENV_PATH}:/.env
|
|
52
|
-
environment:
|
|
53
|
-
# Core settings
|
|
54
|
-
OM_PORT: "8080"
|
|
55
|
-
OM_TIER: "deep"
|
|
56
|
-
# API Key is loaded from /.env file
|
|
57
|
-
|
|
58
|
-
# Embeddings (local dev uses Ollama)
|
|
59
|
-
OM_EMBEDDINGS: ${EMBEDDINGS_PROVIDER:-ollama}
|
|
60
|
-
OLLAMA_URL: ${OLLAMA_URL:-http://ollama:11434}
|
|
61
|
-
OPENAI_API_KEY: ${OPENAI_API_KEY:-}
|
|
62
|
-
|
|
63
|
-
# Database (local dev uses SQLite)
|
|
64
|
-
OM_METADATA_BACKEND: ${DB_BACKEND:-sqlite}
|
|
65
|
-
OM_DB_PATH: ${DB_PATH:-/data/openmemory.sqlite}
|
|
66
|
-
OM_VECTOR_BACKEND: ${VECTOR_BACKEND:-sqlite}
|
|
67
|
-
|
|
68
|
-
# PostgreSQL (for production/testing)
|
|
69
|
-
OM_PG_HOST: ${PG_HOST:-postgres}
|
|
70
|
-
OM_PG_PORT: ${PG_PORT:-5432}
|
|
71
|
-
OM_PG_DB: ${PG_DB:-openmemory}
|
|
72
|
-
OM_PG_USER: ${PG_USER:-openmemory}
|
|
73
|
-
OM_PG_PASSWORD: ${PG_PASSWORD:-}
|
|
74
|
-
|
|
75
|
-
# Performance
|
|
76
|
-
OM_RATE_LIMIT_ENABLED: "true"
|
|
77
|
-
OM_RATE_LIMIT_MAX_REQUESTS: "1000"
|
|
78
|
-
|
|
79
|
-
labels:
|
|
80
|
-
- traefik.enable=true
|
|
81
|
-
- traefik.http.routers.openmemory.entrypoints=web
|
|
82
|
-
- traefik.http.routers.openmemory.rule=PathPrefix(`/memory`) || PathPrefix(`/health`) || PathPrefix(`/v1`) || PathPrefix(`/api`) || PathPrefix(`/all`) || PathPrefix(`/add`) || PathPrefix(`/mcp`) || PathPrefix(`/sse`)
|
|
83
|
-
- traefik.http.services.openmemory.loadbalancer.server.port=8080
|
|
84
|
-
healthcheck:
|
|
85
|
-
test:
|
|
86
|
-
[
|
|
87
|
-
"CMD",
|
|
88
|
-
"wget",
|
|
89
|
-
"--quiet",
|
|
90
|
-
"--tries=1",
|
|
91
|
-
"--spider",
|
|
92
|
-
"http://localhost:8080/health",
|
|
93
|
-
]
|
|
94
|
-
interval: 30s
|
|
95
|
-
timeout: 10s
|
|
96
|
-
retries: 3
|
|
97
|
-
start_period: 40s
|
|
98
|
-
restart: unless-stopped
|
|
99
|
-
depends_on:
|
|
100
|
-
- traefik
|
|
101
|
-
|
|
102
|
-
db-exporter:
|
|
103
|
-
image: ghcr.io/mikhailkogan17/cybermem-db_exporter:latest
|
|
104
|
-
container_name: cybermem-db-exporter
|
|
105
|
-
environment:
|
|
106
|
-
DB_PATH: /data/openmemory.sqlite
|
|
107
|
-
SCRAPE_INTERVAL: "15"
|
|
108
|
-
EXPORTER_PORT: "8000"
|
|
109
|
-
ports:
|
|
110
|
-
- "8000:8000"
|
|
111
|
-
volumes:
|
|
112
|
-
- openmemory-data:/data:ro
|
|
113
|
-
restart: unless-stopped
|
|
114
|
-
depends_on:
|
|
115
|
-
- openmemory
|
|
116
|
-
|
|
117
|
-
log-exporter:
|
|
118
|
-
image: ghcr.io/mikhailkogan17/cybermem-log_exporter:latest
|
|
119
|
-
container_name: cybermem-log-exporter
|
|
120
|
-
environment:
|
|
121
|
-
LOG_FILE: /var/log/traefik/access.log
|
|
122
|
-
SCRAPE_INTERVAL: "5"
|
|
123
|
-
EXPORTER_PORT: "8001"
|
|
124
|
-
DB_PATH: /data/openmemory.sqlite
|
|
125
|
-
volumes:
|
|
126
|
-
- traefik-logs:/var/log/traefik:ro
|
|
127
|
-
- openmemory-data:/data
|
|
128
|
-
- ./monitoring/log_exporter/exporter.py:/app/exporter.py:ro
|
|
129
|
-
restart: unless-stopped
|
|
130
|
-
depends_on:
|
|
131
|
-
- traefik
|
|
132
|
-
- openmemory
|
|
133
|
-
|
|
134
|
-
postgres:
|
|
135
|
-
image: postgres:15-alpine
|
|
136
|
-
container_name: cybermem-postgres
|
|
137
|
-
environment:
|
|
138
|
-
POSTGRES_DB: ${PG_DB:-openmemory}
|
|
139
|
-
POSTGRES_USER: ${PG_USER:-openmemory}
|
|
140
|
-
POSTGRES_PASSWORD: ${PG_PASSWORD:-postgres}
|
|
141
|
-
ports:
|
|
142
|
-
- "5432:5432"
|
|
143
|
-
volumes:
|
|
144
|
-
- postgres-data:/var/lib/postgresql/data
|
|
145
|
-
healthcheck:
|
|
146
|
-
test: ["CMD-SHELL", "pg_isready -U ${PG_USER:-openmemory}"]
|
|
147
|
-
interval: 10s
|
|
148
|
-
timeout: 5s
|
|
149
|
-
retries: 5
|
|
150
|
-
restart: unless-stopped
|
|
151
|
-
profiles:
|
|
152
|
-
- postgres
|
|
153
|
-
|
|
154
|
-
postgres-exporter:
|
|
155
|
-
image: prometheuscommunity/postgres-exporter:v0.15.0
|
|
156
|
-
container_name: cybermem-postgres-exporter
|
|
157
|
-
environment:
|
|
158
|
-
DATA_SOURCE_NAME: postgresql://${PG_USER:-openmemory}:${PG_PASSWORD:-postgres}@postgres:5432/${PG_DB:-openmemory}?sslmode=disable
|
|
159
|
-
PG_EXPORTER_EXTEND_QUERY_PATH: /queries.yml
|
|
160
|
-
ports:
|
|
161
|
-
- "9187:9187"
|
|
162
|
-
volumes:
|
|
163
|
-
- ./monitoring/postgres_exporter/queries.yml:/queries.yml:ro
|
|
164
|
-
restart: unless-stopped
|
|
165
|
-
depends_on:
|
|
166
|
-
- postgres
|
|
167
|
-
profiles:
|
|
168
|
-
- postgres
|
|
169
|
-
|
|
170
|
-
ollama:
|
|
171
|
-
image: ollama/ollama:latest
|
|
172
|
-
container_name: cybermem-ollama
|
|
173
|
-
ports:
|
|
174
|
-
- "11434:11434"
|
|
175
|
-
volumes:
|
|
176
|
-
- ollama-models:/root/.ollama
|
|
177
|
-
restart: unless-stopped
|
|
178
|
-
profiles:
|
|
179
|
-
- ollama
|
|
180
|
-
|
|
181
|
-
prometheus:
|
|
182
|
-
image: prom/prometheus:v2.48.0
|
|
183
|
-
container_name: cybermem-prometheus
|
|
184
|
-
command:
|
|
185
|
-
- --config.file=/etc/prometheus/prometheus.yml
|
|
186
|
-
- --storage.tsdb.path=/prometheus
|
|
187
|
-
- --storage.tsdb.retention.time=${PROM_RETENTION:-7d}
|
|
188
|
-
- --web.console.libraries=/usr/share/prometheus/console_libraries
|
|
189
|
-
- --web.console.templates=/usr/share/prometheus/consoles
|
|
190
|
-
ports:
|
|
191
|
-
- "9092:9090"
|
|
192
|
-
volumes:
|
|
193
|
-
- ./monitoring/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml:ro
|
|
194
|
-
- prometheus-data:/prometheus
|
|
195
|
-
restart: unless-stopped
|
|
196
|
-
depends_on:
|
|
197
|
-
- db-exporter
|
|
198
|
-
|
|
199
|
-
dashboard:
|
|
200
|
-
image: ghcr.io/mikhailkogan17/cybermem-dashboard:latest
|
|
201
|
-
container_name: cybermem-dashboard
|
|
202
|
-
environment:
|
|
203
|
-
NEXT_PUBLIC_PROMETHEUS_URL: http://prometheus:9090
|
|
204
|
-
PROMETHEUS_URL: http://prometheus:9090
|
|
205
|
-
OM_API_KEY: ${OM_API_KEY:-dev-secret-key}
|
|
206
|
-
# WATCHPACK_POLLING: "true" # Enable if hot reload blocks (high CPU usage)
|
|
207
|
-
ports:
|
|
208
|
-
- "3000:3000"
|
|
209
|
-
volumes:
|
|
210
|
-
- openmemory-data:/data
|
|
211
|
-
- /var/run/docker.sock:/var/run/docker.sock
|
|
212
|
-
- ${CYBERMEM_ENV_PATH}:/app/shared.env
|
|
213
|
-
restart: unless-stopped
|
|
214
|
-
depends_on:
|
|
215
|
-
- prometheus
|
|
216
|
-
|
|
217
|
-
volumes:
|
|
218
|
-
openmemory-data:
|
|
219
|
-
name: cybermem-openmemory-data
|
|
220
|
-
driver: local
|
|
221
|
-
postgres-data:
|
|
222
|
-
name: cybermem-postgres-data
|
|
223
|
-
driver: local
|
|
224
|
-
ollama-models:
|
|
225
|
-
name: cybermem-ollama-models
|
|
226
|
-
driver: local
|
|
227
|
-
prometheus-data:
|
|
228
|
-
name: cybermem-prometheus-data
|
|
229
|
-
driver: local
|
|
230
|
-
traefik-logs:
|
|
231
|
-
name: cybermem-traefik-logs
|
|
232
|
-
driver: local
|
|
233
|
-
|
|
234
|
-
networks:
|
|
235
|
-
default:
|
|
236
|
-
name: cybermem-network
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
# Example environment configuration
|
|
2
|
-
# Copy to .env and customize
|
|
3
|
-
|
|
4
|
-
# Embeddings provider: ollama (local) or openai (cloud)
|
|
5
|
-
EMBEDDINGS_PROVIDER=ollama
|
|
6
|
-
OLLAMA_URL=http://ollama:11434
|
|
7
|
-
OPENAI_API_KEY=
|
|
8
|
-
|
|
9
|
-
# Database backend: sqlite (local/rpi) or postgres (vps)
|
|
10
|
-
DB_BACKEND=sqlite
|
|
11
|
-
DB_PATH=/data/openmemory.sqlite
|
|
12
|
-
VECTOR_BACKEND=sqlite
|
|
13
|
-
|
|
14
|
-
# PostgreSQL settings (only for DB_BACKEND=postgres)
|
|
15
|
-
PG_HOST=postgres
|
|
16
|
-
PG_PORT=5432
|
|
17
|
-
PG_DB=openmemory
|
|
18
|
-
PG_USER=openmemory
|
|
19
|
-
PG_PASSWORD=change-me
|
|
20
|
-
|
|
21
|
-
# OpenMemory API key (Optional for local mode)
|
|
22
|
-
# OM_API_KEY=
|
|
23
|
-
|
|
24
|
-
# Monitoring
|
|
25
|
-
PROM_RETENTION=7d
|
|
26
|
-
GRAFANA_USER=admin
|
|
27
|
-
GRAFANA_PASSWORD=admin
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
# Raspberry Pi environment
|
|
2
|
-
# Optimized for low memory (1GB total)
|
|
3
|
-
DOCKER_PLATFORM=linux/arm64
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
# Embeddings (use Ollama with small models)
|
|
7
|
-
EMBEDDINGS_PROVIDER=ollama
|
|
8
|
-
OLLAMA_URL=http://ollama:11434
|
|
9
|
-
OPENAI_API_KEY=
|
|
10
|
-
|
|
11
|
-
# Database (SQLite for RPi - low memory footprint)
|
|
12
|
-
DB_BACKEND=sqlite
|
|
13
|
-
DB_PATH=/data/openmemory.sqlite
|
|
14
|
-
|
|
15
|
-
# PostgreSQL (not used)
|
|
16
|
-
PG_HOST=postgres
|
|
17
|
-
PG_DB=openmemory
|
|
18
|
-
PG_USER=openmemory
|
|
19
|
-
PG_PASSWORD=not-used
|
|
20
|
-
|
|
21
|
-
# OpenMemory
|
|
22
|
-
OM_API_KEY=key-change-me
|
|
23
|
-
|
|
24
|
-
# Monitoring (short retention for disk space)
|
|
25
|
-
PROM_RETENTION=3d
|
|
26
|
-
GRAFANA_USER=admin
|
|
27
|
-
GRAFANA_PASSWORD=admin
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
# VPS production environment
|
|
2
|
-
# For Hetzner CX22 or similar (2 vCPU, 4GB RAM)
|
|
3
|
-
|
|
4
|
-
# Embeddings (use OpenAI for production)
|
|
5
|
-
EMBEDDINGS_PROVIDER=openai
|
|
6
|
-
OPENAI_API_KEY=sk-change-me-in-production
|
|
7
|
-
OLLAMA_URL=
|
|
8
|
-
|
|
9
|
-
# Database (PostgreSQL for production)
|
|
10
|
-
DB_BACKEND=postgres
|
|
11
|
-
VECTOR_BACKEND=postgres
|
|
12
|
-
|
|
13
|
-
# PostgreSQL
|
|
14
|
-
PG_HOST=postgres
|
|
15
|
-
PG_DB=openmemory
|
|
16
|
-
PG_USER=openmemory
|
|
17
|
-
PG_PASSWORD=change-me-in-production-use-secrets
|
|
18
|
-
|
|
19
|
-
# OpenMemory
|
|
20
|
-
OM_API_KEY=change-me-in-production-use-secrets
|
|
21
|
-
|
|
22
|
-
# Monitoring
|
|
23
|
-
PROM_RETENTION=30d
|
|
24
|
-
GRAFANA_USER=admin
|
|
25
|
-
GRAFANA_PASSWORD=change-me-in-production-use-secrets
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
const http = require('http');
|
|
2
|
-
|
|
3
|
-
const server = http.createServer((req, res) => {
|
|
4
|
-
if (req.method === 'GET' && req.url === '/mcp') {
|
|
5
|
-
res.writeHead(200, { 'Content-Type': 'application/json' });
|
|
6
|
-
res.end(JSON.stringify({
|
|
7
|
-
jsonrpc: '2.0',
|
|
8
|
-
result: {
|
|
9
|
-
serverInfo: { name: 'openmemory-mcp', version: '1.3.2' },
|
|
10
|
-
protocolVersion: '2025-06-18',
|
|
11
|
-
capabilities: { tools: {}, resources: {}, logging: {} },
|
|
12
|
-
message: 'Use POST /mcp for MCP requests'
|
|
13
|
-
},
|
|
14
|
-
id: null
|
|
15
|
-
}));
|
|
16
|
-
} else {
|
|
17
|
-
res.writeHead(404);
|
|
18
|
-
res.end();
|
|
19
|
-
}
|
|
20
|
-
});
|
|
21
|
-
|
|
22
|
-
server.listen(8081, () => console.log('MCP responder on :8081'));
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
FROM python:3.11-alpine
|
|
2
|
-
|
|
3
|
-
WORKDIR /app
|
|
4
|
-
|
|
5
|
-
# Install dependencies
|
|
6
|
-
COPY requirements.txt .
|
|
7
|
-
RUN pip install --no-cache-dir -r requirements.txt
|
|
8
|
-
|
|
9
|
-
# Copy exporter script
|
|
10
|
-
COPY exporter.py .
|
|
11
|
-
|
|
12
|
-
# Make script executable
|
|
13
|
-
RUN chmod +x exporter.py
|
|
14
|
-
|
|
15
|
-
# Expose Prometheus metrics port
|
|
16
|
-
EXPOSE 8000
|
|
17
|
-
|
|
18
|
-
# Run exporter
|
|
19
|
-
CMD ["python", "-u", "exporter.py"]
|