# ═══════════════════════════════════════════════════════════════════════ # Ark.Alliance.StartupCms.AI - Hugging Face Spaces Docker Deployment # ═══════════════════════════════════════════════════════════════════════ # Stage 1: Build Shared Library FROM node:22-alpine AS share-builder WORKDIR /app/share COPY Ark.Alliance.StartupCms.Ai.Share/package*.json ./ RUN npm install --legacy-peer-deps COPY Ark.Alliance.StartupCms.Ai.Share/ ./ RUN npm run build # Stage 2: Build Frontend FROM node:22-alpine AS frontend-builder WORKDIR /app COPY --from=share-builder /app/share /app/Ark.Alliance.StartupCms.Ai.Share WORKDIR /app/frontend COPY Ark.Alliance.StartupCms.Ai.UI/package*.json ./ RUN npm install --legacy-peer-deps COPY Ark.Alliance.StartupCms.Ai.UI/ ./ ENV VITE_API_URL=/api ENV VITE_USE_MOCK_DATA=false RUN npm run build # Stage 3: Build Backend FROM node:22-alpine AS backend-builder WORKDIR /app COPY --from=share-builder /app/share /app/Ark.Alliance.StartupCms.Ai.Share WORKDIR /app/backend COPY Ark.Alliance.StartupCms.Ai.Backend/package*.json ./ RUN npm install --legacy-peer-deps COPY Ark.Alliance.StartupCms.Ai.Backend/ ./ RUN npm run build # Stage 4: Production Runtime FROM node:22-alpine AS production RUN apk add --no-cache nginx WORKDIR /app # Copy backend build COPY --from=backend-builder /app/backend/dist ./dist COPY --from=backend-builder /app/backend/node_modules ./node_modules COPY --from=backend-builder /app/backend/package.json ./ COPY --from=backend-builder /app/Ark.Alliance.StartupCms.Ai.Share /app/Ark.Alliance.StartupCms.Ai.Share # Link the share module so it can be resolved by Node.js RUN mkdir -p /app/node_modules/@arkalliance && \ ln -s /app/Ark.Alliance.StartupCms.Ai.Share /app/node_modules/@arkalliance/startupcms-ai-share # Copy Assets for database seeding COPY --from=backend-builder /app/backend/src/Assets ./dist/Assets # Copy InitDbAsset for database seeding (JsonDatas and ProjectData) COPY --from=backend-builder /app/backend/src/database/InitDbAsset ./dist/database/InitDbAsset # Copy frontend static files COPY --from=frontend-builder /app/frontend/dist /usr/share/nginx/html # Copy nginx config COPY nginx.conf /etc/nginx/nginx.conf # Create persistent data directory (HuggingFace provides /data) RUN mkdir -p /data RUN mkdir -p /app/data # HF Spaces runs as user 1000 RUN chown -R 1000:1000 /app /usr/share/nginx/html /var/lib/nginx /var/log/nginx /data # Environment defaults ENV PORT=3085 ENV NODE_ENV=production ENV DATABASE_TYPE=sqlite ENV DATABASE_NAME=/data/startupcms.db ENV SEED_DATABASE=true # Expose HF Spaces default port EXPOSE 7860 # Start script COPY start.sh /app/start.sh RUN chmod +x /app/start.sh USER 1000 CMD ["/app/start.sh"]