Spaces:
Sleeping
Sleeping
| # βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| # 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"] | |