diff --git a/Dockerfile b/Dockerfile index e6675017..d7abca37 100644 --- a/Dockerfile +++ b/Dockerfile @@ -4,39 +4,67 @@ WORKDIR /app # Copy shared package.json and install dependencies COPY package.json package-lock.json ./ +COPY maxun-core/package.json ./maxun-core/package.json RUN npm install -# --- Backend Stage --- -FROM base AS backend -WORKDIR /app/server - -# Copy backend code -COPY server/src ./src -COPY maxun-core ./maxun-core - -EXPOSE 8080 -CMD ["npm", "run", "start:server"] # Add an npm script for backend start in package.json - -# --- Frontend Stage --- -FROM base AS frontend +# --- Backend Build Stage --- +FROM base AS backend-build WORKDIR /app -# Copy frontend code, including root-level index.html +# Copy TypeScript configs +COPY tsconfig*.json ./ +COPY server/tsconfig.json ./server/ + +# Copy ALL source code (both frontend and backend) +COPY src ./src +# Copy backend code and maxun-core +COPY server/src ./server/src +COPY maxun-core ./maxun-core + +# Install TypeScript globally and build +RUN npm install -g typescript +RUN npm run build:server + +# --- Frontend Build Stage --- +FROM base AS frontend-build +WORKDIR /app + +# Copy frontend code and configs COPY src ./src COPY index.html ./index.html COPY public ./public COPY vite.config.js ./ +COPY tsconfig.json ./ -# Run the Vite build -RUN npm run build && \ -ls -la && \ -ls -la build # This will help us verify the build output +# Build frontend +RUN npm run build -# --- Final Stage: Nginx --- -FROM nginx:alpine -COPY --from=frontend /app/build /usr/share/nginx/html -COPY --from=frontend /app/public/img /usr/share/nginx/html/img +# --- Production Stage --- +FROM nginx:alpine AS production -EXPOSE 80 -CMD ["nginx", "-g", "daemon off;"] +# Install Node.js in the production image +RUN apk add --update nodejs npm + +# Copy nginx configuration +COPY nginx.conf /etc/nginx/conf.d/default.conf + +# Copy built frontend +COPY --from=frontend-build /app/build /usr/share/nginx/html +COPY --from=frontend-build /app/public/img /usr/share/nginx/html/img + +# Copy built backend and its dependencies +WORKDIR /app +COPY --from=backend-build /app/package*.json ./ +COPY --from=backend-build /app/server/dist ./server/dist +COPY --from=backend-build /app/maxun-core ./maxun-core +COPY --from=backend-build /app/node_modules ./node_modules + +# Copy start script +COPY docker-entrypoint.sh / +RUN chmod +x /docker-entrypoint.sh + +EXPOSE 80 8080 + +# Start both nginx and node server +ENTRYPOINT ["/docker-entrypoint.sh"] \ No newline at end of file