This commit is contained in:
2026-02-06 03:26:24 +03:00
parent 9e5e9ddca4
commit c8032823fa
5 changed files with 128 additions and 0 deletions

11
.dockerignore Normal file
View File

@ -0,0 +1,11 @@
node_modules
.next
.turbo
dist
.git
*.log
.env
.env.local
.env.*
!packages/database/.env.example
apps/web/.env.local

20
docker/Dockerfile.ai Normal file
View File

@ -0,0 +1,20 @@
FROM node:20-alpine
RUN corepack enable && corepack prepare pnpm@9.0.0 --activate
WORKDIR /app
COPY package.json pnpm-lock.yaml pnpm-workspace.yaml ./
COPY apps/api/package.json apps/api/
COPY apps/ai-service/package.json apps/ai-service/
COPY packages/database/package.json packages/database/
COPY packages/shared/package.json packages/shared/
RUN pnpm install --frozen-lockfile
COPY . .
RUN pnpm build --filter=@coursecraft/ai-service...
WORKDIR /app
CMD ["node", "apps/ai-service/dist/index.js"]

21
docker/Dockerfile.api Normal file
View File

@ -0,0 +1,21 @@
FROM node:20-alpine
RUN corepack enable && corepack prepare pnpm@9.0.0 --activate
WORKDIR /app
COPY package.json pnpm-lock.yaml pnpm-workspace.yaml ./
COPY apps/api/package.json apps/api/
COPY apps/web/package.json apps/web/
COPY apps/ai-service/package.json apps/ai-service/
COPY packages/database/package.json packages/database/
COPY packages/shared/package.json packages/shared/
RUN pnpm install --frozen-lockfile
COPY . .
RUN pnpm build --filter=@coursecraft/api...
EXPOSE 3125
CMD ["node", "apps/api/dist/main.js"]

23
docker/Dockerfile.web Normal file
View File

@ -0,0 +1,23 @@
FROM node:20-alpine
RUN corepack enable && corepack prepare pnpm@9.0.0 --activate
WORKDIR /app
COPY package.json pnpm-lock.yaml pnpm-workspace.yaml ./
COPY apps/api/package.json apps/api/
COPY apps/web/package.json apps/web/
COPY apps/ai-service/package.json apps/ai-service/
COPY packages/database/package.json packages/database/
COPY packages/shared/package.json packages/shared/
RUN pnpm install --frozen-lockfile
COPY . .
RUN pnpm build --filter=@coursecraft/web...
EXPOSE 3080
ENV PORT=3080
WORKDIR /app
CMD ["pnpm", "--filter", "@coursecraft/web", "start"]

View File

@ -50,6 +50,59 @@ services:
timeout: 5s
retries: 5
api:
build:
context: ..
dockerfile: docker/Dockerfile.api
container_name: coursecraft-api
restart: unless-stopped
env_file: ../.env
environment:
DATABASE_URL: postgresql://postgres:postgres@postgres:5432/coursecraft?schema=public
REDIS_URL: redis://redis:6379
REDIS_HOST: redis
REDIS_PORT: "6379"
MEILISEARCH_HOST: http://meilisearch:7700
PORT: "3125"
NODE_ENV: production
ports:
- "3125:3125"
depends_on:
postgres: { condition: service_healthy }
redis: { condition: service_healthy }
meilisearch: { condition: service_healthy }
ai-service:
build:
context: ..
dockerfile: docker/Dockerfile.ai
container_name: coursecraft-ai-service
restart: unless-stopped
env_file: ../.env
environment:
REDIS_URL: redis://redis:6379
REDIS_HOST: redis
REDIS_PORT: "6379"
NODE_ENV: production
depends_on:
redis: { condition: service_healthy }
web:
build:
context: ..
dockerfile: docker/Dockerfile.web
container_name: coursecraft-web
restart: unless-stopped
env_file: ../.env
environment:
API_URL: http://api:3125
PORT: "3080"
NODE_ENV: production
ports:
- "3080:3080"
depends_on:
- api
networks:
default:
name: coursecraft-network