Isolate frontend and delivery runtimes with separate volumes
This commit is contained in:
@@ -3,10 +3,6 @@ set -euo pipefail
|
|||||||
|
|
||||||
cd "$(dirname "$0")/.."
|
cd "$(dirname "$0")/.."
|
||||||
|
|
||||||
# Serialize dependency install when multiple containers share the same workspace.
|
|
||||||
LOCK_FILE=/app/Frontend/.npm-install.lock
|
|
||||||
exec 9>"$LOCK_FILE"
|
|
||||||
|
|
||||||
# Prevent path leakage between host Nuxt build cache and Docker runtime.
|
# Prevent path leakage between host Nuxt build cache and Docker runtime.
|
||||||
# If any cache contains absolute /Users/... imports, Nitro dev runtime can break in /app.
|
# If any cache contains absolute /Users/... imports, Nitro dev runtime can break in /app.
|
||||||
mkdir -p .nuxt .output
|
mkdir -p .nuxt .output
|
||||||
@@ -14,10 +10,6 @@ find .nuxt -mindepth 1 -maxdepth 1 -exec rm -rf {} + || true
|
|||||||
find .output -mindepth 1 -maxdepth 1 -exec rm -rf {} + || true
|
find .output -mindepth 1 -maxdepth 1 -exec rm -rf {} + || true
|
||||||
rm -rf node_modules/.cache node_modules/.vite
|
rm -rf node_modules/.cache node_modules/.vite
|
||||||
|
|
||||||
# Only installation steps are serialized; runtime must not hold the lock.
|
|
||||||
(
|
|
||||||
flock 9
|
|
||||||
|
|
||||||
# Install deps (container starts from a clean image).
|
# Install deps (container starts from a clean image).
|
||||||
# This workspace has mixed Apollo/Nuxt peer graphs; keep install deterministic in Docker.
|
# This workspace has mixed Apollo/Nuxt peer graphs; keep install deterministic in Docker.
|
||||||
npm install --legacy-peer-deps
|
npm install --legacy-peer-deps
|
||||||
@@ -36,7 +28,6 @@ rm -rf node_modules/.cache node_modules/.vite
|
|||||||
else
|
else
|
||||||
npm rebuild sharp || true
|
npm rebuild sharp || true
|
||||||
fi
|
fi
|
||||||
)
|
|
||||||
|
|
||||||
# Wait until PostgreSQL is reachable before applying schema.
|
# Wait until PostgreSQL is reachable before applying schema.
|
||||||
until node -e "const u=new URL(process.env.DATABASE_URL||''); const net=require('net'); const s=net.createConnection({host:u.hostname,port:Number(u.port||5432)}); s.on('connect',()=>{s.end(); process.exit(0);}); s.on('error',()=>process.exit(1)); setTimeout(()=>process.exit(1), 1000);" ; do
|
until node -e "const u=new URL(process.env.DATABASE_URL||''); const net=require('net'); const s=net.createConnection({host:u.hostname,port:Number(u.port||5432)}); s.on('connect',()=>{s.end(); process.exit(0);}); s.on('error',()=>process.exit(1)); setTimeout(()=>process.exit(1), 1000);" ; do
|
||||||
|
|||||||
@@ -3,14 +3,6 @@ set -euo pipefail
|
|||||||
|
|
||||||
cd "$(dirname "$0")/.."
|
cd "$(dirname "$0")/.."
|
||||||
|
|
||||||
# Serialize dependency install when multiple containers share the same workspace.
|
|
||||||
LOCK_FILE=/app/Frontend/.npm-install.lock
|
|
||||||
exec 9>"$LOCK_FILE"
|
|
||||||
|
|
||||||
# Only dependency bootstrap is serialized; worker runtime must not hold the lock.
|
|
||||||
(
|
|
||||||
flock 9
|
|
||||||
|
|
||||||
# Worker container starts from clean image.
|
# Worker container starts from clean image.
|
||||||
# Install deps without frontend postinstall hooks (nuxt prepare) to keep worker lean/stable.
|
# Install deps without frontend postinstall hooks (nuxt prepare) to keep worker lean/stable.
|
||||||
npm install --ignore-scripts --legacy-peer-deps
|
npm install --ignore-scripts --legacy-peer-deps
|
||||||
@@ -27,7 +19,6 @@ exec 9>"$LOCK_FILE"
|
|||||||
npm rebuild sharp || true
|
npm rebuild sharp || true
|
||||||
fi
|
fi
|
||||||
npx prisma generate
|
npx prisma generate
|
||||||
)
|
|
||||||
|
|
||||||
# Ensure DB is reachable before the worker starts consuming jobs.
|
# Ensure DB is reachable before the worker starts consuming jobs.
|
||||||
until node -e "const u=new URL(process.env.DATABASE_URL||''); const net=require('net'); const s=net.createConnection({host:u.hostname,port:Number(u.port||5432)}); s.on('connect',()=>{s.end(); process.exit(0);}); s.on('error',()=>process.exit(1)); setTimeout(()=>process.exit(1), 1000);" ; do
|
until node -e "const u=new URL(process.env.DATABASE_URL||''); const net=require('net'); const s=net.createConnection({host:u.hostname,port:Number(u.port||5432)}); s.on('connect',()=>{s.end(); process.exit(0);}); s.on('error',()=>process.exit(1)); setTimeout(()=>process.exit(1), 1000);" ; do
|
||||||
|
|||||||
@@ -1,9 +1,12 @@
|
|||||||
services:
|
services:
|
||||||
frontend:
|
frontend:
|
||||||
image: node:22-bookworm-slim
|
image: node:22-bookworm-slim
|
||||||
working_dir: /app/Frontend
|
working_dir: /app/frontend
|
||||||
volumes:
|
volumes:
|
||||||
- ./Frontend:/app/Frontend
|
- ./Frontend:/app/frontend
|
||||||
|
- frontend_node_modules:/app/frontend/node_modules
|
||||||
|
- frontend_nuxt:/app/frontend/.nuxt
|
||||||
|
- frontend_output:/app/frontend/.output
|
||||||
expose:
|
expose:
|
||||||
- "3000"
|
- "3000"
|
||||||
environment:
|
environment:
|
||||||
@@ -48,11 +51,12 @@ services:
|
|||||||
- default
|
- default
|
||||||
- dokploy-network
|
- dokploy-network
|
||||||
|
|
||||||
delivery-worker:
|
delivery:
|
||||||
image: node:22-bookworm-slim
|
image: node:22-bookworm-slim
|
||||||
working_dir: /app/Frontend
|
working_dir: /app/delivery
|
||||||
volumes:
|
volumes:
|
||||||
- ./Frontend:/app/Frontend
|
- ./Frontend:/app/delivery
|
||||||
|
- delivery_node_modules:/app/delivery/node_modules
|
||||||
environment:
|
environment:
|
||||||
DATABASE_URL: "${DATABASE_URL:-postgresql://postgres:dpb6gmj1umjhohso@crm-sql-q57r8m:5432/postgres?schema=public}"
|
DATABASE_URL: "${DATABASE_URL:-postgresql://postgres:dpb6gmj1umjhohso@crm-sql-q57r8m:5432/postgres?schema=public}"
|
||||||
REDIS_URL: "${REDIS_URL:-redis://default:nw0mv1pemhnbh7gw@crm-redis-vkpxku:6379}"
|
REDIS_URL: "${REDIS_URL:-redis://default:nw0mv1pemhnbh7gw@crm-redis-vkpxku:6379}"
|
||||||
@@ -198,6 +202,10 @@ services:
|
|||||||
start_period: 5s
|
start_period: 5s
|
||||||
|
|
||||||
volumes:
|
volumes:
|
||||||
|
frontend_node_modules:
|
||||||
|
frontend_nuxt:
|
||||||
|
frontend_output:
|
||||||
|
delivery_node_modules:
|
||||||
langfuse_postgres_data:
|
langfuse_postgres_data:
|
||||||
langfuse_clickhouse_data:
|
langfuse_clickhouse_data:
|
||||||
langfuse_clickhouse_logs:
|
langfuse_clickhouse_logs:
|
||||||
|
|||||||
Reference in New Issue
Block a user