fix(encrypted-p2p-chat): repair dev-up after surrealdb 3.x and pnpm migration

- Switch frontend Dockerfiles to pnpm via corepack (project uses pnpm-lock.yaml)
- Pin SurrealDB to v3.0.5 and switch datastore URL from `file:` to `rocksdb:`
- Add idempotent SurrealDB schema bootstrap on connect to prevent NotFoundError on first SELECT against schemaless tables in 3.x
This commit is contained in:
CarterPerez-dev 2026-04-29 01:46:36 -04:00
parent f156941cd8
commit d3dd5f2dcb
5 changed files with 39 additions and 23 deletions

View File

@ -59,8 +59,22 @@ class SurrealDBManager:
settings.SURREAL_DATABASE, settings.SURREAL_DATABASE,
) )
await self._init_schema()
self._connected = True self._connected = True
async def _init_schema(self) -> None:
"""
Define tables used by the application so empty SELECTs do not error
"""
schema = """
DEFINE TABLE IF NOT EXISTS rooms SCHEMALESS;
DEFINE TABLE IF NOT EXISTS room_participants SCHEMALESS;
DEFINE TABLE IF NOT EXISTS messages SCHEMALESS;
DEFINE TABLE IF NOT EXISTS presence SCHEMALESS;
"""
await self.db.query(schema)
async def disconnect(self) -> None: async def disconnect(self) -> None:
""" """
Close SurrealDB connection Close SurrealDB connection

View File

@ -22,9 +22,9 @@ services:
restart: always restart: always
surrealdb: surrealdb:
image: surrealdb/surrealdb:latest image: surrealdb/surrealdb:v3.0.5
container_name: chat-surrealdb container_name: chat-surrealdb
command: start --log trace --user root --pass ${SURREAL_PASSWORD:?SURREAL_PASSWORD required} file:/data/database.db command: start --log trace --user root --pass ${SURREAL_PASSWORD:?SURREAL_PASSWORD required} rocksdb:/data/database.db
environment: environment:
- SURREAL_USER=root - SURREAL_USER=root
- SURREAL_PASS=${SURREAL_PASSWORD} - SURREAL_PASS=${SURREAL_PASSWORD}

View File

@ -1,17 +1,18 @@
# ©AngelaMos | 2025 # ©AngelaMos | 2026
# Development Vite Dockerfile # vite.docker
# HMR dev server, volume mounts for code
FROM node:22-alpine FROM node:22-alpine
RUN corepack enable
WORKDIR /app WORKDIR /app
COPY frontend/package*.json ./ COPY frontend/package.json frontend/pnpm-lock.yaml ./
RUN npm ci RUN pnpm install --frozen-lockfile
COPY frontend/ . COPY frontend/ .
EXPOSE 5173 EXPOSE 5173
CMD ["npm", "run", "dev", "--", "--host", "0.0.0.0"] CMD ["pnpm", "run", "dev", "--", "--host", "0.0.0.0"]

View File

@ -1,18 +1,19 @@
# ©AngelaMos | 2025 # ©AngelaMos | 2026
# Production Vite Dockerfile # vite.docker
# Multi-stage: build with node, serve with nginx
FROM node:22-alpine AS builder FROM node:22-alpine AS builder
RUN corepack enable
WORKDIR /app WORKDIR /app
COPY frontend/package*.json ./ COPY frontend/package.json frontend/pnpm-lock.yaml ./
RUN npm ci RUN pnpm install --frozen-lockfile
COPY frontend/ . COPY frontend/ .
RUN npm run build RUN pnpm run build
FROM nginx:alpine FROM nginx:alpine

View File

@ -13,7 +13,7 @@ services:
volumes: volumes:
- postgres_dev_data:/var/lib/postgresql/data - postgres_dev_data:/var/lib/postgresql/data
ports: ports:
- "${POSTGRES_HOST_PORT:-5432}:5432" - "${POSTGRES_HOST_PORT:-54332}:5432"
networks: networks:
- chat_network_dev - chat_network_dev
healthcheck: healthcheck:
@ -23,17 +23,17 @@ services:
retries: 5 retries: 5
surrealdb: surrealdb:
image: surrealdb/surrealdb:latest image: surrealdb/surrealdb:v3.0.5
container_name: chat-surrealdb-dev container_name: chat-surrealdb-dev
user: "0:0" user: "0:0"
command: start --log trace --user root --pass ${SURREAL_PASSWORD:?SURREAL_PASSWORD required} file:/data/database.db command: start --log trace --user root --pass ${SURREAL_PASSWORD:?SURREAL_PASSWORD required} rocksdb:/data/database.db
environment: environment:
- SURREAL_USER=root - SURREAL_USER=root
- SURREAL_PASS=${SURREAL_PASSWORD} - SURREAL_PASS=${SURREAL_PASSWORD}
volumes: volumes:
- surreal_dev_data:/data - surreal_dev_data:/data
ports: ports:
- "${SURREAL_HOST_PORT:-8001}:8000" - "${SURREAL_HOST_PORT:-7781}:8000"
networks: networks:
- chat_network_dev - chat_network_dev
healthcheck: healthcheck:
@ -55,7 +55,7 @@ services:
volumes: volumes:
- redis_dev_data:/data - redis_dev_data:/data
ports: ports:
- "${REDIS_HOST_PORT:-6379}:6379" - "${REDIS_HOST_PORT:-43434}:6379"
networks: networks:
- chat_network_dev - chat_network_dev
healthcheck: healthcheck:
@ -82,7 +82,7 @@ services:
REDIS_URL: ${REDIS_URL:-redis://redis:6379} REDIS_URL: ${REDIS_URL:-redis://redis:6379}
RP_ID: ${RP_ID:-localhost} RP_ID: ${RP_ID:-localhost}
RP_NAME: ${RP_NAME:-Encrypted P2P Chat} RP_NAME: ${RP_NAME:-Encrypted P2P Chat}
RP_ORIGIN: ${RP_ORIGIN:-http://localhost:82} RP_ORIGIN: ${RP_ORIGIN:-http://localhost:32342}
CORS_ORIGINS: ${CORS_ORIGINS} CORS_ORIGINS: ${CORS_ORIGINS}
volumes: volumes:
- ./backend:/app - ./backend:/app
@ -98,7 +98,7 @@ services:
networks: networks:
- chat_network_dev - chat_network_dev
ports: ports:
- "${BACKEND_HOST_PORT:-8000}:8000" - "${BACKEND_HOST_PORT:-30200}:8000"
restart: unless-stopped restart: unless-stopped
frontend: frontend:
@ -118,14 +118,14 @@ services:
networks: networks:
- chat_network_dev - chat_network_dev
ports: ports:
- "${FRONTEND_DEV_PORT:-5173}:5173" - "${FRONTEND_DEV_PORT:-34343}:5173"
restart: unless-stopped restart: unless-stopped
nginx: nginx:
image: nginx:alpine image: nginx:alpine
container_name: chat-nginx-dev container_name: chat-nginx-dev
ports: ports:
- "${NGINX_HTTP_PORT:-80}:80" - "${NGINX_HTTP_PORT:-3234}:80"
volumes: volumes:
- ./conf/nginx/dev.nginx:/etc/nginx/nginx.conf:ro - ./conf/nginx/dev.nginx:/etc/nginx/nginx.conf:ro
- ./conf/nginx/http.conf:/etc/nginx/http.conf:ro - ./conf/nginx/http.conf:/etc/nginx/http.conf:ro