diff --git a/docker-compose.yml b/docker-compose.yml index c6b4865..f9af935 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -6,7 +6,45 @@ services: - "6379:6379" volumes: - redis_data:/data - command: redis-server --save 60 1 --loglevel warning + + api: + build: + context: . + dockerfile: packages/api/Dockerfile + restart: unless-stopped + ports: + - "8000:8000" + environment: + - DATABASE_URL=sqlite:///./remodel.db + - REDIS_URL=redis://redis:6379 + depends_on: + - redis + volumes: + - ./data:/app/data + + worker: + build: + context: . + dockerfile: packages/api/Dockerfile + command: arq remodel_api.workers.main.WorkerSettings + restart: unless-stopped + environment: + - DATABASE_URL=sqlite:///./remodel.db + - REDIS_URL=redis://redis:6379 + depends_on: + - redis + volumes: + - ./data:/app/data + + web: + build: + context: ./packages/web + dockerfile: Dockerfile + restart: unless-stopped + ports: + - "3000:3000" + environment: + - NEXT_PUBLIC_API_URL=http://api:8000 volumes: - redis_data: + redis_data: \ No newline at end of file diff --git a/packages/api/Dockerfile b/packages/api/Dockerfile new file mode 100644 index 0000000..32f54dc --- /dev/null +++ b/packages/api/Dockerfile @@ -0,0 +1,26 @@ +FROM python:3.12-slim + +WORKDIR /app + +# Install poetry +RUN pip install poetry + +# Copy project files +COPY packages/engine/pyproject.toml packages/engine/ /app/packages/engine/ +COPY packages/api/pyproject.toml packages/api/ /app/packages/api/ + +# Install dependencies +RUN poetry install --no-interaction --no-venv-seeding + +# Copy source +COPY packages/engine/src /app/packages/engine/src +COPY packages/api/src /app/packages/api/src + +# Set Python path +ENV PYTHONPATH=/app/packages/engine/src:/app/packages/api/src + +WORKDIR /app/packages/api + +EXPOSE 8000 + +CMD ["uvicorn", "remodel_api.main:app", "--host", "0.0.0.0", "--port", "8000"] \ No newline at end of file diff --git a/packages/web/Dockerfile b/packages/web/Dockerfile new file mode 100644 index 0000000..444f098 --- /dev/null +++ b/packages/web/Dockerfile @@ -0,0 +1,38 @@ +FROM node:20-alpine AS builder + +WORKDIR /app + +# Install pnpm +RUN corepack enable && corepack prepare pnpm@latest --activate + +# Copy web package +COPY package.json pnpm-lock.yaml ./ +COPY . . + +# Install dependencies +RUN pnpm install --frozen-lockfile + +# Build +RUN pnpm build + +# Production runner +FROM node:20-alpine + +WORKDIR /app + +# Install pnpm +RUN corepack enable && corepack prepare pnpm@latest --activate + +# Copy built artifacts +COPY --from=builder /app/.next ./.next +COPY --from=builder /app/public ./public +COPY --from=builder /app/package.json . +COPY --from=builder /app/node_modules ./node_modules +COPY --from=builder /app/.env.local ./.env.local + +ENV NODE_ENV=production +ENV NEXT_TELEMETRY_DISABLED=1 + +EXPOSE 3000 + +CMD ["node", "server.js"] \ No newline at end of file