mirror of
https://github.com/AutoMaker-Org/automaker.git
synced 2026-01-31 06:42:03 +00:00
- Modified Dockerfiles to copy package files for all workspaces, enhancing modularity. - Changed dependency installation to skip scripts, preventing unnecessary execution during builds. - Updated build commands to first build packages in dependency order before building the server and UI, ensuring proper build sequence.
76 lines
2.2 KiB
Docker
76 lines
2.2 KiB
Docker
# Automaker Backend Server
|
|
# Multi-stage build for minimal production image
|
|
|
|
# Build stage
|
|
FROM node:20-alpine AS builder
|
|
|
|
# Install build dependencies for native modules (node-pty)
|
|
RUN apk add --no-cache python3 make g++
|
|
|
|
WORKDIR /app
|
|
|
|
# Copy package files for all workspaces
|
|
COPY package*.json ./
|
|
COPY apps/server/package*.json ./apps/server/
|
|
COPY libs/types/package*.json ./libs/types/
|
|
COPY libs/utils/package*.json ./libs/utils/
|
|
COPY libs/prompts/package*.json ./libs/prompts/
|
|
COPY libs/platform/package*.json ./libs/platform/
|
|
COPY libs/model-resolver/package*.json ./libs/model-resolver/
|
|
COPY libs/dependency-resolver/package*.json ./libs/dependency-resolver/
|
|
COPY libs/git-utils/package*.json ./libs/git-utils/
|
|
COPY scripts ./scripts
|
|
|
|
# Install dependencies (--ignore-scripts to skip husky and build:packages in prepare script)
|
|
RUN npm ci --ignore-scripts
|
|
|
|
# Copy all source files
|
|
COPY libs ./libs
|
|
COPY apps/server ./apps/server
|
|
|
|
# Build packages in dependency order, then build server
|
|
RUN npm run build:packages && npm run build --workspace=apps/server
|
|
|
|
# Production stage
|
|
FROM node:20-alpine
|
|
|
|
# Install git, curl, and GitHub CLI (pinned version for reproducible builds)
|
|
RUN apk add --no-cache git curl && \
|
|
GH_VERSION="2.63.2" && \
|
|
curl -L "https://github.com/cli/cli/releases/download/v${GH_VERSION}/gh_${GH_VERSION}_linux_amd64.tar.gz" -o gh.tar.gz && \
|
|
tar -xzf gh.tar.gz && \
|
|
mv "gh_${GH_VERSION}_linux_amd64/bin/gh" /usr/local/bin/gh && \
|
|
rm -rf gh.tar.gz "gh_${GH_VERSION}_linux_amd64"
|
|
|
|
WORKDIR /app
|
|
|
|
# Create non-root user
|
|
RUN addgroup -g 1001 -S automaker && \
|
|
adduser -S automaker -u 1001
|
|
|
|
# Copy built files and production dependencies
|
|
COPY --from=builder /app/apps/server/dist ./dist
|
|
COPY --from=builder /app/apps/server/package*.json ./
|
|
COPY --from=builder /app/node_modules ./node_modules
|
|
|
|
# Create data directory
|
|
RUN mkdir -p /data && chown automaker:automaker /data
|
|
|
|
# Switch to non-root user
|
|
USER automaker
|
|
|
|
# Environment variables
|
|
ENV NODE_ENV=production
|
|
ENV PORT=3008
|
|
ENV DATA_DIR=/data
|
|
|
|
# Expose port
|
|
EXPOSE 3008
|
|
|
|
# Health check
|
|
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
|
|
CMD wget --no-verbose --tries=1 --spider http://localhost:3008/api/health || exit 1
|
|
|
|
# Start server
|
|
CMD ["node", "dist/index.js"]
|