From d3dd5f2dcb8b4f2d4954bbba5b7c51916cf31b82 Mon Sep 17 00:00:00 2001 From: CarterPerez-dev Date: Wed, 29 Apr 2026 01:46:36 -0400 Subject: [PATCH] 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 --- .../backend/app/core/surreal_manager.py | 14 ++++++++++++++ .../advanced/encrypted-p2p-chat/compose.yml | 4 ++-- .../conf/docker/dev/vite.docker | 13 +++++++------ .../conf/docker/prod/vite.docker | 13 +++++++------ .../encrypted-p2p-chat/dev.compose.yml | 18 +++++++++--------- 5 files changed, 39 insertions(+), 23 deletions(-) diff --git a/PROJECTS/advanced/encrypted-p2p-chat/backend/app/core/surreal_manager.py b/PROJECTS/advanced/encrypted-p2p-chat/backend/app/core/surreal_manager.py index 1335666e..822aa8a1 100644 --- a/PROJECTS/advanced/encrypted-p2p-chat/backend/app/core/surreal_manager.py +++ b/PROJECTS/advanced/encrypted-p2p-chat/backend/app/core/surreal_manager.py @@ -59,8 +59,22 @@ class SurrealDBManager: settings.SURREAL_DATABASE, ) + await self._init_schema() + 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: """ Close SurrealDB connection diff --git a/PROJECTS/advanced/encrypted-p2p-chat/compose.yml b/PROJECTS/advanced/encrypted-p2p-chat/compose.yml index e6440e42..f0e26871 100644 --- a/PROJECTS/advanced/encrypted-p2p-chat/compose.yml +++ b/PROJECTS/advanced/encrypted-p2p-chat/compose.yml @@ -22,9 +22,9 @@ services: restart: always surrealdb: - image: surrealdb/surrealdb:latest + image: surrealdb/surrealdb:v3.0.5 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: - SURREAL_USER=root - SURREAL_PASS=${SURREAL_PASSWORD} diff --git a/PROJECTS/advanced/encrypted-p2p-chat/conf/docker/dev/vite.docker b/PROJECTS/advanced/encrypted-p2p-chat/conf/docker/dev/vite.docker index b238d871..4b51b8c9 100644 --- a/PROJECTS/advanced/encrypted-p2p-chat/conf/docker/dev/vite.docker +++ b/PROJECTS/advanced/encrypted-p2p-chat/conf/docker/dev/vite.docker @@ -1,17 +1,18 @@ -# ©AngelaMos | 2025 -# Development Vite Dockerfile -# HMR dev server, volume mounts for code +# ©AngelaMos | 2026 +# vite.docker FROM node:22-alpine +RUN corepack enable + WORKDIR /app -COPY frontend/package*.json ./ +COPY frontend/package.json frontend/pnpm-lock.yaml ./ -RUN npm ci +RUN pnpm install --frozen-lockfile COPY frontend/ . EXPOSE 5173 -CMD ["npm", "run", "dev", "--", "--host", "0.0.0.0"] +CMD ["pnpm", "run", "dev", "--", "--host", "0.0.0.0"] diff --git a/PROJECTS/advanced/encrypted-p2p-chat/conf/docker/prod/vite.docker b/PROJECTS/advanced/encrypted-p2p-chat/conf/docker/prod/vite.docker index fca89cbc..980b98b0 100644 --- a/PROJECTS/advanced/encrypted-p2p-chat/conf/docker/prod/vite.docker +++ b/PROJECTS/advanced/encrypted-p2p-chat/conf/docker/prod/vite.docker @@ -1,18 +1,19 @@ -# ©AngelaMos | 2025 -# Production Vite Dockerfile -# Multi-stage: build with node, serve with nginx +# ©AngelaMos | 2026 +# vite.docker FROM node:22-alpine AS builder +RUN corepack enable + WORKDIR /app -COPY frontend/package*.json ./ +COPY frontend/package.json frontend/pnpm-lock.yaml ./ -RUN npm ci +RUN pnpm install --frozen-lockfile COPY frontend/ . -RUN npm run build +RUN pnpm run build FROM nginx:alpine diff --git a/PROJECTS/advanced/encrypted-p2p-chat/dev.compose.yml b/PROJECTS/advanced/encrypted-p2p-chat/dev.compose.yml index fbf66017..474fc14a 100644 --- a/PROJECTS/advanced/encrypted-p2p-chat/dev.compose.yml +++ b/PROJECTS/advanced/encrypted-p2p-chat/dev.compose.yml @@ -13,7 +13,7 @@ services: volumes: - postgres_dev_data:/var/lib/postgresql/data ports: - - "${POSTGRES_HOST_PORT:-5432}:5432" + - "${POSTGRES_HOST_PORT:-54332}:5432" networks: - chat_network_dev healthcheck: @@ -23,17 +23,17 @@ services: retries: 5 surrealdb: - image: surrealdb/surrealdb:latest + image: surrealdb/surrealdb:v3.0.5 container_name: chat-surrealdb-dev 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: - SURREAL_USER=root - SURREAL_PASS=${SURREAL_PASSWORD} volumes: - surreal_dev_data:/data ports: - - "${SURREAL_HOST_PORT:-8001}:8000" + - "${SURREAL_HOST_PORT:-7781}:8000" networks: - chat_network_dev healthcheck: @@ -55,7 +55,7 @@ services: volumes: - redis_dev_data:/data ports: - - "${REDIS_HOST_PORT:-6379}:6379" + - "${REDIS_HOST_PORT:-43434}:6379" networks: - chat_network_dev healthcheck: @@ -82,7 +82,7 @@ services: REDIS_URL: ${REDIS_URL:-redis://redis:6379} RP_ID: ${RP_ID:-localhost} 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} volumes: - ./backend:/app @@ -98,7 +98,7 @@ services: networks: - chat_network_dev ports: - - "${BACKEND_HOST_PORT:-8000}:8000" + - "${BACKEND_HOST_PORT:-30200}:8000" restart: unless-stopped frontend: @@ -118,14 +118,14 @@ services: networks: - chat_network_dev ports: - - "${FRONTEND_DEV_PORT:-5173}:5173" + - "${FRONTEND_DEV_PORT:-34343}:5173" restart: unless-stopped nginx: image: nginx:alpine container_name: chat-nginx-dev ports: - - "${NGINX_HTTP_PORT:-80}:80" + - "${NGINX_HTTP_PORT:-3234}:80" volumes: - ./conf/nginx/dev.nginx:/etc/nginx/nginx.conf:ro - ./conf/nginx/http.conf:/etc/nginx/http.conf:ro