This commit is contained in:
2026-02-06 12:15:43 +03:00
parent d654b1ffc8
commit 6d96372682
7 changed files with 60 additions and 11 deletions

View File

@ -1,5 +1,8 @@
FROM node:20-slim
# Prisma Query Engine needs OpenSSL shared libraries
RUN apt-get update -y && apt-get install -y openssl && rm -rf /var/lib/apt/lists/*
RUN corepack enable && corepack prepare pnpm@9.0.0 --activate
WORKDIR /app
@ -18,7 +21,7 @@ COPY . .
RUN pnpm build --filter=@coursecraft/api...
COPY docker/entrypoint-api.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh
RUN sed -i 's/\r$//' /entrypoint.sh && chmod +x /entrypoint.sh
EXPOSE 3125
CMD ["/entrypoint.sh"]

View File

@ -1,5 +1,8 @@
FROM node:20-slim
# OpenSSL for potential native dependencies
RUN apt-get update -y && apt-get install -y openssl && rm -rf /var/lib/apt/lists/*
RUN corepack enable && corepack prepare pnpm@9.0.0 --activate
WORKDIR /app
@ -15,9 +18,16 @@ RUN pnpm install --frozen-lockfile
COPY . .
# API_URL нужен на этапе сборки: Next.js «запекает» rewrites в билд
# These are needed at build time: Next.js inlines NEXT_PUBLIC_* into client bundle
ARG API_URL=http://api:3125
ARG NEXT_PUBLIC_SUPABASE_URL
ARG NEXT_PUBLIC_SUPABASE_ANON_KEY
ARG NEXT_PUBLIC_APP_URL=http://localhost:3080
ENV API_URL=${API_URL}
ENV NEXT_PUBLIC_SUPABASE_URL=${NEXT_PUBLIC_SUPABASE_URL}
ENV NEXT_PUBLIC_SUPABASE_ANON_KEY=${NEXT_PUBLIC_SUPABASE_ANON_KEY}
ENV NEXT_PUBLIC_APP_URL=${NEXT_PUBLIC_APP_URL}
RUN pnpm build --filter=@coursecraft/web...

View File

@ -65,11 +65,11 @@ services:
MEILISEARCH_HOST: http://meilisearch:7700
PORT: "3125"
NODE_ENV: production
# Явно из хостового .env (подставляются при docker compose up из текущей папки)
JWT_SECRET: ${JWT_SECRET}
SUPABASE_SERVICE_ROLE_KEY: ${SUPABASE_SERVICE_ROLE_KEY}
NEXT_PUBLIC_SUPABASE_URL: ${NEXT_PUBLIC_SUPABASE_URL}
NEXT_PUBLIC_SUPABASE_ANON_KEY: ${NEXT_PUBLIC_SUPABASE_ANON_KEY}
NEXT_PUBLIC_APP_URL: ${NEXT_PUBLIC_APP_URL:-http://localhost:3080}
ports:
- "3125:3125"
depends_on:
@ -96,11 +96,17 @@ services:
build:
context: ..
dockerfile: docker/Dockerfile.web
args:
API_URL: http://api:3125
NEXT_PUBLIC_SUPABASE_URL: ${NEXT_PUBLIC_SUPABASE_URL}
NEXT_PUBLIC_SUPABASE_ANON_KEY: ${NEXT_PUBLIC_SUPABASE_ANON_KEY}
NEXT_PUBLIC_APP_URL: ${NEXT_PUBLIC_APP_URL:-http://localhost:3080}
container_name: coursecraft-web
restart: unless-stopped
env_file: ../.env
environment:
API_URL: http://api:3125
NEXT_PUBLIC_APP_URL: ${NEXT_PUBLIC_APP_URL:-http://localhost:3080}
PORT: "3080"
NODE_ENV: production
ports:

View File

@ -1,5 +1,22 @@
#!/bin/sh
set -e
# Синхронизация схемы БД при старте (таблицы создадутся, если их ещё нет)
cd /app/packages/database && npx prisma db push --skip-generate --accept-data-loss 2>/dev/null || true
echo "=== CourseCraft API Entrypoint ==="
echo "DATABASE_URL is set: $([ -n "$DATABASE_URL" ] && echo 'yes' || echo 'NO — this will fail!')"
echo "REDIS_HOST=$REDIS_HOST REDIS_PORT=$REDIS_PORT"
# Ensure PostgreSQL extensions exist (idempotent)
echo "Ensuring PostgreSQL extensions..."
cd /app/packages/database
npx prisma db execute --stdin <<'SQL' || echo "WARNING: extension creation returned non-zero (may already exist)"
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
CREATE EXTENSION IF NOT EXISTS vector;
SQL
# Push Prisma schema (create/update tables)
echo "Running prisma db push..."
npx prisma db push --skip-generate --accept-data-loss
echo "Prisma db push completed successfully."
echo "Starting API server..."
cd /app && exec node apps/api/dist/main.js