Files
openclaw/tmp/setup_eva_memory_root.sh

70 lines
2.1 KiB
Bash
Raw Normal View History

#!/usr/bin/env bash
set -euo pipefail
APP_USER="eva_mem_app"
DB_NAME="eva_memory"
APP_PASS="$(tr -dc 'A-Za-z0-9@#%+=' </dev/urandom | head -c 24)"
sudo -u postgres psql -v ON_ERROR_STOP=1 <<SQL
DO $$
BEGIN
IF NOT EXISTS (SELECT FROM pg_roles WHERE rolname='${APP_USER}') THEN
CREATE ROLE ${APP_USER} LOGIN PASSWORD '${APP_PASS}';
ELSE
ALTER ROLE ${APP_USER} WITH PASSWORD '${APP_PASS}';
END IF;
END
$$;
SQL
if ! sudo -u postgres psql -tAc "SELECT 1 FROM pg_database WHERE datname='${DB_NAME}'" | grep -q 1; then
sudo -u postgres createdb -O ${APP_USER} ${DB_NAME}
fi
sudo -u postgres psql -d ${DB_NAME} -v ON_ERROR_STOP=1 <<'SQL'
CREATE EXTENSION IF NOT EXISTS vector;
CREATE TABLE IF NOT EXISTS mem_items (
id BIGSERIAL PRIMARY KEY,
item_type TEXT NOT NULL,
title TEXT,
content TEXT NOT NULL,
tags TEXT[] DEFAULT '{}',
source_path TEXT,
created_at TIMESTAMPTZ DEFAULT now(),
updated_at TIMESTAMPTZ DEFAULT now()
);
CREATE TABLE IF NOT EXISTS mem_vectors (
item_id BIGINT PRIMARY KEY REFERENCES mem_items(id) ON DELETE CASCADE,
embedding vector(1536),
model TEXT,
created_at TIMESTAMPTZ DEFAULT now()
);
CREATE INDEX IF NOT EXISTS idx_mem_items_type ON mem_items(item_type);
CREATE INDEX IF NOT EXISTS idx_mem_items_updated ON mem_items(updated_at DESC);
SQL
sudo -u postgres psql -d ${DB_NAME} -v ON_ERROR_STOP=1 <<SQL
GRANT CONNECT ON DATABASE ${DB_NAME} TO ${APP_USER};
GRANT USAGE ON SCHEMA public TO ${APP_USER};
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO ${APP_USER};
GRANT USAGE, SELECT ON ALL SEQUENCES IN SCHEMA public TO ${APP_USER};
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO ${APP_USER};
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT USAGE, SELECT ON SEQUENCES TO ${APP_USER};
SQL
install -m 700 -d /etc/eva-memory
cat > /etc/eva-memory/connection.env <<EOF
DB_HOST=192.168.0.135
DB_PORT=5432
DB_NAME=${DB_NAME}
DB_USER=${APP_USER}
DB_PASS=${APP_PASS}
EOF
chmod 600 /etc/eva-memory/connection.env
echo "READY"
echo "DB_HOST=192.168.0.135"
echo "DB_PORT=5432"
echo "DB_NAME=${DB_NAME}"
echo "DB_USER=${APP_USER}"